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]
 | |
|             """
 | |
|             )
 |