mirror of
https://github.com/element-hq/synapse.git
synced 2026-05-07 15:37:32 +00:00
449b1a4234
Part of MSC4311: invites and knocks should contain the create event (stripped state for the client API) Part of https://github.com/element-hq/synapse/issues/19414
164 lines
4.6 KiB
Python
164 lines
4.6 KiB
Python
from unittest import TestCase as StdlibTestCase
|
|
|
|
import yaml
|
|
|
|
from synapse.config import ConfigError
|
|
from synapse.config._base import RootConfig
|
|
from synapse.config.api import ApiConfig
|
|
|
|
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(RootConfig())
|
|
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
|
|
"""
|
|
)
|
|
# MSC4311: m.room.create is always included even when defaults are disabled
|
|
self.assertEqual(
|
|
set(config.room_prejoin_state.concrete_types()),
|
|
{("m.room.create", "")},
|
|
)
|
|
|
|
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"])
|
|
# MSC4311: m.room.create is always included
|
|
self.assertEqual(
|
|
set(config.room_prejoin_state.concrete_types()),
|
|
{("m.room.create", "")},
|
|
)
|
|
|
|
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())
|
|
# MSC4311: m.room.create is always included
|
|
self.assertEqual(
|
|
set(config.room_prejoin_state.concrete_types()),
|
|
{("foo", "bar"), ("m.room.create", "")},
|
|
)
|
|
|
|
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())
|
|
# MSC4311: m.room.create is always included
|
|
self.assertEqual(
|
|
set(config.room_prejoin_state.concrete_types()),
|
|
{("foo", "bar"), ("foo", "baz"), ("m.room.create", "")},
|
|
)
|
|
|
|
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"])
|
|
# MSC4311: m.room.create is always included
|
|
self.assertEqual(
|
|
set(config.room_prejoin_state.concrete_types()),
|
|
{("m.room.create", "")},
|
|
)
|
|
|
|
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"])
|
|
# MSC4311: m.room.create is always included
|
|
self.assertEqual(
|
|
set(config.room_prejoin_state.concrete_types()),
|
|
{("m.room.create", "")},
|
|
)
|
|
|
|
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]
|
|
"""
|
|
)
|