diff --git a/club/api.py b/club/api.py index e3f4e440..150bf487 100644 --- a/club/api.py +++ b/club/api.py @@ -76,8 +76,10 @@ class ClubMembershipController(ControllerBase): ) def fetch_new_club_members(self, filters: Query[MembershipFilterSchema]): """give all the members of all clubs that have joined since a given date""" - memberships = Membership.objects.ongoing().filter( - start_date__gte=filters.since_date, end_date__isnull=True + memberships = ( + Membership.objects.ongoing() + .filter(start_date__gte=filters.since_date, end_date__isnull=True) + .select_related("user", "role") ) if filters.clubs_id: memberships = memberships.filter(club_id__in=filters.clubs_id) @@ -96,7 +98,7 @@ class ClubMembershipController(ControllerBase): memberships = Membership.objects.filter( start_date__lt=filters.since_date, end_date__gte=filters.since_date, - ) + ).select_related("user", "role") if filters.clubs_id: memberships = memberships.filter(club_id__in=filters.clubs_id) diff --git a/club/tests/test_club_membership_controller.py b/club/tests/test_club_membership_controller.py index 406494b7..82e1afa0 100644 --- a/club/tests/test_club_membership_controller.py +++ b/club/tests/test_club_membership_controller.py @@ -96,14 +96,17 @@ class TestMembershipAPI(TestCase): class TestNewMembershipAPI(TestMembershipAPI): + @classmethod + def setUpTestData(cls): + super().setUpTestData() + cls.url = reverse("api:get_new_clubs_members_since_date") + def test_new_membership_one_club(self): - assert self.user.has_perm("club.view_club") self.client.force_login(self.user) since_date = localdate() - timedelta(weeks=1) arg = {"since_date": since_date, "clubs_id": self.clubs[0].id} - url = reverse("api:get_new_clubs_members_since_date") - with self.assertNumQueries(8): - response = self.client.get(url, arg) + with self.assertNumQueries(6): + response = self.client.get(self.url, query_params=arg) assert response.status_code == 200 data = response.json() @@ -112,16 +115,14 @@ class TestNewMembershipAPI(TestMembershipAPI): assert membership_ids == expected_ids def test_new_membership_multiple_club(self): - assert self.user.has_perm("club.view_club") self.client.force_login(self.user) since_date = localdate() - timedelta(weeks=1) arg = { "since_date": since_date, "clubs_id": [self.clubs[0].id, self.clubs[1].id], } - url = reverse("api:get_new_clubs_members_since_date") - with self.assertNumQueries(11): - response = self.client.get(url, arg) + with self.assertNumQueries(7): + response = self.client.get(self.url, query_params=arg) assert response.status_code == 200 data = response.json() @@ -130,13 +131,11 @@ class TestNewMembershipAPI(TestMembershipAPI): assert membership_ids == expected_ids def test_new_membership_all_clubs(self): - assert self.user.has_perm("club.view_club") self.client.force_login(self.user) since_date = localdate() - timedelta(weeks=1) arg = {"since_date": since_date} - url = reverse("api:get_new_clubs_members_since_date") - with self.assertNumQueries(14): - response = self.client.get(url, arg) + with self.assertNumQueries(8): + response = self.client.get(self.url, query_params=arg) assert response.status_code == 200 data = response.json() @@ -150,14 +149,17 @@ class TestNewMembershipAPI(TestMembershipAPI): class TestFormerMembershipAPI(TestMembershipAPI): + @classmethod + def setUpTestData(cls): + super().setUpTestData() + cls.url = reverse("api:get_former_clubs_members_since_date") + def test_former_membership_one_club(self): - assert self.user.has_perm("club.view_club") self.client.force_login(self.user) since_date = localdate() - timedelta(weeks=1) arg = {"since_date": since_date, "clubs_id": self.clubs[1].id} - url = reverse("api:get_former_clubs_members_since_date") - with self.assertNumQueries(8): - response = self.client.get(url, arg) + with self.assertNumQueries(6): + response = self.client.get(self.url, query_params=arg) assert response.status_code == 200 data = response.json() @@ -167,16 +169,14 @@ class TestFormerMembershipAPI(TestMembershipAPI): assert membership_ids == expected_ids def test_new_membership_multiple_club(self): - assert self.user.has_perm("club.view_club") self.client.force_login(self.user) since_date = localdate() - timedelta(weeks=1) arg = { "since_date": since_date, "clubs_id": [self.clubs[1].id, self.clubs[0].id], } - url = reverse("api:get_former_clubs_members_since_date") - with self.assertNumQueries(11): - response = self.client.get(url, arg) + with self.assertNumQueries(7): + response = self.client.get(self.url, query_params=arg) assert response.status_code == 200 data = response.json() @@ -185,13 +185,11 @@ class TestFormerMembershipAPI(TestMembershipAPI): assert membership_ids == expected_ids def test_new_membership_all_clubs(self): - assert self.user.has_perm("club.view_club") self.client.force_login(self.user) since_date = localdate() - timedelta(weeks=1) arg = {"since_date": since_date} - url = reverse("api:get_former_clubs_members_since_date") - with self.assertNumQueries(14): - response = self.client.get(url, arg) + with self.assertNumQueries(8): + response = self.client.get(self.url, query_params=arg) assert response.status_code == 200 data = response.json()