from datetime import date, timedelta import pytest from django.test import Client from django.urls import reverse from model_bakery import baker from model_bakery.recipe import Recipe from pytest_django.asserts import assertNumQueries from club.models import Club, Membership from core.baker_recipes import subscriber_user @pytest.mark.django_db class TestFetchClub: @pytest.fixture() def club(self): club = baker.make(Club) last_month = date.today() - timedelta(days=30) yesterday = date.today() - timedelta(days=1) membership_recipe = Recipe(Membership, club=club, start_date=last_month) membership_recipe.make(end_date=None, _quantity=10, _bulk_create=True) membership_recipe.make(end_date=yesterday, _quantity=10, _bulk_create=True) return club def test_fetch_club_members(self, client: Client, club: Club): user = subscriber_user.make() client.force_login(user) res = client.get(reverse("api:fetch_club", kwargs={"club_id": club.id})) assert res.status_code == 200 member_ids = {member["user"]["id"] for member in res.json()["members"]} assert member_ids == set( club.members.ongoing().values_list("user_id", flat=True) ) def test_fetch_club_nb_queries(self, client: Client, club: Club): user = subscriber_user.make() client.force_login(user) with assertNumQueries(6): # - 4 queries for authentication # - 2 queries for the actual data res = client.get(reverse("api:fetch_club", kwargs={"club_id": club.id})) assert res.status_code == 200