AtlatestRepositorysigil-twitch
sigil-twitch / tree / testschedule-test.sgl
1
;;; Tests for (twitch schedule) — schedule module2
;;;3
;;; Tests record construction and JSON parsing for schedule segments.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 fixtures16
;; ---------------------------------------------------------------18
(define segment-resource-json19
(json-decode20
(string-append21
"{\"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-json31
(json-decode32
(string-append33
"{\"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-json43
(json-decode44
(string-append45
"{\"id\": \"abc123\","46
" \"start_time\": \"2026-04-01T20:00:00Z\"}")))48
;; ---------------------------------------------------------------49
;; Schedule segment record tests50
;; ---------------------------------------------------------------52
(test-group "schedule segment records"54
(test "segment record construction"55
(let ((seg (twitch-schedule-segment56
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-segment78
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 tests85
;; ---------------------------------------------------------------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)