@@ -0,0 +1 @@ | |||||
Improve type hints. |
@@ -69,27 +69,9 @@ disallow_untyped_defs = False | |||||
[mypy-tests.server_notices.test_resource_limits_server_notices] | [mypy-tests.server_notices.test_resource_limits_server_notices] | ||||
disallow_untyped_defs = False | disallow_untyped_defs = False | ||||
[mypy-tests.test_distributor] | |||||
disallow_untyped_defs = False | |||||
[mypy-tests.test_event_auth] | |||||
disallow_untyped_defs = False | |||||
[mypy-tests.test_federation] | [mypy-tests.test_federation] | ||||
disallow_untyped_defs = False | disallow_untyped_defs = False | ||||
[mypy-tests.test_mau] | |||||
disallow_untyped_defs = False | |||||
[mypy-tests.test_rust] | |||||
disallow_untyped_defs = False | |||||
[mypy-tests.test_test_utils] | |||||
disallow_untyped_defs = False | |||||
[mypy-tests.test_types] | |||||
disallow_untyped_defs = False | |||||
[mypy-tests.test_utils.*] | [mypy-tests.test_utils.*] | ||||
disallow_untyped_defs = False | disallow_untyped_defs = False | ||||
@@ -21,10 +21,10 @@ from . import unittest | |||||
class DistributorTestCase(unittest.TestCase): | class DistributorTestCase(unittest.TestCase): | ||||
def setUp(self): | |||||
def setUp(self) -> None: | |||||
self.dist = Distributor() | self.dist = Distributor() | ||||
def test_signal_dispatch(self): | |||||
def test_signal_dispatch(self) -> None: | |||||
self.dist.declare("alert") | self.dist.declare("alert") | ||||
observer = Mock() | observer = Mock() | ||||
@@ -33,7 +33,7 @@ class DistributorTestCase(unittest.TestCase): | |||||
self.dist.fire("alert", 1, 2, 3) | self.dist.fire("alert", 1, 2, 3) | ||||
observer.assert_called_with(1, 2, 3) | observer.assert_called_with(1, 2, 3) | ||||
def test_signal_catch(self): | |||||
def test_signal_catch(self) -> None: | |||||
self.dist.declare("alarm") | self.dist.declare("alarm") | ||||
observers = [Mock() for i in (1, 2)] | observers = [Mock() for i in (1, 2)] | ||||
@@ -51,7 +51,7 @@ class DistributorTestCase(unittest.TestCase): | |||||
self.assertEqual(mock_logger.warning.call_count, 1) | self.assertEqual(mock_logger.warning.call_count, 1) | ||||
self.assertIsInstance(mock_logger.warning.call_args[0][0], str) | self.assertIsInstance(mock_logger.warning.call_args[0][0], str) | ||||
def test_signal_prereg(self): | |||||
def test_signal_prereg(self) -> None: | |||||
observer = Mock() | observer = Mock() | ||||
self.dist.observe("flare", observer) | self.dist.observe("flare", observer) | ||||
@@ -60,8 +60,8 @@ class DistributorTestCase(unittest.TestCase): | |||||
observer.assert_called_with(4, 5) | observer.assert_called_with(4, 5) | ||||
def test_signal_undeclared(self): | |||||
def code(): | |||||
def test_signal_undeclared(self) -> None: | |||||
def code() -> None: | |||||
self.dist.fire("notification") | self.dist.fire("notification") | ||||
self.assertRaises(KeyError, code) | self.assertRaises(KeyError, code) |
@@ -31,13 +31,13 @@ from tests.test_utils import get_awaitable_result | |||||
class _StubEventSourceStore: | class _StubEventSourceStore: | ||||
"""A stub implementation of the EventSourceStore""" | """A stub implementation of the EventSourceStore""" | ||||
def __init__(self): | |||||
def __init__(self) -> None: | |||||
self._store: Dict[str, EventBase] = {} | self._store: Dict[str, EventBase] = {} | ||||
def add_event(self, event: EventBase): | |||||
def add_event(self, event: EventBase) -> None: | |||||
self._store[event.event_id] = event | self._store[event.event_id] = event | ||||
def add_events(self, events: Iterable[EventBase]): | |||||
def add_events(self, events: Iterable[EventBase]) -> None: | |||||
for event in events: | for event in events: | ||||
self._store[event.event_id] = event | self._store[event.event_id] = event | ||||
@@ -59,7 +59,7 @@ class _StubEventSourceStore: | |||||
class EventAuthTestCase(unittest.TestCase): | class EventAuthTestCase(unittest.TestCase): | ||||
def test_rejected_auth_events(self): | |||||
def test_rejected_auth_events(self) -> None: | |||||
""" | """ | ||||
Events that refer to rejected events in their auth events are rejected | Events that refer to rejected events in their auth events are rejected | ||||
""" | """ | ||||
@@ -109,7 +109,7 @@ class EventAuthTestCase(unittest.TestCase): | |||||
) | ) | ||||
) | ) | ||||
def test_create_event_with_prev_events(self): | |||||
def test_create_event_with_prev_events(self) -> None: | |||||
"""A create event with prev_events should be rejected | """A create event with prev_events should be rejected | ||||
https://spec.matrix.org/v1.3/rooms/v9/#authorization-rules | https://spec.matrix.org/v1.3/rooms/v9/#authorization-rules | ||||
@@ -150,7 +150,7 @@ class EventAuthTestCase(unittest.TestCase): | |||||
event_auth.check_state_independent_auth_rules(event_store, bad_event) | event_auth.check_state_independent_auth_rules(event_store, bad_event) | ||||
) | ) | ||||
def test_duplicate_auth_events(self): | |||||
def test_duplicate_auth_events(self) -> None: | |||||
"""Events with duplicate auth_events should be rejected | """Events with duplicate auth_events should be rejected | ||||
https://spec.matrix.org/v1.3/rooms/v9/#authorization-rules | https://spec.matrix.org/v1.3/rooms/v9/#authorization-rules | ||||
@@ -196,7 +196,7 @@ class EventAuthTestCase(unittest.TestCase): | |||||
event_auth.check_state_independent_auth_rules(event_store, bad_event2) | event_auth.check_state_independent_auth_rules(event_store, bad_event2) | ||||
) | ) | ||||
def test_unexpected_auth_events(self): | |||||
def test_unexpected_auth_events(self) -> None: | |||||
"""Events with excess auth_events should be rejected | """Events with excess auth_events should be rejected | ||||
https://spec.matrix.org/v1.3/rooms/v9/#authorization-rules | https://spec.matrix.org/v1.3/rooms/v9/#authorization-rules | ||||
@@ -236,7 +236,7 @@ class EventAuthTestCase(unittest.TestCase): | |||||
event_auth.check_state_independent_auth_rules(event_store, bad_event) | event_auth.check_state_independent_auth_rules(event_store, bad_event) | ||||
) | ) | ||||
def test_random_users_cannot_send_state_before_first_pl(self): | |||||
def test_random_users_cannot_send_state_before_first_pl(self) -> None: | |||||
""" | """ | ||||
Check that, before the first PL lands, the creator is the only user | Check that, before the first PL lands, the creator is the only user | ||||
that can send a state event. | that can send a state event. | ||||
@@ -263,7 +263,7 @@ class EventAuthTestCase(unittest.TestCase): | |||||
auth_events, | auth_events, | ||||
) | ) | ||||
def test_state_default_level(self): | |||||
def test_state_default_level(self) -> None: | |||||
""" | """ | ||||
Check that users above the state_default level can send state and | Check that users above the state_default level can send state and | ||||
those below cannot | those below cannot | ||||
@@ -298,7 +298,7 @@ class EventAuthTestCase(unittest.TestCase): | |||||
auth_events, | auth_events, | ||||
) | ) | ||||
def test_alias_event(self): | |||||
def test_alias_event(self) -> None: | |||||
"""Alias events have special behavior up through room version 6.""" | """Alias events have special behavior up through room version 6.""" | ||||
creator = "@creator:example.com" | creator = "@creator:example.com" | ||||
other = "@other:example.com" | other = "@other:example.com" | ||||
@@ -333,7 +333,7 @@ class EventAuthTestCase(unittest.TestCase): | |||||
auth_events, | auth_events, | ||||
) | ) | ||||
def test_msc2432_alias_event(self): | |||||
def test_msc2432_alias_event(self) -> None: | |||||
"""After MSC2432, alias events have no special behavior.""" | """After MSC2432, alias events have no special behavior.""" | ||||
creator = "@creator:example.com" | creator = "@creator:example.com" | ||||
other = "@other:example.com" | other = "@other:example.com" | ||||
@@ -366,7 +366,9 @@ class EventAuthTestCase(unittest.TestCase): | |||||
) | ) | ||||
@parameterized.expand([(RoomVersions.V1, True), (RoomVersions.V6, False)]) | @parameterized.expand([(RoomVersions.V1, True), (RoomVersions.V6, False)]) | ||||
def test_notifications(self, room_version: RoomVersion, allow_modification: bool): | |||||
def test_notifications( | |||||
self, room_version: RoomVersion, allow_modification: bool | |||||
) -> None: | |||||
""" | """ | ||||
Notifications power levels get checked due to MSC2209. | Notifications power levels get checked due to MSC2209. | ||||
""" | """ | ||||
@@ -395,7 +397,7 @@ class EventAuthTestCase(unittest.TestCase): | |||||
with self.assertRaises(AuthError): | with self.assertRaises(AuthError): | ||||
event_auth.check_state_dependent_auth_rules(pl_event, auth_events) | event_auth.check_state_dependent_auth_rules(pl_event, auth_events) | ||||
def test_join_rules_public(self): | |||||
def test_join_rules_public(self) -> None: | |||||
""" | """ | ||||
Test joining a public room. | Test joining a public room. | ||||
""" | """ | ||||
@@ -460,7 +462,7 @@ class EventAuthTestCase(unittest.TestCase): | |||||
auth_events.values(), | auth_events.values(), | ||||
) | ) | ||||
def test_join_rules_invite(self): | |||||
def test_join_rules_invite(self) -> None: | |||||
""" | """ | ||||
Test joining an invite only room. | Test joining an invite only room. | ||||
""" | """ | ||||
@@ -835,7 +837,7 @@ def _power_levels_event( | |||||
) | ) | ||||
def _alias_event(room_version: RoomVersion, sender: str, **kwargs) -> EventBase: | |||||
def _alias_event(room_version: RoomVersion, sender: str, **kwargs: Any) -> EventBase: | |||||
data = { | data = { | ||||
"room_id": TEST_ROOM_ID, | "room_id": TEST_ROOM_ID, | ||||
**_maybe_get_event_id_dict_for_room_version(room_version), | **_maybe_get_event_id_dict_for_room_version(room_version), | ||||
@@ -14,12 +14,17 @@ | |||||
"""Tests REST events for /rooms paths.""" | """Tests REST events for /rooms paths.""" | ||||
from typing import List | |||||
from typing import List, Optional | |||||
from twisted.test.proto_helpers import MemoryReactor | |||||
from synapse.api.constants import APP_SERVICE_REGISTRATION_TYPE, LoginType | from synapse.api.constants import APP_SERVICE_REGISTRATION_TYPE, LoginType | ||||
from synapse.api.errors import Codes, HttpResponseException, SynapseError | from synapse.api.errors import Codes, HttpResponseException, SynapseError | ||||
from synapse.appservice import ApplicationService | from synapse.appservice import ApplicationService | ||||
from synapse.rest.client import register, sync | from synapse.rest.client import register, sync | ||||
from synapse.server import HomeServer | |||||
from synapse.types import JsonDict | |||||
from synapse.util import Clock | |||||
from tests import unittest | from tests import unittest | ||||
from tests.unittest import override_config | from tests.unittest import override_config | ||||
@@ -30,7 +35,7 @@ class TestMauLimit(unittest.HomeserverTestCase): | |||||
servlets = [register.register_servlets, sync.register_servlets] | servlets = [register.register_servlets, sync.register_servlets] | ||||
def default_config(self): | |||||
def default_config(self) -> JsonDict: | |||||
config = default_config("test") | config = default_config("test") | ||||
config.update( | config.update( | ||||
@@ -53,10 +58,12 @@ class TestMauLimit(unittest.HomeserverTestCase): | |||||
return config | return config | ||||
def prepare(self, reactor, clock, homeserver): | |||||
def prepare( | |||||
self, reactor: MemoryReactor, clock: Clock, homeserver: HomeServer | |||||
) -> None: | |||||
self.store = homeserver.get_datastores().main | self.store = homeserver.get_datastores().main | ||||
def test_simple_deny_mau(self): | |||||
def test_simple_deny_mau(self) -> None: | |||||
# Create and sync so that the MAU counts get updated | # Create and sync so that the MAU counts get updated | ||||
token1 = self.create_user("kermit1") | token1 = self.create_user("kermit1") | ||||
self.do_sync_for_user(token1) | self.do_sync_for_user(token1) | ||||
@@ -75,7 +82,7 @@ class TestMauLimit(unittest.HomeserverTestCase): | |||||
self.assertEqual(e.code, 403) | self.assertEqual(e.code, 403) | ||||
self.assertEqual(e.errcode, Codes.RESOURCE_LIMIT_EXCEEDED) | self.assertEqual(e.errcode, Codes.RESOURCE_LIMIT_EXCEEDED) | ||||
def test_as_ignores_mau(self): | |||||
def test_as_ignores_mau(self) -> None: | |||||
"""Test that application services can still create users when the MAU | """Test that application services can still create users when the MAU | ||||
limit has been reached. This only works when application service | limit has been reached. This only works when application service | ||||
user ip tracking is disabled. | user ip tracking is disabled. | ||||
@@ -113,7 +120,7 @@ class TestMauLimit(unittest.HomeserverTestCase): | |||||
self.create_user("as_kermit4", token=as_token, appservice=True) | self.create_user("as_kermit4", token=as_token, appservice=True) | ||||
def test_allowed_after_a_month_mau(self): | |||||
def test_allowed_after_a_month_mau(self) -> None: | |||||
# Create and sync so that the MAU counts get updated | # Create and sync so that the MAU counts get updated | ||||
token1 = self.create_user("kermit1") | token1 = self.create_user("kermit1") | ||||
self.do_sync_for_user(token1) | self.do_sync_for_user(token1) | ||||
@@ -132,7 +139,7 @@ class TestMauLimit(unittest.HomeserverTestCase): | |||||
self.do_sync_for_user(token3) | self.do_sync_for_user(token3) | ||||
@override_config({"mau_trial_days": 1}) | @override_config({"mau_trial_days": 1}) | ||||
def test_trial_delay(self): | |||||
def test_trial_delay(self) -> None: | |||||
# We should be able to register more than the limit initially | # We should be able to register more than the limit initially | ||||
token1 = self.create_user("kermit1") | token1 = self.create_user("kermit1") | ||||
self.do_sync_for_user(token1) | self.do_sync_for_user(token1) | ||||
@@ -165,7 +172,7 @@ class TestMauLimit(unittest.HomeserverTestCase): | |||||
self.assertEqual(e.errcode, Codes.RESOURCE_LIMIT_EXCEEDED) | self.assertEqual(e.errcode, Codes.RESOURCE_LIMIT_EXCEEDED) | ||||
@override_config({"mau_trial_days": 1}) | @override_config({"mau_trial_days": 1}) | ||||
def test_trial_users_cant_come_back(self): | |||||
def test_trial_users_cant_come_back(self) -> None: | |||||
self.hs.config.server.mau_trial_days = 1 | self.hs.config.server.mau_trial_days = 1 | ||||
# We should be able to register more than the limit initially | # We should be able to register more than the limit initially | ||||
@@ -216,7 +223,7 @@ class TestMauLimit(unittest.HomeserverTestCase): | |||||
# max_mau_value should not matter | # max_mau_value should not matter | ||||
{"max_mau_value": 1, "limit_usage_by_mau": False, "mau_stats_only": True} | {"max_mau_value": 1, "limit_usage_by_mau": False, "mau_stats_only": True} | ||||
) | ) | ||||
def test_tracked_but_not_limited(self): | |||||
def test_tracked_but_not_limited(self) -> None: | |||||
# Simply being able to create 2 users indicates that the | # Simply being able to create 2 users indicates that the | ||||
# limit was not reached. | # limit was not reached. | ||||
token1 = self.create_user("kermit1") | token1 = self.create_user("kermit1") | ||||
@@ -236,10 +243,10 @@ class TestMauLimit(unittest.HomeserverTestCase): | |||||
"mau_appservice_trial_days": {"SomeASID": 1, "AnotherASID": 2}, | "mau_appservice_trial_days": {"SomeASID": 1, "AnotherASID": 2}, | ||||
} | } | ||||
) | ) | ||||
def test_as_trial_days(self): | |||||
def test_as_trial_days(self) -> None: | |||||
user_tokens: List[str] = [] | user_tokens: List[str] = [] | ||||
def advance_time_and_sync(): | |||||
def advance_time_and_sync() -> None: | |||||
self.reactor.advance(24 * 60 * 61) | self.reactor.advance(24 * 60 * 61) | ||||
for token in user_tokens: | for token in user_tokens: | ||||
self.do_sync_for_user(token) | self.do_sync_for_user(token) | ||||
@@ -300,7 +307,9 @@ class TestMauLimit(unittest.HomeserverTestCase): | |||||
}, | }, | ||||
) | ) | ||||
def create_user(self, localpart, token=None, appservice=False): | |||||
def create_user( | |||||
self, localpart: str, token: Optional[str] = None, appservice: bool = False | |||||
) -> str: | |||||
request_data = { | request_data = { | ||||
"username": localpart, | "username": localpart, | ||||
"password": "monkey", | "password": "monkey", | ||||
@@ -326,7 +335,7 @@ class TestMauLimit(unittest.HomeserverTestCase): | |||||
return access_token | return access_token | ||||
def do_sync_for_user(self, token): | |||||
def do_sync_for_user(self, token: str) -> None: | |||||
channel = self.make_request("GET", "/sync", access_token=token) | channel = self.make_request("GET", "/sync", access_token=token) | ||||
if channel.code != 200: | if channel.code != 200: | ||||
@@ -6,6 +6,6 @@ from tests import unittest | |||||
class RustTestCase(unittest.TestCase): | class RustTestCase(unittest.TestCase): | ||||
"""Basic tests to ensure that we can call into Rust code.""" | """Basic tests to ensure that we can call into Rust code.""" | ||||
def test_basic(self): | |||||
def test_basic(self) -> None: | |||||
result = sum_as_string(1, 2) | result = sum_as_string(1, 2) | ||||
self.assertEqual("3", result) | self.assertEqual("3", result) |
@@ -17,25 +17,25 @@ from tests.utils import MockClock | |||||
class MockClockTestCase(unittest.TestCase): | class MockClockTestCase(unittest.TestCase): | ||||
def setUp(self): | |||||
def setUp(self) -> None: | |||||
self.clock = MockClock() | self.clock = MockClock() | ||||
def test_advance_time(self): | |||||
def test_advance_time(self) -> None: | |||||
start_time = self.clock.time() | start_time = self.clock.time() | ||||
self.clock.advance_time(20) | self.clock.advance_time(20) | ||||
self.assertEqual(20, self.clock.time() - start_time) | self.assertEqual(20, self.clock.time() - start_time) | ||||
def test_later(self): | |||||
def test_later(self) -> None: | |||||
invoked = [0, 0] | invoked = [0, 0] | ||||
def _cb0(): | |||||
def _cb0() -> None: | |||||
invoked[0] = 1 | invoked[0] = 1 | ||||
self.clock.call_later(10, _cb0) | self.clock.call_later(10, _cb0) | ||||
def _cb1(): | |||||
def _cb1() -> None: | |||||
invoked[1] = 1 | invoked[1] = 1 | ||||
self.clock.call_later(20, _cb1) | self.clock.call_later(20, _cb1) | ||||
@@ -51,15 +51,15 @@ class MockClockTestCase(unittest.TestCase): | |||||
self.assertTrue(invoked[1]) | self.assertTrue(invoked[1]) | ||||
def test_cancel_later(self): | |||||
def test_cancel_later(self) -> None: | |||||
invoked = [0, 0] | invoked = [0, 0] | ||||
def _cb0(): | |||||
def _cb0() -> None: | |||||
invoked[0] = 1 | invoked[0] = 1 | ||||
t0 = self.clock.call_later(10, _cb0) | t0 = self.clock.call_later(10, _cb0) | ||||
def _cb1(): | |||||
def _cb1() -> None: | |||||
invoked[1] = 1 | invoked[1] = 1 | ||||
self.clock.call_later(20, _cb1) | self.clock.call_later(20, _cb1) | ||||
@@ -43,34 +43,34 @@ class IsMineIDTests(unittest.HomeserverTestCase): | |||||
class UserIDTestCase(unittest.HomeserverTestCase): | class UserIDTestCase(unittest.HomeserverTestCase): | ||||
def test_parse(self): | |||||
def test_parse(self) -> None: | |||||
user = UserID.from_string("@1234abcd:test") | user = UserID.from_string("@1234abcd:test") | ||||
self.assertEqual("1234abcd", user.localpart) | self.assertEqual("1234abcd", user.localpart) | ||||
self.assertEqual("test", user.domain) | self.assertEqual("test", user.domain) | ||||
self.assertEqual(True, self.hs.is_mine(user)) | self.assertEqual(True, self.hs.is_mine(user)) | ||||
def test_parse_rejects_empty_id(self): | |||||
def test_parse_rejects_empty_id(self) -> None: | |||||
with self.assertRaises(SynapseError): | with self.assertRaises(SynapseError): | ||||
UserID.from_string("") | UserID.from_string("") | ||||
def test_parse_rejects_missing_sigil(self): | |||||
def test_parse_rejects_missing_sigil(self) -> None: | |||||
with self.assertRaises(SynapseError): | with self.assertRaises(SynapseError): | ||||
UserID.from_string("alice:example.com") | UserID.from_string("alice:example.com") | ||||
def test_parse_rejects_missing_separator(self): | |||||
def test_parse_rejects_missing_separator(self) -> None: | |||||
with self.assertRaises(SynapseError): | with self.assertRaises(SynapseError): | ||||
UserID.from_string("@alice.example.com") | UserID.from_string("@alice.example.com") | ||||
def test_validation_rejects_missing_domain(self): | |||||
def test_validation_rejects_missing_domain(self) -> None: | |||||
self.assertFalse(UserID.is_valid("@alice:")) | self.assertFalse(UserID.is_valid("@alice:")) | ||||
def test_build(self): | |||||
def test_build(self) -> None: | |||||
user = UserID("5678efgh", "my.domain") | user = UserID("5678efgh", "my.domain") | ||||
self.assertEqual(user.to_string(), "@5678efgh:my.domain") | self.assertEqual(user.to_string(), "@5678efgh:my.domain") | ||||
def test_compare(self): | |||||
def test_compare(self) -> None: | |||||
userA = UserID.from_string("@userA:my.domain") | userA = UserID.from_string("@userA:my.domain") | ||||
userAagain = UserID.from_string("@userA:my.domain") | userAagain = UserID.from_string("@userA:my.domain") | ||||
userB = UserID.from_string("@userB:my.domain") | userB = UserID.from_string("@userB:my.domain") | ||||
@@ -80,43 +80,43 @@ class UserIDTestCase(unittest.HomeserverTestCase): | |||||
class RoomAliasTestCase(unittest.HomeserverTestCase): | class RoomAliasTestCase(unittest.HomeserverTestCase): | ||||
def test_parse(self): | |||||
def test_parse(self) -> None: | |||||
room = RoomAlias.from_string("#channel:test") | room = RoomAlias.from_string("#channel:test") | ||||
self.assertEqual("channel", room.localpart) | self.assertEqual("channel", room.localpart) | ||||
self.assertEqual("test", room.domain) | self.assertEqual("test", room.domain) | ||||
self.assertEqual(True, self.hs.is_mine(room)) | self.assertEqual(True, self.hs.is_mine(room)) | ||||
def test_build(self): | |||||
def test_build(self) -> None: | |||||
room = RoomAlias("channel", "my.domain") | room = RoomAlias("channel", "my.domain") | ||||
self.assertEqual(room.to_string(), "#channel:my.domain") | self.assertEqual(room.to_string(), "#channel:my.domain") | ||||
def test_validate(self): | |||||
def test_validate(self) -> None: | |||||
id_string = "#test:domain,test" | id_string = "#test:domain,test" | ||||
self.assertFalse(RoomAlias.is_valid(id_string)) | self.assertFalse(RoomAlias.is_valid(id_string)) | ||||
class MapUsernameTestCase(unittest.TestCase): | class MapUsernameTestCase(unittest.TestCase): | ||||
def testPassThrough(self): | |||||
def test_pass_througuh(self) -> None: | |||||
self.assertEqual(map_username_to_mxid_localpart("test1234"), "test1234") | self.assertEqual(map_username_to_mxid_localpart("test1234"), "test1234") | ||||
def testUpperCase(self): | |||||
def test_upper_case(self) -> None: | |||||
self.assertEqual(map_username_to_mxid_localpart("tEST_1234"), "test_1234") | self.assertEqual(map_username_to_mxid_localpart("tEST_1234"), "test_1234") | ||||
self.assertEqual( | self.assertEqual( | ||||
map_username_to_mxid_localpart("tEST_1234", case_sensitive=True), | map_username_to_mxid_localpart("tEST_1234", case_sensitive=True), | ||||
"t_e_s_t__1234", | "t_e_s_t__1234", | ||||
) | ) | ||||
def testSymbols(self): | |||||
def test_symbols(self) -> None: | |||||
self.assertEqual( | self.assertEqual( | ||||
map_username_to_mxid_localpart("test=$?_1234"), "test=3d=24=3f_1234" | map_username_to_mxid_localpart("test=$?_1234"), "test=3d=24=3f_1234" | ||||
) | ) | ||||
def testLeadingUnderscore(self): | |||||
def test_leading_underscore(self) -> None: | |||||
self.assertEqual(map_username_to_mxid_localpart("_test_1234"), "=5ftest_1234") | self.assertEqual(map_username_to_mxid_localpart("_test_1234"), "=5ftest_1234") | ||||
def testNonAscii(self): | |||||
def test_non_ascii(self) -> None: | |||||
# this should work with either a unicode or a bytes | # this should work with either a unicode or a bytes | ||||
self.assertEqual(map_username_to_mxid_localpart("têst"), "t=c3=aast") | self.assertEqual(map_username_to_mxid_localpart("têst"), "t=c3=aast") | ||||
self.assertEqual(map_username_to_mxid_localpart("têst".encode()), "t=c3=aast") | self.assertEqual(map_username_to_mxid_localpart("têst".encode()), "t=c3=aast") |