Files
ThreadNet-Web/modules/restricted-guests/synapse/tests/test_guest_user_reaper.py
T
Andrew Ferrazzutti 523758cbea synapse guest module: move license files
Move them into the module folder so that they'll be properly included
in distribution builds, such as when installing this module via pip.

Also reword copyright headers to refer to the project root instead of
the repository root, which isn't included in distribution builds.
2025-02-12 15:42:18 -05:00

124 lines
4.5 KiB
Python

# Copyright 2023 Nordeck IT + Consulting GmbH
# Copyright 2025 New Vector Ltd.
#
# SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
# Please see LICENSE files in the project root for full details.
#
# Originally licensed under the Apache License, Version 2.0:
# <http://www.apache.org/licenses/LICENSE-2.0>.
import time
from unittest.mock import call
import aiounittest
from tests import create_module, make_awaitable
class GuestUserReaperTest(aiounittest.AsyncTestCase):
async def test_get_admin_token_register(self) -> None:
module, module_api, _ = create_module()
token = await module.reaper.get_admin_token()
module_api.check_user_exists.assert_called_with("guest-reaper")
module_api.register_user.assert_called_with("guest-reaper", admin=True)
module_api.register_device.assert_called_with("@guest-reaper:matrix.local")
self.assertEqual(token, "syn_registered_token")
async def test_get_admin_token_create_device(self) -> None:
module, module_api, _ = create_module()
module_api.check_user_exists.return_value = make_awaitable(True)
token = await module.reaper.get_admin_token()
module_api.check_user_exists.assert_called_with("guest-reaper")
module_api.register_user.assert_not_called()
module_api.register_device.assert_called_with("@guest-reaper:matrix.local")
self.assertEqual(token, "syn_registered_token")
async def test_get_admin_token_read_from_db(self) -> None:
module, module_api, store = create_module()
store.conn.execute(
"INSERT INTO access_tokens VALUES ('@guest-reaper:matrix.local', 'syn_db_token')"
)
module_api.check_user_exists.return_value = make_awaitable(True)
token = await module.reaper.get_admin_token()
module_api.check_user_exists.assert_not_called()
module_api.register_user.assert_not_called()
module_api.register_device.assert_not_called()
self.assertEqual(token, "syn_db_token")
async def test_deactivate_expired_guest_users_success(self) -> None:
module, module_api, store = create_module()
now = int(time.time())
store.conn.executemany(
"INSERT INTO users VALUES (?, ?, ?)",
[
["@user-1:matrix.local", 0, 0],
["@guest-reaper:matrix.local", 0, 0],
["@guest-active:matrix.local", 0, now],
["@guest-deactivated:matrix.local", 1, 0],
["@guest-old-1:matrix.local", 0, 0],
["@guest-old-2:matrix.local", 0, 0],
],
)
await module.reaper.deactivate_expired_guest_users()
self.assertEqual(module_api.http_client.post_json_get_json.await_count, 2)
module_api.http_client.post_json_get_json.assert_has_awaits(
[
call(
uri="http://localhost:8008/_synapse/admin/v1/deactivate/@guest-old-1:matrix.local",
post_json={},
headers={"Authorization": ["Bearer syn_registered_token"]},
),
call(
uri="http://localhost:8008/_synapse/admin/v1/deactivate/@guest-old-2:matrix.local",
post_json={},
headers={"Authorization": ["Bearer syn_registered_token"]},
),
]
)
async def test_deactivate_expired_guest_users_with_failure(self) -> None:
module, module_api, store = create_module()
store.conn.executemany(
"INSERT INTO users VALUES (?, ?, ?)",
[
["@guest-old-1:matrix.local", 0, 0],
["@guest-old-2:matrix.local", 0, 0],
],
)
module_api.http_client.post_json_get_json.side_effect = Exception("")
await module.reaper.deactivate_expired_guest_users()
module_api.http_client.post_json_get_json.assert_has_awaits(
[
call(
uri="http://localhost:8008/_synapse/admin/v1/deactivate/@guest-old-1:matrix.local",
post_json={},
headers={"Authorization": ["Bearer syn_registered_token"]},
),
call(
uri="http://localhost:8008/_synapse/admin/v1/deactivate/@guest-old-2:matrix.local",
post_json={},
headers={"Authorization": ["Bearer syn_registered_token"]},
),
]
)