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()