diff --git a/src/core/tests/utils.py b/src/core/tests/utils.py index a69dab3c921ad22cb63b78ace318f5538b256656..b39677a3372b26cdc7bc28b18ced6fabc03143d1 100644 --- a/src/core/tests/utils.py +++ b/src/core/tests/utils.py @@ -1,9 +1,13 @@ import uuid from datetime import timedelta +from django.conf import settings from django.test import TestCase +from django.urls import reverse +from django.utils.timezone import now -from core.utils import GitRepo, mail2uuid, mask_url, scheme_and_netloc_from_url, str2timedelta +from core.models import Assembly, Conference, ConferenceMember, Event, PlatformUser, Room +from core.utils import GitRepo, mail2uuid, mask_url, resolve_internal_url, scheme_and_netloc_from_url, str2timedelta class UtilsTests(TestCase): @@ -47,6 +51,46 @@ class UtilsTests(TestCase): self.assertEqual(expected_uuid, mail2uuid('hub@cccv.de')) +class InternalUrlTests(TestCase): + def setUp(self): + self.conference1 = Conference(slug='foo', name='Foo Conference', start=now() - timedelta(days=1), end=now() + timedelta(days=1)) + self.conference1.save() + + self.user = PlatformUser(username='bernd') + self.user.save() + ConferenceMember(conference=self.conference1, user=self.user).save() + + self.assembly1a = Assembly(conference=self.conference1, slug='fnord', name='Fnord Assembly', is_official=True) + self.assembly1a.save() + + self.room1a = Room(conference=self.conference1, assembly=self.assembly1a, name='Saal 1', room_type=Room.RoomType.LECTURE_HALL) + self.room1a.save() + + self.valid_event = { + 'conference': self.conference1, + 'assembly': self.assembly1a, + 'name': 'testEvent', + 'slug': 'testEvent', + 'kind': Event.Kind.ASSEMBLY, + 'room': self.room1a, + 'schedule_start': now(), + 'schedule_duration': timedelta(hours=1), + 'is_public': True, + } + + def test_resolve_internal_url(self): + base_url = settings.PLAINUI_BASE_URL + checks = [ + ('https://example.com/foo?bar=baz', 'https://example.com/foo?bar=baz'), + ('conference://assemblies', base_url + reverse('plainui:assemblies')), + ('conference://assemblies?foo=bar', base_url + reverse('plainui:assemblies') + '?foo=bar'), + ('assembly://fnord', base_url + reverse('plainui:assembly', kwargs={'assembly_slug': 'fnord'})), + ] + + for check in checks: + self.assertEqual(check[1], resolve_internal_url(check[0])) + + class GitRepoOfflineTests(TestCase): def test_invalid_url_local_path(self): with self.assertRaisesMessage(ValueError, 'Invalid protocol file'):