diff --git a/src/backoffice/tests/assemblies.py b/src/backoffice/tests/assemblies.py index 5e636efc71dbba0ce0db55c3fe7d0d8c40fa7566..0d19efc8a59f032b6c892ba2144319b1fdd100fb 100644 --- a/src/backoffice/tests/assemblies.py +++ b/src/backoffice/tests/assemblies.py @@ -26,6 +26,68 @@ class AssemblyListViewTest(BackOfficeTestCase): self.assertIn(b'a2, a3', resp.content) +class AssemblyCreateViewTest(BackOfficeTestCase): + def setUp(self): + super().setUp() + + def test_create_assembly(self): + resp = self.client.get(reverse('backoffice:assembly-create')) + self.assertRedirects(resp, reverse('backoffice:login') + '?next=' + reverse('backoffice:assembly-create')) + + # Test with regular user + self.client.force_login(self.non_staff_user) + resp = self.client.get(reverse('backoffice:assembly-create')) + self.assertEqual(resp.status_code, 200) + self.assertTemplateUsed(resp, 'backoffice/assembly_create.html') + resp = self.client.post(reverse('backoffice:assembly-create'), data={'slug': 'a1', 'name': 'a1', 'is_physical': 'true', 'conference': self.conf.id}) + self.assertEqual(resp.status_code, 302) + self.assertEqual(Assembly.objects.count(), 1) + assembly = Assembly.objects.first() + self.assertIsNotNone(assembly) + assert assembly is not None + self.assertRedirects(resp, reverse('backoffice:assembly-edit', kwargs={'pk': assembly.pk})) + + # Test with staff user + self.client.force_login(self.staff) + resp = self.client.get(reverse('backoffice:assembly-create')) + self.assertEqual(resp.status_code, 200) + self.assertTemplateUsed(resp, 'backoffice/assembly_create.html') + resp = self.client.post(reverse('backoffice:assembly-create'), data={'slug': 'a2', 'name': 'a2', 'is_physical': 'true', 'conference': self.conf.id}) + self.assertEqual(resp.status_code, 302) + self.assertEqual(Assembly.objects.count(), 2) + assembly = Assembly.objects.filter(name='a2').first() + self.assertIsNotNone(assembly) + assert assembly is not None + self.assertRedirects(resp, reverse('backoffice:assembly-edit', kwargs={'pk': assembly.pk})) + + def test_create_assembly_non_public_conf(self): + self.conf.is_public = False + self.conf.save() + resp = self.client.get(reverse('backoffice:assembly-create')) + self.assertRedirects(resp, reverse('backoffice:login') + '?next=' + reverse('backoffice:assembly-create')) + + # Test with regular user, as the conference is not public, the user should not be able to create an assembly + self.client.force_login(self.non_staff_user) + resp = self.client.get(reverse('backoffice:assembly-create')) + self.assertContains(resp, 'Forbidden', status_code=403) + + # Test with staff user + self.client.force_login(self.staff) + session = self.client.session + session['conference'] = str(self.conf.slug) + session.save() + resp = self.client.get(reverse('backoffice:assembly-create')) + self.assertEqual(resp.status_code, 200) + self.assertTemplateUsed(resp, 'backoffice/assembly_create.html') + resp = self.client.post(reverse('backoffice:assembly-create'), data={'slug': 'a1', 'name': 'a1', 'is_physical': 'true', 'conference': self.conf.id}) + self.assertEqual(resp.status_code, 302) + self.assertEqual(Assembly.objects.count(), 1) + assembly = Assembly.objects.filter(name='a1').first() + self.assertIsNotNone(assembly) + assert assembly is not None + self.assertRedirects(resp, reverse('backoffice:assembly-edit', kwargs={'pk': assembly.pk})) + + class AssemblyMembersViewTest(BackOfficeTestCase): def setUp(self): super().setUp() diff --git a/src/backoffice/tests/base.py b/src/backoffice/tests/base.py index 3e308d4e87677388d1b363ef87e2fc5e827178cb..e793eec0d50da48b2089871adcd8dd9c043025f4 100644 --- a/src/backoffice/tests/base.py +++ b/src/backoffice/tests/base.py @@ -32,6 +32,8 @@ class BackOfficeTestCase(TestCase): self.staff = PlatformUser.objects.create(username='test_staff', email='staff@where.test') self.staff_cm = ConferenceMember.objects.create(conference=self.conf, user=self.staff, is_staff=True) self.staff_cm.permission_groups.add(Group.objects.get(name='Assembly-Team')) + self.non_staff_user = PlatformUser.objects.create(username='test_non_staff', email='no@where.test') + self.non_staff_cm = ConferenceMember.objects.create(conference=self.conf, user=self.non_staff_user) def tearDown(self) -> None: self.client.logout()