From fbfbfc014559589e8082e99eae13f7b7b5af09e9 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 3 Aug 2026 12:37:22 +0800 Subject: [PATCH] fix: show invalid-token governance actions from manual entry --- static/js/main.js | 3 +++ ...alid_token_governance_frontend_contract.py | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+) create mode 100644 tests/test_invalid_token_governance_frontend_contract.py diff --git a/static/js/main.js b/static/js/main.js index a517ed70..10fa2b86 100644 --- a/static/js/main.js +++ b/static/js/main.js @@ -3133,6 +3133,9 @@ ${details} return; } + // 手动入口只会调用本加载函数,因此有候选时必须同步显示治理操作区。 + showInvalidTokenDetectionSummary(count, invalidTokenGovernanceCandidates); + // 渲染候选列表 const listEl = document.getElementById('invalidTokenCandidateList'); const listWrap = document.getElementById('invalidTokenCandidateListWrap'); diff --git a/tests/test_invalid_token_governance_frontend_contract.py b/tests/test_invalid_token_governance_frontend_contract.py new file mode 100644 index 00000000..097e2043 --- /dev/null +++ b/tests/test_invalid_token_governance_frontend_contract.py @@ -0,0 +1,24 @@ +"""失效 Token 治理手动入口的前端回归测试。""" + +import unittest +from pathlib import Path + + +class InvalidTokenGovernanceFrontendContractTests(unittest.TestCase): + def test_manual_governance_loader_reveals_action_summary(self): + """手动加载到候选后必须显示包含治理按钮的摘要区。""" + repo_root = Path(__file__).resolve().parents[1] + main_js = (repo_root / "static" / "js" / "main.js").read_text(encoding="utf-8") + loader_start = main_js.index("async function loadInvalidTokenGovernanceCandidates") + loader_end = main_js.index("/** 批量将失效 Token 候选账号置为停用 */", loader_start) + loader_source = main_js[loader_start:loader_end] + + self.assertIn( + "showInvalidTokenDetectionSummary(count, invalidTokenGovernanceCandidates);", + loader_source, + "手动失效治理入口加载到候选后没有显示治理操作区", + ) + + +if __name__ == "__main__": + unittest.main()