LTC timecode goes to the other campuses' plans too: Apollo Beach, Southcoast, Woonsocket
The TIMECODE key now reads each campus's plan for the same weekend, pairs its songs with North Attleboro's by title in North Attleboro's order (a song out of order, or one NA does not play, is left alone and said so), checks their LTC notes, and the hold writes the timecode into every campus's plan. ready.ltc_campuses lists the campuses (name, two letters, PCO service type). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
@@ -550,3 +550,48 @@ class TestSpotifyWhileMuted(unittest.TestCase):
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
|
||||
class TestOtherCampuses(unittest.TestCase):
|
||||
"""The other campuses play the same songs: their plans get North Attleboro's timecode, in its order."""
|
||||
CAMPUS = {"name": "Apollo Beach", "short": "AB", "service_type": "1113969"}
|
||||
|
||||
def campus_plan(self, titles, notes=None):
|
||||
p = plan()
|
||||
p["id"], p["service_type"] = "ab-1", "1113969"
|
||||
p["items"] = [item(t, "song", notes=(notes or {}).get(t)) for t in titles]
|
||||
return p
|
||||
|
||||
def test_songs_match_in_home_order_and_out_of_order_ones_are_skipped(self):
|
||||
na = rd.song_ltc(RC, plan(), ableton())
|
||||
titles = [s["title"] for s in na]
|
||||
self.assertGreaterEqual(len(titles), 3)
|
||||
# the campus plays song 2 first, then 1, then 3: song 1 breaks the order and is skipped; a song NA does not play is skipped too
|
||||
cp = self.campus_plan([titles[1], titles[0], titles[2], "Something Else"])
|
||||
res = rd.campus_ltc(RC, na, self.CAMPUS, cp)
|
||||
self.assertEqual([s["title"] for s in res["songs"]], [titles[1], titles[2]])
|
||||
self.assertEqual(res["skipped"], [titles[0], "Something Else"])
|
||||
self.assertEqual(res["songs"][0]["tracks"], na[1]["tracks"])
|
||||
line = rd.eval_campus_ltc(RC, res, rd.Line())
|
||||
self.assertEqual([m for _, m, _ in line.faults], ["AB NO LTC " + rd.short(titles[1], 12), "AB NO LTC " + rd.short(titles[2], 12)])
|
||||
self.assertTrue(any("left alone" in d for d in line.as_dict()["details"]))
|
||||
right = self.campus_plan(titles, notes={t: {"LTC": s["tracks"]} for t, s in zip(titles, na)})
|
||||
self.assertEqual(rd.eval_campus_ltc(RC, rd.campus_ltc(RC, na, self.CAMPUS, right), rd.Line()).faults, [])
|
||||
|
||||
def test_the_fix_writes_every_campus(self):
|
||||
na = rd.song_ltc(RC, plan(), ableton())
|
||||
cp = self.campus_plan([s["title"] for s in na])
|
||||
res = rd.campus_ltc(RC, na, self.CAMPUS, cp)
|
||||
rd.LAST["ltc"], rd.LAST["service_type"], rd.LAST["plan_id"] = na, "275974", "92013595"
|
||||
rd.LAST["ltc_other"] = [res]
|
||||
calls = []
|
||||
real_http, real_get, real_login = rd.http_json, rd.pco_get, rd.pco_login
|
||||
rd.pco_login = lambda rc: ("Basic x", "275974")
|
||||
rd.pco_get = lambda auth, path, pages=10: ([{"id": "77", "attributes": {"name": "LTC"}}], [])
|
||||
rd.http_json = lambda url, headers=None, method="GET", data=None, timeout=10: calls.append((method, url)) or {}
|
||||
try:
|
||||
cfg = dict(CONFIG, ready=dict(RC, ltc_campuses=[self.CAMPUS]))
|
||||
self.assertTrue(rd.run_action(cfg, "ltc_to_pco", sleep=lambda s: None))
|
||||
finally:
|
||||
rd.http_json, rd.pco_get, rd.pco_login = real_http, real_get, real_login
|
||||
self.assertEqual(len([c for c in calls if "/1113969/" in c[1] and c[0] == "POST"]), len(res["songs"])) # one note per campus song
|
||||
|
||||
Reference in New Issue
Block a user