测试:加强一级菜单稳定字段契约
This commit is contained in:
@@ -590,6 +590,14 @@ EXPECTED_TOP_LEVEL_MENU_POSITIONS = {
|
|||||||
2: ('系统监控', 0, 5),
|
2: ('系统监控', 0, 5),
|
||||||
3: ('系统工具', 0, 6),
|
3: ('系统工具', 0, 6),
|
||||||
}
|
}
|
||||||
|
EXPECTED_TOP_LEVEL_MENU_STABLE_FIELDS = {
|
||||||
|
121: ('基础资料维护', 'businessMaster', None, '', '', '1', '0', 'M', '0', '0', '', '#'),
|
||||||
|
122: ('业务管理', 'businessOperation', None, '', '', '1', '0', 'M', '0', '0', '', '#'),
|
||||||
|
123: ('报表查询', 'businessReport', None, '', '', '1', '0', 'M', '0', '0', '', '#'),
|
||||||
|
1: ('系统管理', 'system', None, '', '', '1', '0', 'M', '0', '0', '', 'system'),
|
||||||
|
2: ('系统监控', 'monitor', None, '', '', '1', '0', 'M', '0', '0', '', 'monitor'),
|
||||||
|
3: ('系统工具', 'tool', None, '', '', '1', '0', 'M', '0', '0', '', 'tool'),
|
||||||
|
}
|
||||||
MENU_PROMOTION_IDS = set(EXPECTED_TOP_LEVEL_MENU_POSITIONS)
|
MENU_PROMOTION_IDS = set(EXPECTED_TOP_LEVEL_MENU_POSITIONS)
|
||||||
BUSINESS_MENU_IDS = set(range(121, 124)) | set(range(502, 519)) | set(range(1065, 1109))
|
BUSINESS_MENU_IDS = set(range(121, 124)) | set(range(502, 519)) | set(range(1065, 1109))
|
||||||
MYSQL_MENU_STABLE_COLUMNS = (
|
MYSQL_MENU_STABLE_COLUMNS = (
|
||||||
@@ -870,6 +878,15 @@ def _business_menu_rows(sql: str) -> dict[int, list]:
|
|||||||
return _menu_rows(sql, BUSINESS_MENU_IDS)
|
return _menu_rows(sql, BUSINESS_MENU_IDS)
|
||||||
|
|
||||||
|
|
||||||
|
def _assert_top_level_menu_fields(test_case: unittest.TestCase, sql: str) -> None:
|
||||||
|
rows = _menu_rows(sql, MENU_PROMOTION_IDS)
|
||||||
|
actual_positions = {menu_id: (row[1], int(row[2]), int(row[3])) for menu_id, row in rows.items()}
|
||||||
|
test_case.assertEqual(EXPECTED_TOP_LEVEL_MENU_POSITIONS, actual_positions)
|
||||||
|
stable_indexes = (1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14)
|
||||||
|
actual_stable_fields = {menu_id: tuple(row[index] for index in stable_indexes) for menu_id, row in rows.items()}
|
||||||
|
test_case.assertEqual(EXPECTED_TOP_LEVEL_MENU_STABLE_FIELDS, actual_stable_fields)
|
||||||
|
|
||||||
|
|
||||||
def _assert_business_menu_fields(
|
def _assert_business_menu_fields(
|
||||||
test_case: unittest.TestCase,
|
test_case: unittest.TestCase,
|
||||||
sql: str,
|
sql: str,
|
||||||
@@ -1002,9 +1019,27 @@ class SqlContractTest(unittest.TestCase):
|
|||||||
for filename in INITIALIZERS:
|
for filename in INITIALIZERS:
|
||||||
with self.subTest(filename=filename):
|
with self.subTest(filename=filename):
|
||||||
sql = (SQL_ROOT / filename).read_text(encoding='utf-8')
|
sql = (SQL_ROOT / filename).read_text(encoding='utf-8')
|
||||||
rows = _menu_rows(sql, MENU_PROMOTION_IDS)
|
_assert_top_level_menu_fields(self, sql)
|
||||||
actual = {menu_id: (row[1], int(row[2]), int(row[3])) for menu_id, row in rows.items()}
|
|
||||||
self.assertEqual(EXPECTED_TOP_LEVEL_MENU_POSITIONS, actual)
|
def test_top_level_menu_contract_rejects_same_stable_field_drift_in_both_initializers(self) -> None:
|
||||||
|
mutations = (
|
||||||
|
(1, '系统管理', 'system', 'driftSystemIcon'),
|
||||||
|
(121, '基础资料维护', '#', 'driftBusinessIcon'),
|
||||||
|
)
|
||||||
|
for filename in INITIALIZERS:
|
||||||
|
sql = (SQL_ROOT / filename).read_text(encoding='utf-8')
|
||||||
|
for menu_id, menu_name, original_icon, drifted_icon in mutations:
|
||||||
|
with self.subTest(filename=filename, menu_id=menu_id):
|
||||||
|
mutated, replacements = re.subn(
|
||||||
|
rf"(\(?\s*'?{menu_id}'?\s*,\s*'{menu_name}'.*?,\s*)'{re.escape(original_icon)}'"
|
||||||
|
r"(\s*,\s*'admin')",
|
||||||
|
rf"\1'{drifted_icon}'\2",
|
||||||
|
sql,
|
||||||
|
count=1,
|
||||||
|
)
|
||||||
|
self.assertEqual(1, replacements)
|
||||||
|
with self.assertRaises(AssertionError):
|
||||||
|
_assert_top_level_menu_fields(self, mutated)
|
||||||
|
|
||||||
def test_business_permission_inventory_rejects_duplicate_permission(self) -> None:
|
def test_business_permission_inventory_rejects_duplicate_permission(self) -> None:
|
||||||
sql = (SQL_ROOT / INITIALIZERS[0]).read_text(encoding='utf-8')
|
sql = (SQL_ROOT / INITIALIZERS[0]).read_text(encoding='utf-8')
|
||||||
|
|||||||
Reference in New Issue
Block a user