muse-agent-example/.claude/skills/db/scripts/test_authorization_snapshot_ddl.py
zizi 2666d50a8e 修复: 收紧授权用途与导入任务匹配
阻断允许用途与禁止用途冲突,并让授权快照外层与内层保持一致。
导入任务按参考作品原文件唯一匹配,避免无关成功任务误阻断回放。
2026-07-19 22:19:47 +08:00

35 lines
1.5 KiB
Python

#!/usr/bin/env python3
"""参考作品授权快照 DDL 的 append-only 静态门禁。"""
import pathlib
import re
import unittest
DDL_PATH = pathlib.Path(__file__).resolve().parents[4] / "db" / "ddl" / "96-example参考作品授权快照.sql"
class AuthorizationSnapshotDdlTest(unittest.TestCase):
def test_authorization_snapshot_is_append_only_and_version_unique(self):
self.assertTrue(DDL_PATH.is_file(), "缺少授权快照 DDL")
ddl = DDL_PATH.read_text(encoding="utf-8")
self.assertIn("CREATE TABLE example_reference_authorization_snapshot", ddl)
self.assertRegex(ddl, r"UNIQUE\s*\(tenant_id,\s*work_id,\s*snapshot_version\)")
self.assertRegex(ddl, r"BEFORE\s+UPDATE\s+OR\s+DELETE")
self.assertIn("source_hash", ddl)
self.assertIn("source_version", ddl)
self.assertRegex(ddl, r"research_only.*public_domain.*licensed.*unauthorized")
self.assertRegex(ddl, r"jsonb_typeof\(allowed_purpose\)\s*=\s*'array'")
self.assertRegex(ddl, r"jsonb_typeof\(forbidden_purpose\)\s*=\s*'array'")
self.assertRegex(
ddl,
r"CHECK\s*\(example_jsonb_text_arrays_disjoint\(allowed_purpose,\s*forbidden_purpose\)\)",
)
self.assertIn("authorization_basis <> 'user_authorization' OR copyright_status = 'research_only'", ddl)
self.assertIn("allowed_purpose = '[\"offline_evaluation\"]'::jsonb", ddl)
self.assertIsNotNone(re.search(r"RAISE\s+EXCEPTION", ddl, re.IGNORECASE))
if __name__ == "__main__":
unittest.main()