mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-06-19 12:44:11 -04:00
Add missing type hints for tests.events. (#14904)
This commit is contained in:
parent
8bc5d1406c
commit
3c3ba31507
6 changed files with 91 additions and 64 deletions
|
@ -13,21 +13,24 @@
|
|||
# limitations under the License.
|
||||
|
||||
import unittest as stdlib_unittest
|
||||
from typing import Any, List, Mapping, Optional
|
||||
|
||||
from synapse.api.constants import EventContentFields
|
||||
from synapse.api.room_versions import RoomVersions
|
||||
from synapse.events import make_event_from_dict
|
||||
from synapse.events import EventBase, make_event_from_dict
|
||||
from synapse.events.utils import (
|
||||
PowerLevelsContent,
|
||||
SerializeEventConfig,
|
||||
copy_and_fixup_power_levels_contents,
|
||||
maybe_upsert_event_field,
|
||||
prune_event,
|
||||
serialize_event,
|
||||
)
|
||||
from synapse.types import JsonDict
|
||||
from synapse.util.frozenutils import freeze
|
||||
|
||||
|
||||
def MockEvent(**kwargs):
|
||||
def MockEvent(**kwargs: Any) -> EventBase:
|
||||
if "event_id" not in kwargs:
|
||||
kwargs["event_id"] = "fake_event_id"
|
||||
if "type" not in kwargs:
|
||||
|
@ -60,7 +63,7 @@ class TestMaybeUpsertEventField(stdlib_unittest.TestCase):
|
|||
|
||||
|
||||
class PruneEventTestCase(stdlib_unittest.TestCase):
|
||||
def run_test(self, evdict, matchdict, **kwargs):
|
||||
def run_test(self, evdict: JsonDict, matchdict: JsonDict, **kwargs: Any) -> None:
|
||||
"""
|
||||
Asserts that a new event constructed with `evdict` will look like
|
||||
`matchdict` when it is redacted.
|
||||
|
@ -74,7 +77,7 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
|
|||
prune_event(make_event_from_dict(evdict, **kwargs)).get_dict(), matchdict
|
||||
)
|
||||
|
||||
def test_minimal(self):
|
||||
def test_minimal(self) -> None:
|
||||
self.run_test(
|
||||
{"type": "A", "event_id": "$test:domain"},
|
||||
{
|
||||
|
@ -86,7 +89,7 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
|
|||
},
|
||||
)
|
||||
|
||||
def test_basic_keys(self):
|
||||
def test_basic_keys(self) -> None:
|
||||
"""Ensure that the keys that should be untouched are kept."""
|
||||
# Note that some of the values below don't really make sense, but the
|
||||
# pruning of events doesn't worry about the values of any fields (with
|
||||
|
@ -138,7 +141,7 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
|
|||
room_version=RoomVersions.MSC2176,
|
||||
)
|
||||
|
||||
def test_unsigned(self):
|
||||
def test_unsigned(self) -> None:
|
||||
"""Ensure that unsigned properties get stripped (except age_ts and replaces_state)."""
|
||||
self.run_test(
|
||||
{
|
||||
|
@ -159,7 +162,7 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
|
|||
},
|
||||
)
|
||||
|
||||
def test_content(self):
|
||||
def test_content(self) -> None:
|
||||
"""The content dictionary should be stripped in most cases."""
|
||||
self.run_test(
|
||||
{"type": "C", "event_id": "$test:domain", "content": {"things": "here"}},
|
||||
|
@ -194,7 +197,7 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
|
|||
},
|
||||
)
|
||||
|
||||
def test_create(self):
|
||||
def test_create(self) -> None:
|
||||
"""Create events are partially redacted until MSC2176."""
|
||||
self.run_test(
|
||||
{
|
||||
|
@ -223,7 +226,7 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
|
|||
room_version=RoomVersions.MSC2176,
|
||||
)
|
||||
|
||||
def test_power_levels(self):
|
||||
def test_power_levels(self) -> None:
|
||||
"""Power level events keep a variety of content keys."""
|
||||
self.run_test(
|
||||
{
|
||||
|
@ -273,7 +276,7 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
|
|||
room_version=RoomVersions.MSC2176,
|
||||
)
|
||||
|
||||
def test_alias_event(self):
|
||||
def test_alias_event(self) -> None:
|
||||
"""Alias events have special behavior up through room version 6."""
|
||||
self.run_test(
|
||||
{
|
||||
|
@ -302,7 +305,7 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
|
|||
room_version=RoomVersions.V6,
|
||||
)
|
||||
|
||||
def test_redacts(self):
|
||||
def test_redacts(self) -> None:
|
||||
"""Redaction events have no special behaviour until MSC2174/MSC2176."""
|
||||
|
||||
self.run_test(
|
||||
|
@ -328,7 +331,7 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
|
|||
room_version=RoomVersions.MSC2176,
|
||||
)
|
||||
|
||||
def test_join_rules(self):
|
||||
def test_join_rules(self) -> None:
|
||||
"""Join rules events have changed behavior starting with MSC3083."""
|
||||
self.run_test(
|
||||
{
|
||||
|
@ -371,7 +374,7 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
|
|||
room_version=RoomVersions.V8,
|
||||
)
|
||||
|
||||
def test_member(self):
|
||||
def test_member(self) -> None:
|
||||
"""Member events have changed behavior starting with MSC3375."""
|
||||
self.run_test(
|
||||
{
|
||||
|
@ -417,12 +420,12 @@ class PruneEventTestCase(stdlib_unittest.TestCase):
|
|||
|
||||
|
||||
class SerializeEventTestCase(stdlib_unittest.TestCase):
|
||||
def serialize(self, ev, fields):
|
||||
def serialize(self, ev: EventBase, fields: Optional[List[str]]) -> JsonDict:
|
||||
return serialize_event(
|
||||
ev, 1479807801915, config=SerializeEventConfig(only_event_fields=fields)
|
||||
)
|
||||
|
||||
def test_event_fields_works_with_keys(self):
|
||||
def test_event_fields_works_with_keys(self) -> None:
|
||||
self.assertEqual(
|
||||
self.serialize(
|
||||
MockEvent(sender="@alice:localhost", room_id="!foo:bar"), ["room_id"]
|
||||
|
@ -430,7 +433,7 @@ class SerializeEventTestCase(stdlib_unittest.TestCase):
|
|||
{"room_id": "!foo:bar"},
|
||||
)
|
||||
|
||||
def test_event_fields_works_with_nested_keys(self):
|
||||
def test_event_fields_works_with_nested_keys(self) -> None:
|
||||
self.assertEqual(
|
||||
self.serialize(
|
||||
MockEvent(
|
||||
|
@ -443,7 +446,7 @@ class SerializeEventTestCase(stdlib_unittest.TestCase):
|
|||
{"content": {"body": "A message"}},
|
||||
)
|
||||
|
||||
def test_event_fields_works_with_dot_keys(self):
|
||||
def test_event_fields_works_with_dot_keys(self) -> None:
|
||||
self.assertEqual(
|
||||
self.serialize(
|
||||
MockEvent(
|
||||
|
@ -456,7 +459,7 @@ class SerializeEventTestCase(stdlib_unittest.TestCase):
|
|||
{"content": {"key.with.dots": {}}},
|
||||
)
|
||||
|
||||
def test_event_fields_works_with_nested_dot_keys(self):
|
||||
def test_event_fields_works_with_nested_dot_keys(self) -> None:
|
||||
self.assertEqual(
|
||||
self.serialize(
|
||||
MockEvent(
|
||||
|
@ -472,7 +475,7 @@ class SerializeEventTestCase(stdlib_unittest.TestCase):
|
|||
{"content": {"nested.dot.key": {"leaf.key": 42}}},
|
||||
)
|
||||
|
||||
def test_event_fields_nops_with_unknown_keys(self):
|
||||
def test_event_fields_nops_with_unknown_keys(self) -> None:
|
||||
self.assertEqual(
|
||||
self.serialize(
|
||||
MockEvent(
|
||||
|
@ -485,7 +488,7 @@ class SerializeEventTestCase(stdlib_unittest.TestCase):
|
|||
{"content": {"foo": "bar"}},
|
||||
)
|
||||
|
||||
def test_event_fields_nops_with_non_dict_keys(self):
|
||||
def test_event_fields_nops_with_non_dict_keys(self) -> None:
|
||||
self.assertEqual(
|
||||
self.serialize(
|
||||
MockEvent(
|
||||
|
@ -498,7 +501,7 @@ class SerializeEventTestCase(stdlib_unittest.TestCase):
|
|||
{},
|
||||
)
|
||||
|
||||
def test_event_fields_nops_with_array_keys(self):
|
||||
def test_event_fields_nops_with_array_keys(self) -> None:
|
||||
self.assertEqual(
|
||||
self.serialize(
|
||||
MockEvent(
|
||||
|
@ -511,7 +514,7 @@ class SerializeEventTestCase(stdlib_unittest.TestCase):
|
|||
{},
|
||||
)
|
||||
|
||||
def test_event_fields_all_fields_if_empty(self):
|
||||
def test_event_fields_all_fields_if_empty(self) -> None:
|
||||
self.assertEqual(
|
||||
self.serialize(
|
||||
MockEvent(
|
||||
|
@ -531,16 +534,16 @@ class SerializeEventTestCase(stdlib_unittest.TestCase):
|
|||
},
|
||||
)
|
||||
|
||||
def test_event_fields_fail_if_fields_not_str(self):
|
||||
def test_event_fields_fail_if_fields_not_str(self) -> None:
|
||||
with self.assertRaises(TypeError):
|
||||
self.serialize(
|
||||
MockEvent(room_id="!foo:bar", content={"foo": "bar"}), ["room_id", 4]
|
||||
MockEvent(room_id="!foo:bar", content={"foo": "bar"}), ["room_id", 4] # type: ignore[list-item]
|
||||
)
|
||||
|
||||
|
||||
class CopyPowerLevelsContentTestCase(stdlib_unittest.TestCase):
|
||||
def setUp(self) -> None:
|
||||
self.test_content = {
|
||||
self.test_content: PowerLevelsContent = {
|
||||
"ban": 50,
|
||||
"events": {"m.room.name": 100, "m.room.power_levels": 100},
|
||||
"events_default": 0,
|
||||
|
@ -553,10 +556,11 @@ class CopyPowerLevelsContentTestCase(stdlib_unittest.TestCase):
|
|||
"users_default": 0,
|
||||
}
|
||||
|
||||
def _test(self, input):
|
||||
def _test(self, input: PowerLevelsContent) -> None:
|
||||
a = copy_and_fixup_power_levels_contents(input)
|
||||
|
||||
self.assertEqual(a["ban"], 50)
|
||||
assert isinstance(a["events"], Mapping)
|
||||
self.assertEqual(a["events"]["m.room.name"], 100)
|
||||
|
||||
# make sure that changing the copy changes the copy and not the orig
|
||||
|
@ -564,18 +568,19 @@ class CopyPowerLevelsContentTestCase(stdlib_unittest.TestCase):
|
|||
a["events"]["m.room.power_levels"] = 20
|
||||
|
||||
self.assertEqual(input["ban"], 50)
|
||||
assert isinstance(input["events"], Mapping)
|
||||
self.assertEqual(input["events"]["m.room.power_levels"], 100)
|
||||
|
||||
def test_unfrozen(self):
|
||||
def test_unfrozen(self) -> None:
|
||||
self._test(self.test_content)
|
||||
|
||||
def test_frozen(self):
|
||||
def test_frozen(self) -> None:
|
||||
input = freeze(self.test_content)
|
||||
self._test(input)
|
||||
|
||||
def test_stringy_integers(self):
|
||||
def test_stringy_integers(self) -> None:
|
||||
"""String representations of decimal integers are converted to integers."""
|
||||
input = {
|
||||
input: PowerLevelsContent = {
|
||||
"a": "100",
|
||||
"b": {
|
||||
"foo": 99,
|
||||
|
@ -603,9 +608,9 @@ class CopyPowerLevelsContentTestCase(stdlib_unittest.TestCase):
|
|||
|
||||
def test_invalid_types_raise_type_error(self) -> None:
|
||||
with self.assertRaises(TypeError):
|
||||
copy_and_fixup_power_levels_contents({"a": ["hello", "grandma"]}) # type: ignore[arg-type]
|
||||
copy_and_fixup_power_levels_contents({"a": None}) # type: ignore[arg-type]
|
||||
copy_and_fixup_power_levels_contents({"a": ["hello", "grandma"]}) # type: ignore[dict-item]
|
||||
copy_and_fixup_power_levels_contents({"a": None}) # type: ignore[dict-item]
|
||||
|
||||
def test_invalid_nesting_raises_type_error(self) -> None:
|
||||
with self.assertRaises(TypeError):
|
||||
copy_and_fixup_power_levels_contents({"a": {"b": {"c": 1}}})
|
||||
copy_and_fixup_power_levels_contents({"a": {"b": {"c": 1}}}) # type: ignore[dict-item]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue