| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- import re
- from pathlib import Path
- ROOT = Path(__file__).resolve().parents[1]
- ROUTES = ROOT / "frontend/src/router/routes.js"
- def _route_block(source: str, *, indent: int, name: str) -> str:
- start_token = "\n" + " " * indent + "{\n"
- name_token = " " * (indent + 2) + f"name: '{name}'"
- assert name_token in source, f"route {name!r} marker not found"
- name_at = source.index(name_token)
- start = source.rfind(start_token, 0, name_at)
- if start >= 0:
- start += 1
- elif source.startswith(start_token[1:]):
- start = 0
- terminators = [
- "\n" + " " * indent + "},",
- "\n" + " " * indent + "}",
- ]
- ends = [(source.find(token, name_at), token) for token in terminators]
- valid_ends = [(end, token) for end, token in ends if end >= 0]
- assert start >= 0 and valid_ends, f"route {name!r} block boundaries not found"
- end, end_token = min(valid_ends)
- return source[start : end + len(end_token)]
- def _assert_exact_line(block: str, *, indent: int, field: str, value: str) -> None:
- expected = " " * indent + f"{field}: {value}"
- assert re.search(rf"(?m)^{re.escape(expected)},?$", block), f"missing exact line: {expected}"
- def _meta_block(route: str, *, indent: int) -> str:
- start_token = "\n" + " " * indent + "meta: {\n"
- end_token = "\n" + " " * indent + "},"
- start = route.find(start_token)
- end = route.find(end_token, start)
- assert start >= 0 and end >= 0, "route meta block boundaries not found"
- return route[start + 1 : end + len(end_token)]
- def test_enterprise_identity_is_owned_only_by_system_management():
- routes = ROUTES.read_text(encoding="utf-8")
- data_research = _route_block(routes, indent=4, name="data-governance")
- system = _route_block(routes, indent=4, name="systemManage")
- assert "systemEnterpriseIdentity" not in data_research
- assert "path: '/systemManage/enterprise-identity'" not in data_research
- assert "component: 'systemManage/enterpriseIdentity'" not in data_research
- assert routes.count("name: 'systemEnterpriseIdentity'") == 1
- assert routes.count("path: '/systemManage/enterprise-identity'") == 1
- assert routes.count("component: 'systemManage/enterpriseIdentity'") == 1
- identity = _route_block(system, indent=8, name="systemEnterpriseIdentity")
- for field, value in [
- ("hidden", "0"),
- ("type", "1"),
- ("title", "'企业身份与 SSO'"),
- ("path", "'/systemManage/enterprise-identity'"),
- ("children", "[]"),
- ("label", "'企业身份与 SSO'"),
- ("sort", "2"),
- ("component", "'systemManage/enterpriseIdentity'"),
- ("name", "'systemEnterpriseIdentity'"),
- ("alwaysShow", "0"),
- ]:
- _assert_exact_line(identity, indent=10, field=field, value=value)
- meta = _meta_block(identity, indent=10)
- for field, value in [
- ("title", "'企业身份与 SSO'"),
- ("icon", "'mdi-account-key-outline'"),
- ("permissions", "['identity:manage']"),
- ]:
- _assert_exact_line(meta, indent=12, field=field, value=value)
- def test_system_management_navigation_order_is_stable():
- routes = ROUTES.read_text(encoding="utf-8")
- system = _route_block(routes, indent=4, name="systemManage")
- names = [
- "systemUserManage",
- "systemEnterpriseIdentity",
- "systemResponsibilityManage",
- "systemGovernanceAudit",
- "systemAgentGovernance",
- ]
- for name in names:
- assert routes.count(f"name: '{name}'") == 1
- positions = []
- for name in names:
- marker = f"name: '{name}'"
- assert marker in system, f"System Management is missing route {name!r}"
- positions.append(system.index(marker))
- assert positions == sorted(positions)
- for expected, name in enumerate(names, start=1):
- block = _route_block(system, indent=8, name=name)
- assert re.search(rf"(?m)^\s+sort: {expected},?$", block)
|