Coverage for ckanext/udc/tests/test_cli_udc.py: 100%
49 statements
« prev ^ index » next coverage.py v7.7.1, created at 2026-03-30 22:15 +0000
« prev ^ index » next coverage.py v7.7.1, created at 2026-03-30 22:15 +0000
1from types import SimpleNamespace
3from ckanext.udc.cli import udc as udc_cli
6def test_get_number_field_names_uses_config_order():
7 fields = udc_cli._get_number_field_names(
8 {
9 "maturity_model": [
10 {
11 "fields": [
12 {"name": "title", "type": "text"},
13 {"name": "number_of_rows", "type": "number"},
14 ]
15 },
16 {
17 "fields": [
18 {"name": "number_of_cells", "type": "number"},
19 {"name": "number_of_rows", "type": "number"},
20 ]
21 },
22 ]
23 }
24 )
26 assert fields == ["number_of_rows", "number_of_cells"]
29def test_inspect_number_field_value_detects_fixable_localized_json():
30 inspection = udc_cli._inspect_number_field_value('{"en": "351", "fr": "351"}')
32 assert inspection == {
33 "status": "fixable_localized",
34 "normalized": "351",
35 }
38def test_inspect_number_field_value_accepts_thousands_separators():
39 inspection = udc_cli._inspect_number_field_value("10,740")
41 assert inspection == {
42 "status": "fixable_scalar",
43 "normalized": "10740",
44 }
47def test_inspect_number_field_value_detects_fixable_localized_json_with_thousands_separators():
48 inspection = udc_cli._inspect_number_field_value('{"en": "10,740", "fr": "10,740"}')
50 assert inspection == {
51 "status": "fixable_localized",
52 "normalized": "10740",
53 }
56def test_inspect_number_field_value_rejects_malformed_thousands_separators():
57 inspection = udc_cli._inspect_number_field_value("10,74")
59 assert inspection == {
60 "status": "invalid",
61 "normalized": None,
62 }
65def test_inspect_number_field_value_flags_conflicting_localized_json():
66 inspection = udc_cli._inspect_number_field_value('{"en": "351", "fr": "352"}')
68 assert inspection == {
69 "status": "invalid_localized",
70 "normalized": None,
71 }
74def test_process_number_field_migration_dry_run_reports_without_mutating():
75 package = SimpleNamespace(
76 id="pkg-1",
77 name="housing-data",
78 extras={"number_of_cells": '{"en": "351"}'},
79 )
80 messages = []
82 stats = udc_cli._process_number_field_migration(
83 [package],
84 ["number_of_cells"],
85 fix=False,
86 echo=messages.append,
87 )
89 assert package.extras["number_of_cells"] == '{"en": "351"}'
90 assert stats == {
91 "packages_scanned": 1,
92 "packages_with_issues": 1,
93 "issues_found": 1,
94 "fixable": 1,
95 "fixed": 0,
96 "invalid": 0,
97 }
98 assert messages == [
99 'Would fix package pkg-1 (housing-data) field "number_of_cells": \'{"en": "351"}\' -> \'351\''
100 ]
103def test_process_number_field_migration_fix_updates_fixable_values():
104 package = SimpleNamespace(
105 id="pkg-1",
106 name="housing-data",
107 extras={
108 "number_of_cells": '{"en": "351"}',
109 "number_of_rows": "not-a-number",
110 },
111 )
112 messages = []
114 stats = udc_cli._process_number_field_migration(
115 [package],
116 ["number_of_cells", "number_of_rows"],
117 fix=True,
118 echo=messages.append,
119 )
121 assert package.extras["number_of_cells"] == "351"
122 assert package.extras["number_of_rows"] == "not-a-number"
123 assert stats == {
124 "packages_scanned": 1,
125 "packages_with_issues": 1,
126 "issues_found": 2,
127 "fixable": 1,
128 "fixed": 1,
129 "invalid": 1,
130 }
131 assert messages == [
132 'Fix package pkg-1 (housing-data) field "number_of_cells": \'{"en": "351"}\' -> \'351\'',
133 'Invalid value on package pkg-1 (housing-data) field "number_of_rows": \'not-a-number\'',
134 ]
137def test_process_number_field_migration_fix_updates_scalar_values_with_thousands_separators():
138 package = SimpleNamespace(
139 id="pkg-1",
140 name="housing-data",
141 extras={"number_of_cells": "10,556"},
142 )
143 messages = []
145 stats = udc_cli._process_number_field_migration(
146 [package],
147 ["number_of_cells"],
148 fix=True,
149 echo=messages.append,
150 )
152 assert package.extras["number_of_cells"] == "10556"
153 assert stats == {
154 "packages_scanned": 1,
155 "packages_with_issues": 1,
156 "issues_found": 1,
157 "fixable": 1,
158 "fixed": 1,
159 "invalid": 0,
160 }
161 assert messages == [
162 'Fix package pkg-1 (housing-data) field "number_of_cells": \'10,556\' -> \'10556\''
163 ]
166def test_process_number_field_migration_includes_draft_packages_when_provided():
167 package = SimpleNamespace(
168 id="pkg-draft-1",
169 name="draft-housing-data",
170 state="draft",
171 extras={"number_of_cells": "254,238"},
172 )
173 messages = []
175 stats = udc_cli._process_number_field_migration(
176 [package],
177 ["number_of_cells"],
178 fix=True,
179 echo=messages.append,
180 )
182 assert package.extras["number_of_cells"] == "254238"
183 assert stats == {
184 "packages_scanned": 1,
185 "packages_with_issues": 1,
186 "issues_found": 1,
187 "fixable": 1,
188 "fixed": 1,
189 "invalid": 0,
190 }
191 assert messages == [
192 'Fix package pkg-draft-1 (draft-housing-data) field "number_of_cells": \'254,238\' -> \'254238\''
193 ]