AtlatestRepositorysigil-twitch

sigil-twitch / tree / testschedule-test.sgl

1;;; Tests for (twitch schedule) — schedule module
2;;;
3;;; Tests record construction and JSON parsing for schedule segments.
4
5(import (sigil core)
6 (sigil dict)
7 (sigil string)
8 (sigil struct)
9 (sigil json)
10 (sigil test)
11 (twitch)
12 (twitch schedule))
14;; ---------------------------------------------------------------
15;; Test fixtures
16;; ---------------------------------------------------------------
18(define segment-resource-json
19 (json-decode
20 (string-append
21 "{\"id\": \"eyJhbGciOiJIUzI1NiJ9\","
22 " \"start_time\": \"2026-03-28T18:00:00Z\","
23 " \"end_time\": \"2026-03-28T22:00:00Z\","
24 " \"title\": \"Friday Coding Stream\","
25 " \"canceled_until\": null,"
26 " \"category\": {\"id\": \"509670\","
27 " \"name\": \"Science & Technology\"},"
28 " \"is_recurring\": true}")))
30(define segment-canceled-json
31 (json-decode
32 (string-append
33 "{\"id\": \"canceled123\","
34 " \"start_time\": \"2026-04-04T18:00:00Z\","
35 " \"end_time\": \"2026-04-04T22:00:00Z\","
36 " \"title\": \"Friday Coding Stream\","
37 " \"canceled_until\": \"2026-04-11T18:00:00Z\","
38 " \"category\": {\"id\": \"509670\","
39 " \"name\": \"Science & Technology\"},"
40 " \"is_recurring\": true}")))
42(define segment-minimal-json
43 (json-decode
44 (string-append
45 "{\"id\": \"abc123\","
46 " \"start_time\": \"2026-04-01T20:00:00Z\"}")))
48;; ---------------------------------------------------------------
49;; Schedule segment record tests
50;; ---------------------------------------------------------------
52(test-group "schedule segment records"
54 (test "segment record construction"
55 (let ((seg (twitch-schedule-segment
56 id: "seg1"
57 start-time: "2026-03-28T18:00:00Z"
58 end-time: "2026-03-28T22:00:00Z"
59 title: "Stream"
60 is-recurring: #t)))
61 (assert-true (twitch-schedule-segment? seg))
62 (assert-equal "seg1" (twitch-schedule-segment-id seg))
63 (assert-equal "2026-03-28T18:00:00Z"
64 (twitch-schedule-segment-start-time seg))
65 (assert-equal "Stream" (twitch-schedule-segment-title seg))
66 (assert-equal #t (twitch-schedule-segment-is-recurring seg))))
68 (test "segment record defaults"
69 (let ((seg (twitch-schedule-segment id: "seg2")))
70 (assert-equal #f (twitch-schedule-segment-start-time seg))
71 (assert-equal #f (twitch-schedule-segment-end-time seg))
72 (assert-equal "" (twitch-schedule-segment-title seg))
73 (assert-equal #f (twitch-schedule-segment-canceled-until seg))
74 (assert-equal #f (twitch-schedule-segment-is-recurring seg))))
76 (test "segment record with canceled-until"
77 (let ((seg (twitch-schedule-segment
78 id: "seg3"
79 canceled-until: "2026-04-11T18:00:00Z")))
80 (assert-equal "2026-04-11T18:00:00Z"
81 (twitch-schedule-segment-canceled-until seg)))))
83;; ---------------------------------------------------------------
84;; Schedule segment parsing tests
85;; ---------------------------------------------------------------
87(test-group "schedule segment parsing"
89 (test "parse full segment resource"
90 (let ((seg (parse-schedule-segment segment-resource-json)))
91 (assert-true (twitch-schedule-segment? seg))
92 (assert-equal "eyJhbGciOiJIUzI1NiJ9"
93 (twitch-schedule-segment-id seg))
94 (assert-equal "2026-03-28T18:00:00Z"
95 (twitch-schedule-segment-start-time seg))
96 (assert-equal "2026-03-28T22:00:00Z"
97 (twitch-schedule-segment-end-time seg))
98 (assert-equal "Friday Coding Stream"
99 (twitch-schedule-segment-title seg))
100 (assert-equal #f (twitch-schedule-segment-canceled-until seg))
101 (assert-equal #t (twitch-schedule-segment-is-recurring seg))
102 (let ((cat (twitch-schedule-segment-category seg)))
103 (assert-true (dict? cat))
104 (assert-equal "509670" (dict-ref cat id:))
105 (assert-equal "Science & Technology" (dict-ref cat name:)))))
107 (test "parse canceled segment resource"
108 (let ((seg (parse-schedule-segment segment-canceled-json)))
109 (assert-equal "canceled123" (twitch-schedule-segment-id seg))
110 (assert-equal "2026-04-11T18:00:00Z"
111 (twitch-schedule-segment-canceled-until seg))
112 (assert-equal #t (twitch-schedule-segment-is-recurring seg))))
114 (test "parse minimal segment resource"
115 (let ((seg (parse-schedule-segment segment-minimal-json)))
116 (assert-equal "abc123" (twitch-schedule-segment-id seg))
117 (assert-equal "2026-04-01T20:00:00Z"
118 (twitch-schedule-segment-start-time seg))
119 (assert-equal #f (twitch-schedule-segment-end-time seg))
120 (assert-equal "" (twitch-schedule-segment-title seg))
121 (assert-equal #f (twitch-schedule-segment-is-recurring seg)))))
123(run-tests)