From 7577a8edea1ba215e1ca3add2748c237dac0688f Mon Sep 17 00:00:00 2001 From: Ernesto Rico Schmidt <ernesto@helsinki.at> Date: Wed, 19 Jun 2024 20:59:22 -0400 Subject: [PATCH] test: add tests for day schedule & playout --- program/tests/test_day_schedule.py | 75 ++++++++++++++++++++++++++++++ program/tests/test_playout.py | 71 ++++++++++++++++++++++++++++ 2 files changed, 146 insertions(+) create mode 100644 program/tests/test_day_schedule.py create mode 100644 program/tests/test_playout.py diff --git a/program/tests/test_day_schedule.py b/program/tests/test_day_schedule.py new file mode 100644 index 00000000..b81fe476 --- /dev/null +++ b/program/tests/test_day_schedule.py @@ -0,0 +1,75 @@ +from datetime import datetime, timedelta + +import pytest + +pytestmark = pytest.mark.django_db + + +def url(include_virtual=False): + year, month, day = datetime.today().year, datetime.today().month, datetime.today().day + + if include_virtual: + return f"/api/v1/program/{year}/{month}/{day}/?include_virtual=true" + else: + return f"/api/v1/program/{year}/{month}/{day}/" + + +def create_once_schedule(admin_api_client, once_rrule, show) -> None: + """creates a schedule for a show that repeats once using the REST API.""" + + now = datetime.now() + in_an_hour = now + timedelta(hours=1) + + data = { + "schedule": { + "end_time": in_an_hour.strftime("%H:%M:%S"), + "first_date": now.strftime("%Y-%m-%d"), + "last_date": None, + "rrule_id": once_rrule.id, + "show_id": show.id, + "start_time": now.strftime("%H:%M:%S"), + }, + } + + admin_api_client.post("/api/v1/schedules/", data=data, format="json") + + +def test_day_schedule(admin_api_client, api_client, once_rrule, show): + create_once_schedule(admin_api_client, once_rrule, show) + + response = api_client.get(url()) + + assert response.status_code == 200 + assert len(response.json()) == 1 + + entry = response.json()[0] + + assert not entry["isVirtual"] + assert entry["showId"] == show.id + assert entry["showName"] == show.name + + +def test_day_schedule_include_virtual( + admin_api_client, + api_client, + once_rrule, + show, + fallback_show, + radio_settings, +): + create_once_schedule(admin_api_client, once_rrule, show) + + response = api_client.get(url(include_virtual=True)) + + assert response.status_code == 200 + assert len(response.json()) == 3 + + for entry in response.json(): + if entry["isVirtual"]: + print("V") + assert entry["showId"] == fallback_show.id + assert entry["showName"] == fallback_show.name + else: + print("R") + assert entry["showId"] == show.id + assert entry["showName"] == show.name diff --git a/program/tests/test_playout.py b/program/tests/test_playout.py new file mode 100644 index 00000000..766b5edc --- /dev/null +++ b/program/tests/test_playout.py @@ -0,0 +1,71 @@ +from datetime import datetime, timedelta + +import pytest + +pytestmark = pytest.mark.django_db + + +def url(include_virtual=False): + if include_virtual: + return "/api/v1/playout/?include_virtual=true" + + return "/api/v1/playout/" + + +def create_daily_schedule(admin_api_client, daily_rrule, show) -> None: + """creates a schedule for a show that repeats daily using the REST API.""" + + now = datetime.now() + in_one_hour = now + timedelta(hours=1) + in_seven_days = now + timedelta(days=7) + + data = { + "schedule": { + "end_time": in_one_hour.strftime("%H:%M:%S"), + "first_date": now.strftime("%Y-%m-%d"), + "last_date": in_seven_days.strftime("%Y-%m-%d"), + "rrule_id": daily_rrule.id, + "show_id": show.id, + "start_time": now.strftime("%H:%M:%S"), + } + } + + admin_api_client.post("/api/v1/schedules/", data=data, format="json") + + +def test_playout(admin_api_client, api_client, daily_rrule, show): + create_daily_schedule(admin_api_client, daily_rrule, show) + + response = api_client.get(url()) + + assert response.status_code == 200 + assert len(response.json()) == 7 + + for entry in response.json(): + assert not entry["isVirtual"] + assert entry["showId"] == show.id + assert entry["showName"] == show.name + + +def test_playout_include_virtual( + admin_api_client, + api_client, + daily_rrule, + show, + fallback_show, + radio_settings, +): + create_daily_schedule(admin_api_client, daily_rrule, show) + + response = api_client.get(url(include_virtual=True)) + + assert response.status_code == 200 + assert len(response.json()) == 14 or 15 + + for entry in response.json(): + if entry["isVirtual"]: + assert entry["showId"] == fallback_show.id + assert entry["showName"] == fallback_show.name + else: + assert entry["showId"] == show.id + assert entry["showName"] == show.name -- GitLab