| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- import pytest
- from ontorefactor_governance.db import Database
- from ontorefactor_governance.service import (
- GovernanceError,
- export_jsonld,
- impact,
- list_elements,
- require_project,
- seed_challenge_cup_demo,
- seed_tenant_isolation,
- )
- @pytest.fixture
- def db():
- value = Database("sqlite:///:memory:")
- yield value
- value.close()
- def test_reference_slice_is_valid_and_idempotent(db):
- first = seed_tenant_isolation(db, "tenant-a")
- second = seed_tenant_isolation(db, "tenant-a")
- assert first["validation"]["valid"] is True
- assert second["validation"]["valid"] is True
- assert second["overview"]["totals"] == {
- "elements": 48,
- "assertions": 56,
- "pending_reviews": 0,
- "evidence": 2,
- "rules": 5,
- "open_issues": 0,
- "agent_runs": 0,
- }
- assert second["overview"]["layers"] == {"M3": 8, "M2": 24, "M1": 13, "M0": 3}
- def test_tenant_scope_is_enforced(db):
- result = seed_tenant_isolation(db, "tenant-a")
- with pytest.raises(GovernanceError) as error:
- require_project(db, "tenant-b", result["project"]["id"])
- assert error.value.status == 404
- def test_impact_and_jsonld_export(db):
- result = seed_tenant_isolation(db, "tenant-a")
- project_id = result["project"]["id"]
- elements = list_elements(db, "tenant-a", project_id)["items"]
- tenant = next(item for item in elements if item["name"] == "Tenant")
- affected = impact(db, "tenant-a", tenant["id"], 3)
- exported = export_jsonld(db, "tenant-a", project_id)
- assert affected["center"]["name"] == "Tenant"
- assert any(node["name"] == "DcpTenantTable" for node in affected["nodes"])
- assert exported["@id"] == result["project"]["namespace"]
- assert len(exported["@graph"]) == 104
- def test_challenge_cup_demo_is_idempotent_and_has_a_field_impact_story(db):
- first = seed_challenge_cup_demo(db, "demo")
- second = seed_challenge_cup_demo(db, "demo")
- assert first["validation"]["valid"] is True
- assert second["overview"]["demo"]["decision_code"] == "BLOCKED"
- assert second["overview"]["demo"]["asset_id"]
- assert second["overview"]["totals"]["evidence"] == 6
- assert second["overview"]["totals"]["rules"] == 5
- assert second["overview"]["totals"]["open_issues"] == 4
- affected = impact(db, "demo", second["overview"]["demo"]["asset_id"], 3)
- names = {item["name"] for item in affected["nodes"]}
- assert "用户画像查询 API" in names
- assert "短信通知任务" in names
- assert "IAM 数据 Owner" in names
- assert "手机号个人信息保护策略" in names
|