from datetime import date import pytest import requests from aleksis.apps.matrix.models import MatrixRoom from aleksis.core.models import Group, SchoolTerm from aleksis.core.util.core_helpers import get_site_preferences pytestmark = pytest.mark.django_db SERVER_URL = "http://127.0.0.1:8008" def test_connection(synapse): assert synapse["listeners"][0]["port"] == 8008 assert requests.get(SERVER_URL).status_code == requests.codes.ok @pytest.fixture def matrix_bot_user(synapse): from aleksis.apps.matrix.matrix import build_url body = {"username": "aleksis-bot", "password": "test", "auth": {"type": "m.login.dummy"}} get_site_preferences()["matrix__homeserver"] = SERVER_URL r = requests.post(build_url("register"), json=body) print(r.text, build_url("register")) assert r.status_code == requests.codes.ok user = r.json() get_site_preferences()["matrix__user"] = user["user_id"] get_site_preferences()["matrix__device_id"] = user["device_id"] get_site_preferences()["matrix__access_token"] = user["access_token"] yield r.json() def test_create_room_for_group(matrix_bot_user): from aleksis.apps.matrix.matrix import build_url, get_headers g = Group.objects.create(name="Test Room") assert not MatrixRoom.objects.all().exists() room = MatrixRoom.from_group(g) assert ":matrix.aleksis.example.org" in room.room_id assert room.alias == "#test-room:matrix.aleksis.example.org" # On second get, it should be the same matrix room assert MatrixRoom.from_group(g) == room r = requests.get(build_url(f"rooms/{room.room_id}/aliases"), headers=get_headers()) aliases = r.json()["aliases"] assert "#test-room:matrix.aleksis.example.org" in aliases # def test_create_room_for_group_short_name(matrix_bot_user): g = Group.objects.create(name="Test Room", short_name="test") assert not MatrixRoom.objects.all().exists() room = MatrixRoom.from_group(g) assert room.alias == "#test:matrix.aleksis.example.org" def test_room_alias_collision_same_name(matrix_bot_user): from aleksis.apps.matrix.matrix import MatrixException g1 = Group.objects.create(name="Test Room") g2 = Group.objects.create(name="test-room") g3 = Group.objects.create(name="Test-Room") g4 = Group.objects.create(name="test room") room = MatrixRoom.from_group(g1) assert room.alias == "#test-room:matrix.aleksis.example.org" room = MatrixRoom.from_group(g2) assert room.alias == "#test-room-2:matrix.aleksis.example.org" room = MatrixRoom.from_group(g3) assert room.alias == "#test-room-3:matrix.aleksis.example.org" get_site_preferences()["matrix__disambiguate_room_aliases"] = False with pytest.raises(MatrixException): MatrixRoom.from_group(g4) def test_room_alias_collision_school_term(matrix_bot_user): school_term_a = SchoolTerm.objects.create( name="Test Term A", date_start=date(2020, 1, 1), date_end=date(2020, 12, 31) ) school_term_b = SchoolTerm.objects.create( name="Test Term B", date_start=date(2021, 1, 1), date_end=date(2021, 12, 31) ) g1 = Group.objects.create(name="Test Room", school_term=school_term_a) g2 = Group.objects.create(name="Test Room", school_term=school_term_b) room = MatrixRoom.from_group(g1) assert room.alias == "#test-room:matrix.aleksis.example.org" room = MatrixRoom.from_group(g2) assert room.alias == "#test-room-2:matrix.aleksis.example.org"