From 3541fc6115cdcf86cf9864f4ff61c030d18f9cb4 Mon Sep 17 00:00:00 2001
From: Ernesto Rico Schmidt <ernesto@helsinki.at>
Date: Mon, 15 Jul 2024 18:27:42 -0400
Subject: [PATCH] test: add playout tests for one week

---
 program/tests/test_playout.py | 62 ++++++++++++++++++++++++++++++++---
 1 file changed, 58 insertions(+), 4 deletions(-)

diff --git a/program/tests/test_playout.py b/program/tests/test_playout.py
index 932d8d2c..acf2c217 100644
--- a/program/tests/test_playout.py
+++ b/program/tests/test_playout.py
@@ -1,3 +1,6 @@
+from datetime import datetime, timedelta
+from itertools import pairwise
+
 import pytest
 
 from conftest import create_daily_schedule
@@ -5,11 +8,15 @@ from conftest import create_daily_schedule
 pytestmark = pytest.mark.django_db
 
 
-def url(include_virtual=False):
-    if include_virtual:
+def url(include_virtual=False, start=None, end=None):
+    if include_virtual and start and end:
+        return f"/api/v1/program/playout/?include_virtual=true&start={start}&end={end}"
+    elif start and end:
+        return f"/api/v1/program/playout/?start={start}&end={end}"
+    elif include_virtual:
         return "/api/v1/program/playout/?include_virtual=true"
-
-    return "/api/v1/program/playout/"
+    else:
+        return "/api/v1/program/playout/"
 
 
 def assert_entry(entry, show) -> None:
@@ -49,6 +56,21 @@ def test_playout(admin_api_client, api_client, daily_rrule, show):
     assert_entry(response.json()[0], show)
 
 
+def test_playout_one_week(admin_api_client, api_client, daily_rrule, show):
+    create_daily_schedule(admin_api_client, daily_rrule, show)
+
+    now = datetime.now()
+    in_one_week = now + timedelta(days=7)
+
+    response = api_client.get(url(start=now.isoformat(), end=in_one_week.isoformat()))
+
+    assert response.status_code == 200
+    assert len(response.json()) == 6 or 7  # I’m not sure why, but this changes around midnight.
+
+    for entry in response.json():
+        assert_entry(entry, show)
+
+
 def test_playout_include_virtual(
     admin_api_client,
     api_client,
@@ -72,3 +94,35 @@ def test_playout_include_virtual(
 
     assert virtual_entry1["end"] == entry["start"]
     assert entry["end"] == virtual_entry2["start"]
+
+
+def test_playout_one_week_include_virtual(
+    admin_api_client,
+    api_client,
+    daily_rrule,
+    show,
+    fallback_show,
+    radio_settings,
+):
+    create_daily_schedule(admin_api_client, daily_rrule, show)
+
+    now = datetime.now()
+    in_one_week = now + timedelta(days=7)
+
+    response = api_client.get(
+        url(include_virtual=True, start=now.isoformat(), end=in_one_week.isoformat())
+    )
+
+    assert response.status_code == 200
+    assert len(response.json()) == 13 or 15  # I’m not sure why, but this changes around midnight.
+
+    entries = response.json()
+
+    for virtual_entry in entries[0::2]:
+        assert_virtual_entry(virtual_entry, fallback_show)
+
+    for entry in entries[1::2]:
+        assert_entry(entry, show)
+
+    for entry1, entry2 in pairwise(entries):
+        assert entry1["end"] == entry2["start"]
-- 
GitLab