57 lines
1.9 KiB
Python
57 lines
1.9 KiB
Python
# SPDX-FileCopyrightText: 2026 Filmhuis Den Haag
|
|
# SPDX-License-Identifier: AGPL-3.0-or-later
|
|
|
|
from datetime import datetime, timedelta
|
|
from zoneinfo import ZoneInfo
|
|
|
|
import pytest
|
|
from sqlmodel.ext.asyncio.session import AsyncSession
|
|
|
|
from fdhview.core.config import settings
|
|
from fdhview.models.enums import Screen
|
|
from fdhview.models.screening import Screening
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_infodesk_filters_past(
|
|
client, db_session: AsyncSession
|
|
):
|
|
now = datetime.now(tz=ZoneInfo(settings.timezone))
|
|
|
|
# Past film (ended 15 mins ago)
|
|
past = Screening(
|
|
session=1, screen=Screen.ONE, complex_ident="FDH",
|
|
start=now - timedelta(hours=2), end=now - timedelta(minutes=15),
|
|
duration=105, title="Past Film", rating=0, seats_total=100, seats_sold=10
|
|
)
|
|
# Currently running film (started 30 mins ago, ends in 60 mins)
|
|
running = Screening(
|
|
session=2, screen=Screen.TWO, complex_ident="FDH",
|
|
start=now - timedelta(minutes=30), end=now + timedelta(minutes=60),
|
|
duration=90, title="Running Film", rating=0, seats_total=100, seats_sold=50
|
|
)
|
|
# Upcoming film (starts in 2 hours)
|
|
upcoming = Screening(
|
|
session=3, screen=Screen.THREE, complex_ident="FDH",
|
|
start=now + timedelta(hours=2), end=now + timedelta(hours=4),
|
|
duration=120, title="Upcoming Film", rating=0, seats_total=100, seats_sold=20
|
|
)
|
|
|
|
db_session.add_all([past, running, upcoming])
|
|
await db_session.commit()
|
|
|
|
response = client.get("/api/screenings")
|
|
assert response.status_code == 200
|
|
|
|
titles = [s["title"] for s in response.json()]
|
|
assert "Past Film" not in titles
|
|
assert "Running Film" not in titles
|
|
assert "Upcoming Film" in titles
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_screening_prices(client):
|
|
response = client.get("/api/screenings/prices")
|
|
assert response.status_code == 200
|
|
assert response.json() == settings.prices
|