from __future__ import annotations import pytest from yuxi.channel.common.schemas import COMMON_DM_POLICY_SCHEMA, COMMON_GROUP_POLICY_SCHEMA class TestCommonDmPolicySchema: @pytest.fixture(scope="class") def validator(self): jsonschema = pytest.importorskip("jsonschema") return jsonschema.Draft202012Validator def test_allows_open_mode(self, validator): instance = {"mode": "open"} assert validator(COMMON_DM_POLICY_SCHEMA).is_valid(instance) def test_allows_allow_from_mode(self, validator): instance = {"mode": "allow_from", "allow_list": ["user1", "user2"]} assert validator(COMMON_DM_POLICY_SCHEMA).is_valid(instance) def test_allows_deny_mode(self, validator): instance = {"mode": "deny", "deny_list": ["user1"]} assert validator(COMMON_DM_POLICY_SCHEMA).is_valid(instance) def test_allows_all_known_fields(self, validator): instance = {"mode": "open", "allow_list": ["u1"], "deny_list": ["u2"]} assert validator(COMMON_DM_POLICY_SCHEMA).is_valid(instance) def test_rejects_unknown_fields(self, validator): instance = {"mode": "open", "extra": True} assert not validator(COMMON_DM_POLICY_SCHEMA).is_valid(instance) def test_rejects_invalid_mode(self, validator): instance = {"mode": "block"} assert not validator(COMMON_DM_POLICY_SCHEMA).is_valid(instance) def test_rejects_non_string_allow_list_items(self, validator): instance = {"mode": "allow_from", "allow_list": [1, 2]} assert not validator(COMMON_DM_POLICY_SCHEMA).is_valid(instance) class TestCommonGroupPolicySchema: @pytest.fixture(scope="class") def validator(self): jsonschema = pytest.importorskip("jsonschema") return jsonschema.Draft202012Validator def test_allows_known_fields(self, validator): instance = { "require_mention": True, "allow_groups": ["g1"], "deny_groups": ["g2"], } assert validator(COMMON_GROUP_POLICY_SCHEMA).is_valid(instance) def test_allows_empty_object(self, validator): assert validator(COMMON_GROUP_POLICY_SCHEMA).is_valid({}) def test_rejects_unknown_fields(self, validator): instance = {"require_mention": False, "unknown": True} assert not validator(COMMON_GROUP_POLICY_SCHEMA).is_valid(instance) def test_rejects_non_boolean_require_mention(self, validator): instance = {"require_mention": "yes"} assert not validator(COMMON_GROUP_POLICY_SCHEMA).is_valid(instance) def test_rejects_non_string_group_items(self, validator): instance = {"allow_groups": [1]} assert not validator(COMMON_GROUP_POLICY_SCHEMA).is_valid(instance)