mirror of
https://github.com/element-hq/synapse
synced 2024-08-18 23:50:52 +00:00
* Declare new config * Parse new config * Read new config * Don't use trial/our TestCase where it's not needed Before: ``` $ time trial tests/events/test_utils.py > /dev/null real 0m2.277s user 0m2.186s sys 0m0.083s ``` After: ``` $ time trial tests/events/test_utils.py > /dev/null real 0m0.566s user 0m0.508s sys 0m0.056s ``` * Helper to upsert to event fields without exceeding size limits. * Use helper when adding invite/knock state Now that we allow admins to include events in prejoin room state with arbitrary state keys, be a good Matrix citizen and ensure they don't accidentally create an oversized event. * Changelog * Move StateFilter tests should have done this in #14668 * Add extra methods to StateFilter * Use StateFilter * Ensure test file enforces typed defs; alphabetise * Workaround surprising get_current_state_ids * Whoops, fix mypy
145 lines
4 KiB
Python
145 lines
4 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]
|
|
"""
|
|
)
|