add failing tests to verify behaviour

This commit is contained in:
Neil Johnson 2024-05-10 17:28:01 +01:00
parent 74d1334182
commit 60b999966a

View file

@ -26,10 +26,11 @@ from parameterized import parameterized
from twisted.test.proto_helpers import MemoryReactor from twisted.test.proto_helpers import MemoryReactor
import synapse.types import synapse.types
from synapse.api.constants import EventTypes
from synapse.api.errors import AuthError, SynapseError from synapse.api.errors import AuthError, SynapseError
from synapse.rest import admin from synapse.rest import admin, login, room
from synapse.server import HomeServer from synapse.server import HomeServer
from synapse.types import JsonDict, UserID from synapse.types import JsonDict, UserID, get_localpart_from_id
from synapse.util import Clock from synapse.util import Clock
from tests import unittest from tests import unittest
@ -38,7 +39,11 @@ from tests import unittest
class ProfileTestCase(unittest.HomeserverTestCase): class ProfileTestCase(unittest.HomeserverTestCase):
"""Tests profile management.""" """Tests profile management."""
servlets = [admin.register_servlets] servlets = [
admin.register_servlets,
login.register_servlets,
room.register_servlets,
]
def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer: def make_homeserver(self, reactor: MemoryReactor, clock: Clock) -> HomeServer:
self.mock_federation = AsyncMock() self.mock_federation = AsyncMock()
@ -67,10 +72,56 @@ class ProfileTestCase(unittest.HomeserverTestCase):
self.bob = UserID.from_string("@4567:test") self.bob = UserID.from_string("@4567:test")
self.alice = UserID.from_string("@alice:remote") self.alice = UserID.from_string("@alice:remote")
self.register_user(self.frank.localpart, "frankpassword") frank_password = "frankpassword"
self.frank_registered = self.register_user(self.frank.localpart, frank_password)
self.frank_token = self.login(self.frank_registered, frank_password)
self.handler = hs.get_profile_handler() self.handler = hs.get_profile_handler()
def test_set_displayname_scales_to_many_rooms(self) -> None:
room_count = 100
room_ids = []
for _ in range(room_count):
room_ids.append(
self.helper.create_room_as(
self.frank_registered, tok=self.frank_token, is_public=True
)
)
event_content = self.helper.get_state(
room_id=room_ids[0],
event_type=EventTypes.Member,
tok=self.frank_token,
state_key=self.frank,
)
self.assertEqual(
get_localpart_from_id(self.frank_registered), event_content["displayname"]
)
user1_displayname = "user1 displayname"
self.get_success(
self.handler.set_displayname(
self.frank,
synapse.types.create_requester(self.frank_registered),
user1_displayname,
)
)
event_content = self.helper.get_state(
room_id=room_ids[room_count - 1],
event_type=EventTypes.Member,
tok=self.frank_token,
state_key=self.frank,
)
# This check fails, it appears that the call in profile.py to off load
# the state updates to a queue runs synchronously and L105 does not
# does not return until all state has been updated. This can be worked
# around by scheduling the task for the future, which seems like the
# wrong approach.
self.assertNotEqual(user1_displayname, event_content["displayname"])
self.reactor.advance(1000)
self.assertEqual(user1_displayname, event_content["displayname"])
def test_get_my_name(self) -> None: def test_get_my_name(self) -> None:
self.get_success(self.store.set_profile_displayname(self.frank, "Frank")) self.get_success(self.store.set_profile_displayname(self.frank, "Frank"))
@ -79,28 +130,58 @@ class ProfileTestCase(unittest.HomeserverTestCase):
self.assertEqual("Frank", displayname) self.assertEqual("Frank", displayname)
def test_set_my_name(self) -> None: def test_set_my_name(self) -> None:
room_id = self.helper.create_room_as(
self.frank_registered, tok=self.frank_token, is_public=True
)
event_content = self.helper.get_state(
room_id=room_id,
event_type=EventTypes.Member,
tok=self.frank_token,
state_key=self.frank,
)
self.assertEqual(
get_localpart_from_id(self.frank_registered), event_content["displayname"]
)
displayname1 = "Frank Jr."
self.get_success( self.get_success(
self.handler.set_displayname( self.handler.set_displayname(
self.frank, synapse.types.create_requester(self.frank), "Frank Jr." self.frank, synapse.types.create_requester(self.frank), displayname1
) )
) )
self.assertEqual( self.assertEqual(
(self.get_success(self.store.get_profile_displayname(self.frank))), (self.get_success(self.store.get_profile_displayname(self.frank))),
"Frank Jr.", displayname1,
) )
event_content = self.helper.get_state(
room_id=room_id,
event_type=EventTypes.Member,
tok=self.frank_token,
state_key=self.frank,
)
self.assertEqual(displayname1, event_content["displayname"])
# Set displayname again # Set displayname again
displayname2 = "Frank"
self.get_success( self.get_success(
self.handler.set_displayname( self.handler.set_displayname(
self.frank, synapse.types.create_requester(self.frank), "Frank" self.frank, synapse.types.create_requester(self.frank), displayname2
) )
) )
self.assertEqual( self.assertEqual(
(self.get_success(self.store.get_profile_displayname(self.frank))), (self.get_success(self.store.get_profile_displayname(self.frank))),
"Frank", displayname2,
) )
event_content = self.helper.get_state(
room_id=room_id,
event_type=EventTypes.Member,
tok=self.frank_token,
state_key=self.frank,
)
self.assertEqual(displayname2, event_content["displayname"])
# Set displayname to an empty string # Set displayname to an empty string
self.get_success( self.get_success(
@ -112,6 +193,13 @@ class ProfileTestCase(unittest.HomeserverTestCase):
self.assertIsNone( self.assertIsNone(
self.get_success(self.store.get_profile_displayname(self.frank)) self.get_success(self.store.get_profile_displayname(self.frank))
) )
event_content = self.helper.get_state(
room_id=room_id,
event_type=EventTypes.Member,
tok=self.frank_token,
state_key=self.frank,
)
self.assertEqual(None, event_content.get("displayname"))
def test_set_my_name_if_disabled(self) -> None: def test_set_my_name_if_disabled(self) -> None:
self.hs.config.registration.enable_set_displayname = False self.hs.config.registration.enable_set_displayname = False