From 8690c86c15d8597f1a083f5d44c279e1b70c27ac Mon Sep 17 00:00:00 2001 From: Andrew Morgan Date: Fri, 11 Sep 2020 12:23:22 +0100 Subject: [PATCH] Add tests --- tests/rest/client/third_party_rules.py | 66 +++++++++++++++++++++----- 1 file changed, 54 insertions(+), 12 deletions(-) diff --git a/tests/rest/client/third_party_rules.py b/tests/rest/client/third_party_rules.py index 8c24add530..37bec38717 100644 --- a/tests/rest/client/third_party_rules.py +++ b/tests/rest/client/third_party_rules.py @@ -12,18 +12,24 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. - +from synapse.events.third_party_rules import PublicRoomsManager from synapse.rest import admin from synapse.rest.client.v1 import login, room +from synapse.types import Requester from tests import unittest class ThirdPartyRulesTestModule: - def __init__(self, config): + def __init__(self, config, *args, **kwargs): pass - def check_event_allowed(self, event, context): + async def on_create_room( + self, requester: Requester, config: dict, is_requester_admin: bool + ): + return True + + async def check_event_allowed(self, event, context): if event.type == "foo.bar.forbidden": return False else: @@ -51,29 +57,65 @@ class ThirdPartyRulesTestCase(unittest.HomeserverTestCase): self.hs = self.setup_test_homeserver(config=config) return self.hs + def prepare(self, reactor, clock, homeserver): + # Create a user and room to play with during the tests + self.user_id = self.register_user("kermit", "monkey") + self.tok = self.login("kermit", "monkey") + + self.room_id = self.helper.create_room_as(self.user_id, tok=self.tok) + def test_third_party_rules(self): """Tests that a forbidden event is forbidden from being sent, but an allowed one can be sent. """ - user_id = self.register_user("kermit", "monkey") - tok = self.login("kermit", "monkey") - - room_id = self.helper.create_room_as(user_id, tok=tok) - request, channel = self.make_request( "PUT", - "/_matrix/client/r0/rooms/%s/send/foo.bar.allowed/1" % room_id, + "/_matrix/client/r0/rooms/%s/send/foo.bar.allowed/1" % self.room_id, {}, - access_token=tok, + access_token=self.tok, ) self.render(request) self.assertEquals(channel.result["code"], b"200", channel.result) request, channel = self.make_request( "PUT", - "/_matrix/client/r0/rooms/%s/send/foo.bar.forbidden/1" % room_id, + "/_matrix/client/r0/rooms/%s/send/foo.bar.forbidden/1" % self.room_id, {}, - access_token=tok, + access_token=self.tok, ) self.render(request) self.assertEquals(channel.result["code"], b"403", channel.result) + + def test_public_rooms_manager(self): + """Tests that a room can be added and removed from the public rooms list, + as well as have its public rooms directory state queried. + """ + public_rooms_manager = PublicRoomsManager(self.hs) + + # The room should not currently be in the public rooms directory + is_in_public_rooms = self.get_success( + public_rooms_manager.room_is_in_public_directory(self.room_id) + ) + self.assertFalse(is_in_public_rooms) + + # Let's try adding it to the public rooms directory + self.get_success( + public_rooms_manager.add_room_to_public_directory(self.room_id) + ) + + # And checking whether it's in there... + is_in_public_rooms = self.get_success( + public_rooms_manager.room_is_in_public_directory(self.room_id) + ) + self.assertTrue(is_in_public_rooms) + + # Let's remove it again + self.get_success( + public_rooms_manager.remove_room_from_public_directory(self.room_id) + ) + + # Should be gone + is_in_public_rooms = self.get_success( + public_rooms_manager.room_is_in_public_directory(self.room_id) + ) + self.assertFalse(is_in_public_rooms)