39 lines
1.5 KiB
Python
39 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
|
|
from pydantic import ValidationError
|
|
|
|
from govoplan_core.privacy.schemas import (
|
|
RETENTION_POLICY_FIELD_KEYS,
|
|
PrivacyRetentionPolicyItem,
|
|
PrivacyRetentionPolicyPatchItem,
|
|
default_allow_lower_level_limits,
|
|
normalize_allow_lower_level_limits,
|
|
)
|
|
|
|
|
|
class PrivacySchemaContractTests(unittest.TestCase):
|
|
def test_default_allow_lower_level_limits_cover_every_retention_field(self) -> None:
|
|
self.assertEqual({key: True for key in RETENTION_POLICY_FIELD_KEYS}, default_allow_lower_level_limits())
|
|
|
|
def test_policy_item_fills_missing_lower_level_limits(self) -> None:
|
|
item = PrivacyRetentionPolicyItem.model_validate({"allow_lower_level_limits": {"audit_detail_level": False}})
|
|
|
|
self.assertFalse(item.allow_lower_level_limits["audit_detail_level"])
|
|
self.assertTrue(item.allow_lower_level_limits["store_raw_campaign_json"])
|
|
|
|
def test_policy_patch_keeps_lower_level_limits_sparse(self) -> None:
|
|
patch = PrivacyRetentionPolicyPatchItem.model_validate({"allow_lower_level_limits": {"audit_detail_level": False}})
|
|
|
|
self.assertEqual({"audit_detail_level": False}, patch.allow_lower_level_limits)
|
|
self.assertIsNone(normalize_allow_lower_level_limits("", fill_defaults=False))
|
|
|
|
def test_unknown_lower_level_limit_field_is_rejected(self) -> None:
|
|
with self.assertRaises(ValidationError):
|
|
PrivacyRetentionPolicyItem.model_validate({"allow_lower_level_limits": {"unknown": True}})
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|