@@ -145,7 +145,11 @@ def evaluate(self, source: Source) -> bool: # type: ignore[override]
145145
146146 @pytest .mark .parametrize (
147147 "rule_filter_fixture" ,
148- ["source_filter_no_parens" , "source_filter_parens" , "source_filter_class" ],
148+ [
149+ "source_filter_no_parens" ,
150+ "source_filter_parens" ,
151+ "source_filter_class" ,
152+ ],
149153 )
150154 def test_rule_filter_must_match_resource_type_as_rule (
151155 self , request , rule_filter_fixture
@@ -174,3 +178,21 @@ def evaluate(self, model: Model) -> RuleViolation | None: # type: ignore[overri
174178
175179 assert "Mismatched resource_type on filter" in str (excinfo .value )
176180 assert "Expected Model, but got Source" in str (excinfo .value )
181+
182+
183+ def test_should_evaluate (model1 , source1 ):
184+ """Test that Rule.should_evaluate works correctly for different resource types."""
185+
186+ @rule_filter
187+ def model_filter (model : Model ) -> bool :
188+ """Filter on empty constraints."""
189+ return model .constraints == [] # constraints does not exist for Source
190+
191+ @rule (rule_filters = {model_filter ()})
192+ def model_rule (model : Model ) -> RuleViolation | None :
193+ """Rule that always returns None."""
194+ return None
195+
196+ rule1 = model_rule ()
197+ assert rule1 .should_evaluate (model1 ) is True
198+ assert rule1 .should_evaluate (source1 ) is False
0 commit comments