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