import pytest
from model_bakery import baker
from ninja_extra.testing import TestClient
from pytest_django.asserts import assertNumQueries

from reservation.api import ReservableRoomController, ReservationSlotController
from reservation.models import ReservationSlot


@pytest.mark.django_db
class TestFetchRoom:
    def test_fetch_simple(self):
        slots = baker.make(ReservationSlot, _quantity=5, _bulk_create=True)
        response = TestClient(ReservationSlotController).get("")
        assert response.json() == [
            {
                "id": slot.id,
                "room": slot.room_id,
                "comment": slot.comment,
                "nb_people": slot.nb_people,
                "start": slot.start_at.isoformat(timespec="milliseconds").replace(
                    "+00:00", "Z"
                ),
                "end": slot.end_at.isoformat(timespec="milliseconds").replace(
                    "+00:00", "Z"
                ),
                "author": {
                    "id": slot.author.id,
                    "first_name": slot.author.first_name,
                    "last_name": slot.author.last_name,
                    "nick_name": slot.author.nick_name,
                },
            }
            for slot in slots
        ]

    def test_nb_queries(self):
        with assertNumQueries(1):
            TestClient(ReservableRoomController).get("")