146 lines
4.0 KiB
Python
146 lines
4.0 KiB
Python
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]
|
|
"""
|
|
)
|