from unittest import TestCase as StdlibTestCase import yaml from synapse.config import ConfigError from synapse.config.api import ApiConfig from synapse.types.state import StateFilter DEFAULT_PREJOIN_STATE_PAIRS = { ("m.room.join_rules", ""), ("m.room.canonical_alias", ""), ("m.room.avatar", ""), ("m.room.encryption", ""), ("m.room.name", ""), ("m.room.create", ""), ("m.room.topic", ""), } class TestRoomPrejoinState(StdlibTestCase): def read_config(self, source: str) -> ApiConfig: config = ApiConfig() config.read_config(yaml.safe_load(source)) return config def test_no_prejoin_state(self) -> None: config = self.read_config("foo: bar") self.assertFalse(config.room_prejoin_state.has_wildcards()) self.assertEqual( set(config.room_prejoin_state.concrete_types()), DEFAULT_PREJOIN_STATE_PAIRS ) def test_disable_default_event_types(self) -> None: config = self.read_config( """ room_prejoin_state: disable_default_event_types: true """ ) self.assertEqual(config.room_prejoin_state, StateFilter.none()) def test_event_without_state_key(self) -> None: config = self.read_config( """ room_prejoin_state: disable_default_event_types: true additional_event_types: - foo """ ) self.assertEqual(config.room_prejoin_state.wildcard_types(), ["foo"]) self.assertEqual(config.room_prejoin_state.concrete_types(), []) def test_event_with_specific_state_key(self) -> None: config = self.read_config( """ room_prejoin_state: disable_default_event_types: true additional_event_types: - [foo, bar] """ ) self.assertFalse(config.room_prejoin_state.has_wildcards()) self.assertEqual( set(config.room_prejoin_state.concrete_types()), {("foo", "bar")}, ) def test_repeated_event_with_specific_state_key(self) -> None: config = self.read_config( """ room_prejoin_state: disable_default_event_types: true additional_event_types: - [foo, bar] - [foo, baz] """ ) self.assertFalse(config.room_prejoin_state.has_wildcards()) self.assertEqual( set(config.room_prejoin_state.concrete_types()), {("foo", "bar"), ("foo", "baz")}, ) def test_no_specific_state_key_overrides_specific_state_key(self) -> None: config = self.read_config( """ room_prejoin_state: disable_default_event_types: true additional_event_types: - [foo, bar] - foo """ ) self.assertEqual(config.room_prejoin_state.wildcard_types(), ["foo"]) self.assertEqual(config.room_prejoin_state.concrete_types(), []) config = self.read_config( """ room_prejoin_state: disable_default_event_types: true additional_event_types: - foo - [foo, bar] """ ) self.assertEqual(config.room_prejoin_state.wildcard_types(), ["foo"]) self.assertEqual(config.room_prejoin_state.concrete_types(), []) def test_bad_event_type_entry_raises(self) -> None: with self.assertRaises(ConfigError): self.read_config( """ room_prejoin_state: additional_event_types: - [] """ ) with self.assertRaises(ConfigError): self.read_config( """ room_prejoin_state: additional_event_types: - [a] """ ) with self.assertRaises(ConfigError): self.read_config( """ room_prejoin_state: additional_event_types: - [a, b, c] """ ) with self.assertRaises(ConfigError): self.read_config( """ room_prejoin_state: additional_event_types: - [true, 1.23] """ )