diff --git a/src/core/fixtures/.gitignore b/src/core/fixtures/.gitignore index 267d38517c98e1dfa6c06b0252b1248c2c63d232..445270a60b5e95ecf5ea791a678e6f725227ae09 100644 --- a/src/core/fixtures/.gitignore +++ b/src/core/fixtures/.gitignore @@ -1,2 +1,3 @@ *.json !anhalter.json +!bootstrap_*.json diff --git a/src/core/fixtures/bootstrap_auth_groups.json b/src/core/fixtures/bootstrap_auth_groups.json new file mode 100644 index 0000000000000000000000000000000000000000..364f79683d75958393f5fe0d62058a51167b8396 --- /dev/null +++ b/src/core/fixtures/bootstrap_auth_groups.json @@ -0,0 +1,125 @@ +[ + { + "model": "auth.group", + "fields": { + "name": "Assembly-Team", + "permissions": [ + [ + "assembly_team", + "core", + "conferencemember" + ] + ] + } + }, + { + "model": "auth.group", + "fields": { + "name": "Karten-Verwaltung", + "permissions": [ + [ + "map_edit", + "core", + "conferencemember" + ] + ] + } + }, + { + "model": "auth.group", + "fields": { + "name": "Schedule Supervisor", + "permissions": [ + [ + "scheduleadmin", + "core", + "conferencemember" + ], + [ + "add_schedulesource", + "core", + "schedulesource" + ], + [ + "change_schedulesource", + "core", + "schedulesource" + ], + [ + "delete_schedulesource", + "core", + "schedulesource" + ], + [ + "view_schedulesource", + "core", + "schedulesource" + ], + [ + "view_schedulesourceimport", + "core", + "schedulesourceimport" + ], + [ + "add_schedulesourcemapping", + "core", + "schedulesourcemapping" + ], + [ + "change_schedulesourcemapping", + "core", + "schedulesourcemapping" + ], + [ + "delete_schedulesourcemapping", + "core", + "schedulesourcemapping" + ], + [ + "view_schedulesourcemapping", + "core", + "schedulesourcemapping" + ] + ] + } + }, + { + "model": "auth.group", + "fields": { + "name": "PL", + "permissions": [ + [ + "static_pages", + "core", + "conferencemember" + ] + ] + } + }, + { + "model": "auth.group", + "fields": { + "name": "Wiki Team", + "permissions": [ + [ + "static_pages", + "core", + "conferencemember" + ] + ] + } + }, + { + "model": "auth.group", + "fields": { + "name": "Moderation", + "permissions": [ + [ + "moderation", + "core", + "conferencemember" + ] + ] + } + } +] diff --git a/src/core/tests/assemblies.py b/src/core/tests/assemblies.py index c8d4b5b6b33f45720ea66daa76dd0f0b98a4b905..be70aabad8f3ac39e86666e1e272694b3a65aaa6 100644 --- a/src/core/tests/assemblies.py +++ b/src/core/tests/assemblies.py @@ -1,12 +1,13 @@ +from django.contrib.auth.models import Group, Permission from django.core import mail from django.test import TestCase, override_settings -from ..models.assemblies import Assembly +from ..models.assemblies import Assembly, AssemblyMember from ..models.conference import Conference, ConferenceMember from ..models.users import PlatformUser, UserCommunicationChannel -class AssembliesTests(TestCase): +class AssembliesTestsMixin(TestCase): def setUp(self): self.conference = Conference(slug='foo', name='Foo Conference', mail_footer='This is serious business w/ legal stuff.') self.conference.save() @@ -27,6 +28,7 @@ class AssembliesTests(TestCase): ) self.user_mgmt2 = PlatformUser(username='manager2') self.user_mgmt2.save() + self.user_mgmt2.user_permissions.add(Permission.objects.get(codename='assembly_team')) self.user_mgmt2.communication_channels.create( channel=UserCommunicationChannel.Channel.MAIL, address='notifications2@unittest.local', @@ -49,6 +51,7 @@ class AssembliesTests(TestCase): is_verified=True, use_for_notifications=False, ) + self.user_anon = PlatformUser.get_anonymous_user() ConferenceMember(conference=self.conference, user=self.user_mgmt).save() ConferenceMember(conference=self.conference, user=self.user_mgmt2).save() ConferenceMember(conference=self.conference, user=self.user_participant).save() @@ -57,11 +60,13 @@ class AssembliesTests(TestCase): self.assembly1 = Assembly(conference=self.conference, slug='fnord', name='Fnord Assembly') self.assembly1.save() self.assembly1.members.create(member=self.user_mgmt, can_manage_assembly=True) - self.assembly1.members.create(member=self.user_participant, can_manage_assembly=False) + self.assembly1.members.create(member=self.user_participant, can_manage_assembly=False, show_public=True) self.assembly2 = Assembly(conference=self.conference, slug='foo', name='Foo Bar') self.assembly2.members.create(member=self.user_mgmt2, can_manage_assembly=True) self.assembly2.save() + +class AssembliesTests(AssembliesTestsMixin): @override_settings(SUPPORT_HTML_MAILS=True) def test_mail_plainhtml(self): self.assembly2.send_mail_to_managers( @@ -105,3 +110,63 @@ class AssembliesTests(TestCase): self.assertIn('https://events.ccc.de/', the_mail.body) self.assertIn(self.assembly1.slug, the_mail.alternatives[0][0]) self.assertIn('https://events.ccc.de/', the_mail.alternatives[0][0]) + + +class AssembliesObjectManagerTests(AssembliesTestsMixin): + fixtures = [ + 'bootstrap_auth_groups', + ] + + def setUp(self): + super().setUp() + + self.conference2 = Conference(slug='bar', name='Bar Conference') + self.conference2.save() + self.assembly3 = Assembly(conference=self.conference2, slug='fnord', name='Fnord Assembly') + self.assembly3.save() + self.user_a3_mgmt = PlatformUser(username='manager3') + self.user_a3_mgmt.save() + ConferenceMember(conference=self.conference2, user=self.user_a3_mgmt).save() + self.assembly3.members.create(member=self.user_a3_mgmt, can_manage_assembly=True, show_public=True) + self.user_a3_part = PlatformUser(username='participant3') + self.user_a3_part.save() + ConferenceMember(conference=self.conference2, user=self.user_a3_part).save() + self.assembly3.members.create(member=self.user_a3_part, can_manage_assembly=False, show_public=True) + + self.assembly_group = Group.objects.get(name='Assembly-Team') + + self.user_conf_staff = PlatformUser(username='conf_staff') + self.user_conf_staff.save() + self.cm_conf_staff = ConferenceMember( + conference=self.conference, + user=self.user_conf_staff, + is_staff=True, + ) + self.cm_conf_staff.save() + self.cm_conf_staff.permission_groups.add(self.assembly_group) + + self.public_members = list(AssemblyMember.objects.filter(show_public=True)) + + def test_associated_with_user(self): + self.assertListEqual( + list(AssemblyMember.objects.associated_with_user(user=self.user_conf_staff, conference=self.conference)), + list(AssemblyMember.objects.filter(assembly__conference=self.conference)), + ) + self.assertListEqual( + list(AssemblyMember.objects.associated_with_user(user=self.user_conf_staff, conference=self.conference, staff_can_see=False)), + [], + ) + self.assertListEqual( + list(AssemblyMember.objects.associated_with_user(user=self.user_visitor, conference=self.conference)), + [], + ) + + def test_conference_accessible(self): + self.assertListEqual( + list(AssemblyMember.objects.conference_accessible(conference=self.conference)), + list(AssemblyMember.objects.filter(assembly__conference=self.conference, show_public=True)), + ) + self.assertListEqual( + list(AssemblyMember.objects.conference_accessible(conference=self.conference)), + list(AssemblyMember.objects.filter(assembly__conference=self.conference, show_public=True)), + )