Coverage for tests / unit / tools / sqlfluff / test_output_parsing.py: 100%
39 statements
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2026-04-03 18:53 +0000
1"""Unit tests for sqlfluff output parsing."""
3from __future__ import annotations
5from assertpy import assert_that
7from lintro.parsers.sqlfluff.sqlfluff_parser import parse_sqlfluff_output
10def test_parse_sqlfluff_output_single_issue() -> None:
11 """Parse single issue from sqlfluff output."""
12 output = """[
13 {
14 "filepath": "test.sql",
15 "violations": [
16 {
17 "start_line_no": 1,
18 "start_line_pos": 1,
19 "code": "L010",
20 "description": "Keywords must be upper case.",
21 "name": "capitalisation.keywords"
22 }
23 ]
24 }
25 ]"""
26 issues = parse_sqlfluff_output(output)
28 assert_that(issues).is_length(1)
29 assert_that(issues[0].file).is_equal_to("test.sql")
30 assert_that(issues[0].line).is_equal_to(1)
31 assert_that(issues[0].code).is_equal_to("L010")
32 assert_that(issues[0].message).contains("Keywords must be upper case")
35def test_parse_sqlfluff_output_multiple_issues() -> None:
36 """Parse multiple issues from sqlfluff output."""
37 output = """[
38 {
39 "filepath": "test.sql",
40 "violations": [
41 {
42 "start_line_no": 1,
43 "start_line_pos": 1,
44 "code": "L010",
45 "description": "Keywords must be upper case."
46 },
47 {
48 "start_line_no": 2,
49 "start_line_pos": 5,
50 "code": "L011",
51 "description": "Implicit aliasing of columns."
52 }
53 ]
54 }
55 ]"""
56 issues = parse_sqlfluff_output(output)
58 assert_that(issues).is_length(2)
59 assert_that(issues[0].code).is_equal_to("L010")
60 assert_that(issues[1].code).is_equal_to("L011")
63def test_parse_sqlfluff_output_multiple_files() -> None:
64 """Parse issues from multiple files."""
65 output = """[
66 {
67 "filepath": "test1.sql",
68 "violations": [
69 {
70 "start_line_no": 1,
71 "start_line_pos": 1,
72 "code": "L010",
73 "description": "Keywords must be upper case."
74 }
75 ]
76 },
77 {
78 "filepath": "test2.sql",
79 "violations": [
80 {
81 "start_line_no": 3,
82 "start_line_pos": 10,
83 "code": "L014",
84 "description": "Inconsistent capitalisation."
85 }
86 ]
87 }
88 ]"""
89 issues = parse_sqlfluff_output(output)
91 assert_that(issues).is_length(2)
92 assert_that(issues[0].file).is_equal_to("test1.sql")
93 assert_that(issues[1].file).is_equal_to("test2.sql")
96def test_parse_sqlfluff_output_empty() -> None:
97 """Parse empty output returns empty list."""
98 issues = parse_sqlfluff_output("")
100 assert_that(issues).is_empty()
103def test_parse_sqlfluff_output_empty_array() -> None:
104 """Parse empty array returns empty list."""
105 issues = parse_sqlfluff_output("[]")
107 assert_that(issues).is_empty()
110def test_parse_sqlfluff_output_no_violations() -> None:
111 """Parse output with no violations returns empty list."""
112 output = """[
113 {
114 "filepath": "test.sql",
115 "violations": []
116 }
117 ]"""
118 issues = parse_sqlfluff_output(output)
120 assert_that(issues).is_empty()
123def test_parse_sqlfluff_output_invalid_json() -> None:
124 """Parse invalid JSON returns empty list."""
125 issues = parse_sqlfluff_output("not valid json")
127 assert_that(issues).is_empty()
130def test_parse_sqlfluff_output_none() -> None:
131 """Parse None input returns empty list."""
132 issues = parse_sqlfluff_output(None)
134 assert_that(issues).is_empty()