From 530cfb264ef8206727da7379a8d36b2ff9d916fb Mon Sep 17 00:00:00 2001
From: David Trattnig <david@subsquare.at>
Date: Fri, 15 Mar 2024 15:20:37 +0100
Subject: [PATCH] test: merge update

---
 tests/test_scheduling_timetable.py | 87 +++++++++++++++++++++++++++++-
 1 file changed, 86 insertions(+), 1 deletion(-)

diff --git a/tests/test_scheduling_timetable.py b/tests/test_scheduling_timetable.py
index 7ab97059..8bee1984 100644
--- a/tests/test_scheduling_timetable.py
+++ b/tests/test_scheduling_timetable.py
@@ -23,7 +23,14 @@ import unittest
 from aura_engine.base.config import AuraConfig
 from aura_engine.base.lang import DotDict
 from aura_engine.base.utils import SimpleUtil as SU
-from aura_engine.scheduling.domain import Playlist, PlaylistItem, PlaylistType, Timeslot
+from aura_engine.scheduling.domain import (
+    Episode,
+    Playlist,
+    PlaylistItem,
+    PlaylistType,
+    Show,
+    Timeslot,
+)
 from aura_engine.scheduling.timetable import TimetableMerger, TimetableService
 
 
@@ -600,6 +607,84 @@ class TestSchedulingTimetable(unittest.TestCase):
         final_timeslots = merger.merge(local_timeslots, remote_timeslots)
         self.assertEqual(5, len(final_timeslots))
 
+    def test_merger_update_timeslot(self):
+        print(self._testMethodName)
+
+        now = SU.timestamp()
+        ts1 = Timeslot(
+            id=1, repetition_id=None, start=now - 180, end=now - 120, show=None, episode=None
+        )
+        ts2 = Timeslot(
+            id=2, repetition_id=None, start=now - 120, end=now + 120, show=None, episode=None
+        )
+        ts3 = Timeslot(
+            id=3, repetition_id=None, start=now + 120, end=now + 180, show=None, episode=None
+        )
+        ts4 = Timeslot(
+            id=4, repetition_id=None, start=now + 180, end=now + 360, show=None, episode=None
+        )
+
+        pl = Playlist("999", "Playlist X", False)
+        alpha = PlaylistItem("alpha.flac", 20, 100, None)
+        beta = PlaylistItem("beta.flac", 100, 100, None)
+        gamma = PlaylistItem("gamma.flac", 20, 100, None)
+        pl.add(alpha)
+        pl.add(beta)
+        pl.add(gamma)
+
+        ts3.set_playlists(pl, None, None)
+
+        # Create updated timeslot
+        show = Show(22, "Updated Show", "x", "x", "x", "x")
+        episode = Episode("Updated Episode", None, ["de", "en"], ["a", "b", "c"], "some host memo")
+        ts3_updated = Timeslot(
+            id=3, repetition_id=1234, start=now + 120, end=now + 180, show=show, episode=episode
+        )
+        pl = Playlist("888", "Updated Playlist", False)
+        alpha = PlaylistItem("alpha_new.flac", 20, 100, None)
+        beta = PlaylistItem("beta_new.flac", 100, 100, None)
+        gamma = PlaylistItem("gamma_new.flac", 20, 100, None)
+        delta = PlaylistItem("delta_new.flac", 20, 100, None)
+        pl.add(alpha)
+        pl.add(beta)
+        pl.add(gamma)
+        pl.add(delta)
+        ts3_updated.set_playlists(pl, None, None)
+
+        local_timeslots = [ts1, ts2, ts3, ts4]
+        remote_timeslots = [ts1, ts2, ts3_updated, ts4]
+        merger = TimetableMerger()
+
+        # Check timeslot before merge
+        self.assertIsNone(ts3.get_show())
+        self.assertIsNone(ts3.get_episode())
+        self.assertEqual(None, ts3.get_repetition_id())
+        current_pl = ts3.get_current_playlist()
+        self.assertEqual("Playlist X", current_pl.get_description())
+        items: list[PlaylistItem] = current_pl.get_items()
+        self.assertEqual(3, len(items))
+        self.assertEqual("alpha.flac", items[0].source)
+        self.assertEqual("beta.flac", items[1].source)
+        self.assertEqual("gamma.flac", items[2].source)
+
+        final_timeslots = merger.merge(local_timeslots, remote_timeslots)
+        self.assertEqual(4, len(final_timeslots))
+
+        # Check timeslot after merge
+        self.assertIsNotNone(ts3.get_show())
+        self.assertEqual("Updated Show", ts3.get_show().name)
+        self.assertIsNotNone(ts3.get_episode())
+        self.assertEqual("Updated Episode", ts3.get_episode().title)
+        self.assertEqual(1234, ts3.get_repetition_id())
+        current_pl = ts3.get_current_playlist()
+        self.assertEqual("Updated Playlist", current_pl.get_description())
+        items: list[PlaylistItem] = current_pl.get_items()
+        self.assertEqual(4, len(items))
+        self.assertEqual("alpha_new.flac", items[0].source)
+        self.assertEqual("beta_new.flac", items[1].source)
+        self.assertEqual("gamma_new.flac", items[2].source)
+        self.assertEqual("delta_new.flac", items[3].source)
+
 
 if __name__ == "__main__":
     unittest.main()
-- 
GitLab