diff --git a/src/dbt_score/rule.py b/src/dbt_score/rule.py index 6471537..2170b20 100644 --- a/src/dbt_score/rule.py +++ b/src/dbt_score/rule.py @@ -33,7 +33,7 @@ def __init_subclass__(cls, **kwargs) -> None: # type: ignore """Initializes the subclass.""" super().__init_subclass__(**kwargs) if not hasattr(cls, "description"): - raise TypeError("Subclass must define class attribute `description`.") + raise AttributeError("Subclass must define class attribute `description`.") def evaluate(self, model: Model) -> RuleViolation | None: """Evaluates the rule.""" @@ -58,7 +58,7 @@ def decorator_rule( ) -> Type[Rule]: """Decorator function.""" if func.__doc__ is None and description is None: - raise TypeError("Rule must define `description` or `func.__doc__`.") + raise AttributeError("Rule must define `description` or `func.__doc__`.") # Get description parameter, otherwise use the docstring. rule_description = description or ( diff --git a/tests/test_rule.py b/tests/test_rule.py index d4ae41c..febdd7b 100644 --- a/tests/test_rule.py +++ b/tests/test_rule.py @@ -2,10 +2,10 @@ import pytest from dbt_score.models import Model -from dbt_score.rule import Rule, RuleViolation, Severity +from dbt_score.rule import Rule, RuleViolation, Severity, rule -def test_rule_decorator(decorator_rule, class_rule, model1, model2): +def test_rule_decorator_and_class(decorator_rule, class_rule, model1, model2): """Test rule creation with the rule decorator and class.""" decorator_rule_instance = decorator_rule() class_rule_instance = class_rule() @@ -23,9 +23,18 @@ def assertions(rule_instance): assertions(class_rule_instance) +def test_missing_description_rule_decorator(): + """Test missing description in rule decorator.""" + with pytest.raises(AttributeError): + + @rule() + def example_rule(model: Model) -> RuleViolation | None: + return None + + def test_missing_description_rule_class(): """Test missing description in rule class.""" - with pytest.raises(TypeError): + with pytest.raises(AttributeError): class BadRule(Rule): """Bad example rule."""