From 7da1e22446226a48f780d5c705e9cf94aa2b6ac1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B5=85=E5=BF=B5?= Date: Tue, 29 Sep 2026 19:11:32 +0800 Subject: [PATCH] =?UTF-8?q?test:=20GDPR=E4=B8=89=E5=85=A5=E5=8F=A3?= =?UTF-8?q?=E7=BB=93=E6=9E=84=E6=96=AD=E8=A8=80(Task=209=E8=B4=A8=E9=87=8F?= =?UTF-8?q?=E5=AE=A1=E6=9F=A5)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Code --- tests/test_invite_static.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tests/test_invite_static.py b/tests/test_invite_static.py index 1624272..a4af56b 100644 --- a/tests/test_invite_static.py +++ b/tests/test_invite_static.py @@ -67,3 +67,14 @@ def test_autoinvite_specialcase_removed_and_guard_kept(): fn = _extract_function(src, "startInviteTimer") assert "if (!autoInvite) return;" in fn, \ "startInviteTimer 必须保留 data-auto-invite=false 永不自动弹的守卫" + + +def test_gdpr_privacy_notice_present(): + """GDPR 三入口结构锁(Task 9 质量审查): 邀请卡/聊天面板/独立页的 + privacy 提示是纯模板字符串,无此断言则重构时会无声丢失。""" + wjs = _read("widget.js") + assert "invite-privacy" in wjs and "chat-footer" in wjs + assert 'href="https://hesupipe.com/privacy-policy/"' in wjs + assert 'target="_blank" rel="noopener"' in wjs + chat = _read("chat.html") + assert "privacy policy" in chat and "privacy-policy/" in chat