diff --git a/backend/test_operations_center.py b/backend/test_operations_center.py index 332be7d..bdec91c 100644 --- a/backend/test_operations_center.py +++ b/backend/test_operations_center.py @@ -149,9 +149,12 @@ class OperationsCenterTests(unittest.TestCase): def test_navigation_is_role_aware_and_keeps_project_context(self): root = Path(__file__).resolve().parents[1] nav = (root / "src/components/xingbang/AgentNav.tsx").read_text(encoding="utf-8") + selector = (root / "src/components/xingbang/IdentitySelector.tsx").read_text(encoding="utf-8") self.assertNotIn("四 Agent 工作区",nav) - for label in ("业务助手","项目工作台","业务时效","配置治理","当前身份"): + for label in ("业务助手","项目工作台","业务时效","配置治理"): self.assertIn(label,nav) + self.assertIn("当前身份",selector) + self.assertIn("选择身份",selector) for label in ("运行中心","检查依据","演示与验收","兼容入口"): self.assertNotIn(label,nav) self.assertIn("ROLE_LABEL",nav) diff --git a/scripts/test_identity_recovery.cjs b/scripts/test_identity_recovery.cjs new file mode 100644 index 0000000..c939584 --- /dev/null +++ b/scripts/test_identity_recovery.cjs @@ -0,0 +1,15 @@ +const assert = require("node:assert/strict"); +const fs = require("node:fs"); +const path = require("node:path"); + +const root = path.resolve(__dirname, ".."); +const nav = fs.readFileSync(path.join(root, "src/components/xingbang/AgentNav.tsx"), "utf8"); +const selector = fs.readFileSync(path.join(root, "src/components/xingbang/IdentitySelector.tsx"), "utf8"); + +assert.match(nav, /response\.status===401/, "导航应识别无效访问令牌"); +assert.match(nav, /removeItem\("xingbang-access-token"\)/, "无效旧令牌应自动清理"); +assert.match(nav, /setItem\("xingbang-demo-role","manager"\)/, "清理后应恢复到客户经理演示身份"); +assert.match(nav, /pending=\{!identity\}/, "身份连接失败时仍应显示身份选择入口"); +assert.match(selector, /pending&&