From 6a06e9da73ff4afa4b496fd4115e40c2c8ac62b6 Mon Sep 17 00:00:00 2001
From: Lucas Brandstaetter <lucas@brandstaetter.tech>
Date: Wed, 30 Oct 2024 10:59:19 +0100
Subject: [PATCH] Fix assembly member view

During the manager update I accidentally removed the
`manageable_by_user_for_assembly` method. This commit adds it back.

Fixes #586
---
 src/backoffice/tests/assemblies.py | 26 +++++++++++++++++++++++++-
 src/core/models/assemblies.py      |  3 +++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/src/backoffice/tests/assemblies.py b/src/backoffice/tests/assemblies.py
index 78f644e46..5e636efc7 100644
--- a/src/backoffice/tests/assemblies.py
+++ b/src/backoffice/tests/assemblies.py
@@ -1,6 +1,8 @@
 from django.urls import reverse
 
-from core.models import Assembly, AssemblyLink
+from core.models import Assembly, AssemblyLink, AssemblyMember
+from core.models.conference import ConferenceMember
+from core.models.users import PlatformUser
 
 from backoffice.tests import BackOfficeTestCase
 
@@ -22,3 +24,25 @@ class AssemblyListViewTest(BackOfficeTestCase):
         resp = self.client.get(reverse('backoffice:assemblieslist', kwargs={'variant': 'slugname'}))
         self.assertEqual(resp.context['data'][0][3], 'a2, a3')
         self.assertIn(b'a2, a3', resp.content)
+
+
+class AssemblyMembersViewTest(BackOfficeTestCase):
+    def setUp(self):
+        super().setUp()
+        self.assembly = Assembly.objects.create(slug='a1', name='a1', is_physical=True, conference_id=self.conf.id, state_assembly=Assembly.State.ACCEPTED)
+        self.users: list[PlatformUser] = [
+            PlatformUser.objects.create(
+                username=a,
+            )
+            for a in ('a1', 'a2', 'a3')
+        ]
+        members: list[ConferenceMember] = []
+        for user in self.users:
+            members.append(ConferenceMember.objects.create(user=user, conference=self.conf))
+            user.associated_assemblies.add(AssemblyMember.objects.create(member=user, assembly=self.assembly))
+
+    def test_member_list(self):
+        self.client.force_login(self.staff)
+        resp = self.client.get(reverse('backoffice:assembly-members', kwargs={'pk': self.assembly.id}))
+        self.assertEqual(resp.status_code, 200)
+        self.assertEqual(resp.context['object_list'].count(), 3)
diff --git a/src/core/models/assemblies.py b/src/core/models/assemblies.py
index 5b684b9d8..5acc01978 100644
--- a/src/core/models/assemblies.py
+++ b/src/core/models/assemblies.py
@@ -555,6 +555,9 @@ class AssemblyMemberManager(ConferenceManagerMixin['AssemblyMember']):
     def apply_public_filter(self, queryset: 'QuerySet[AssemblyMember]', member: ConferenceMember | None = None) -> 'QuerySet[AssemblyMember]':
         return queryset.filter(show_public=True)
 
+    def manageable_by_user_for_assembly(self, *, user: PlatformUser, assembly: 'Assembly') -> 'QuerySet[AssemblyMember]':
+        return self.manageable_by_user(conference=assembly.conference, user=user).filter(assembly=assembly)
+
 
 class AssemblyMember(models.Model):
     objects = AssemblyMemberManager()
-- 
GitLab