1818
1919class TestRuleRegistry :
2020 def test_all_rules_loaded (self ) -> None :
21- assert len (ALL_RULES ) == 34
21+ assert len (ALL_RULES ) == 35
2222
2323 def test_10_errors (self ) -> None :
2424 # 8 E-series + 2 T-series (T002 xp-cmdshell, T004 deprecated-outer-join).
@@ -29,7 +29,7 @@ def test_24_warnings(self) -> None:
2929 # 18 W-series + 3 S-series + 3 T-series (T001 with-nolock,
3030 # T003 cursor-declaration, T005 create-index-without-online).
3131 warnings = [r for r in ALL_RULES if r .severity == "warning" ]
32- assert len (warnings ) == 24
32+ assert len (warnings ) == 25
3333
3434 def test_unique_ids (self ) -> None :
3535 ids = [r .id for r in ALL_RULES ]
@@ -193,6 +193,26 @@ def test_w016_not_in_value_list_ok(self, tmp_path) -> None:
193193 w016 = [f for f in result .findings if f .rule_id == "W016" ]
194194 assert not w016
195195
196+ def test_w014_case_without_else (self ) -> None :
197+ findings = check ([str (FIXTURES / "warnings.sql" )])
198+ w014 = [f for f in findings .findings if f .rule_id == "W014" ]
199+ assert len (w014 ) >= 1
200+ assert "CASE" in w014 [0 ].message
201+
202+ def test_w014_case_with_else_ok (self , tmp_path ) -> None :
203+ sql = tmp_path / "case_with_else.sql"
204+ sql .write_text (
205+ "SELECT CASE\n "
206+ " WHEN status = 'paid' THEN 1\n "
207+ " WHEN status = 'pending' THEN 0\n "
208+ " ELSE NULL\n "
209+ "END AS paid_flag\n "
210+ "FROM orders;\n "
211+ )
212+ result = check ([str (sql )])
213+ w014 = [f for f in result .findings if f .rule_id == "W014" ]
214+ assert not w014
215+
196216
197217# ---------------------------------------------------------------------------
198218# Clean file
0 commit comments