123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- # -*- coding: utf-8 -*-
- # Copyright 2018 New Vector Ltd
- #
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- #
- # http://www.apache.org/licenses/LICENSE-2.0
- #
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # 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.rest.client.v1 import admin, login, room
- from synapse.rest.client.v2_alpha import sync
- from tests import unittest
- class ConsentNoticesTests(unittest.HomeserverTestCase):
- servlets = [
- sync.register_servlets,
- admin.register_servlets,
- login.register_servlets,
- room.register_servlets,
- ]
- def make_homeserver(self, reactor, clock):
- self.consent_notice_message = "consent %(consent_uri)s"
- config = self.default_config()
- config.user_consent_version = "1"
- config.user_consent_server_notice_content = {
- "msgtype": "m.text",
- "body": self.consent_notice_message,
- }
- config.public_baseurl = "https://example.com/"
- config.form_secret = "123abc"
- config.server_notices_mxid = "@notices:test"
- config.server_notices_mxid_display_name = "test display name"
- config.server_notices_mxid_avatar_url = None
- config.server_notices_room_name = "Server Notices"
- hs = self.setup_test_homeserver(config=config)
- return hs
- def prepare(self, reactor, clock, hs):
- self.user_id = self.register_user("bob", "abc123")
- self.access_token = self.login("bob", "abc123")
- def test_get_sync_message(self):
- """
- When user consent server notices are enabled, a sync will cause a notice
- to fire (in a room which the user is invited to). The notice contains
- the notice URL + an authentication code.
- """
- # Initial sync, to get the user consent room invite
- request, channel = self.make_request(
- "GET", "/_matrix/client/r0/sync", access_token=self.access_token
- )
- self.render(request)
- self.assertEqual(channel.code, 200)
- # Get the Room ID to join
- room_id = list(channel.json_body["rooms"]["invite"].keys())[0]
- # Join the room
- request, channel = self.make_request(
- "POST",
- "/_matrix/client/r0/rooms/" + room_id + "/join",
- access_token=self.access_token,
- )
- self.render(request)
- self.assertEqual(channel.code, 200)
- # Sync again, to get the message in the room
- request, channel = self.make_request(
- "GET", "/_matrix/client/r0/sync", access_token=self.access_token
- )
- self.render(request)
- self.assertEqual(channel.code, 200)
- # Get the message
- room = channel.json_body["rooms"]["join"][room_id]
- messages = [
- x for x in room["timeline"]["events"] if x["type"] == "m.room.message"
- ]
- # One message, with the consent URL
- self.assertEqual(len(messages), 1)
- self.assertTrue(
- messages[0]["content"]["body"].startswith(
- "consent https://example.com/_matrix/consent"
- )
- )
|