AtlatestRepositorysigil-youtube

sigil-youtube / tree / testplaylist-test.sgl

1;;; Tests for (youtube playlist) — playlist module
2;;;
3;;; Tests record construction and JSON parsing with fixture data.
4
5(import (sigil core)
6 (sigil dict)
7 (sigil string)
8 (sigil struct)
9 (sigil json)
10 (sigil test)
11 (youtube)
12 (youtube playlist))
14;; ---------------------------------------------------------------
15;; Test fixtures
16;; ---------------------------------------------------------------
18(define playlist-resource-json
19 (json-decode
20 (string-append
21 "{\"id\": \"PLxxxxxx\","
22 " \"snippet\": {"
23 " \"title\": \"Emacs From Scratch\","
24 " \"description\": \"Building an Emacs config from scratch\""
25 " },"
26 " \"contentDetails\": {"
27 " \"itemCount\": 15"
28 " },"
29 " \"status\": {"
30 " \"privacyStatus\": \"public\""
31 " }}")))
33(define playlist-minimal-json
34 (json-decode
35 (string-append
36 "{\"id\": \"PLyyyyyy\","
37 " \"snippet\": {},"
38 " \"contentDetails\": {},"
39 " \"status\": {}}")))
41(define playlist-item-json
42 (json-decode
43 (string-append
44 "{\"id\": \"UExxxxxxxBBBB\","
45 " \"snippet\": {"
46 " \"title\": \"Episode 1: Getting Started\","
47 " \"position\": 0,"
48 " \"resourceId\": {"
49 " \"kind\": \"youtube#video\","
50 " \"videoId\": \"vid001\""
51 " }"
52 " }}")))
54(define playlist-item-no-position-json
55 (json-decode
56 (string-append
57 "{\"id\": \"UExxxxxxxCCCC\","
58 " \"snippet\": {"
59 " \"title\": \"Episode 2\","
60 " \"resourceId\": {"
61 " \"kind\": \"youtube#video\","
62 " \"videoId\": \"vid002\""
63 " }"
64 " }}")))
66;; ---------------------------------------------------------------
67;; Playlist record tests
68;; ---------------------------------------------------------------
70(test-group "playlist records"
72 (test "playlist construction"
73 (let ((p (youtube-playlist id: "PL1" title: "My Playlist"
74 description: "A playlist"
75 item-count: 10
76 privacy-status: "unlisted")))
77 (assert-true (youtube-playlist? p))
78 (assert-equal "PL1" (youtube-playlist-id p))
79 (assert-equal "My Playlist" (youtube-playlist-title p))
80 (assert-equal "A playlist" (youtube-playlist-description p))
81 (assert-equal 10 (youtube-playlist-item-count p))
82 (assert-equal "unlisted" (youtube-playlist-privacy-status p))))
84 (test "playlist defaults"
85 (let ((p (youtube-playlist id: "PL2")))
86 (assert-equal "" (youtube-playlist-title p))
87 (assert-equal "" (youtube-playlist-description p))
88 (assert-equal 0 (youtube-playlist-item-count p))
89 (assert-equal "public" (youtube-playlist-privacy-status p)))))
91;; ---------------------------------------------------------------
92;; Playlist item record tests
93;; ---------------------------------------------------------------
95(test-group "playlist item records"
97 (test "playlist item construction"
98 (let ((item (youtube-playlist-item id: "ITEM1" video-id: "VID1"
99 title: "First" position: 0)))
100 (assert-true (youtube-playlist-item? item))
101 (assert-equal "ITEM1" (youtube-playlist-item-id item))
102 (assert-equal "VID1" (youtube-playlist-item-video-id item))
103 (assert-equal "First" (youtube-playlist-item-title item))
104 (assert-equal 0 (youtube-playlist-item-position item))))
106 (test "playlist item defaults"
107 (let ((item (youtube-playlist-item id: "ITEM2")))
108 (assert-equal "" (youtube-playlist-item-video-id item))
109 (assert-equal "" (youtube-playlist-item-title item))
110 (assert-equal 0 (youtube-playlist-item-position item)))))
112;; ---------------------------------------------------------------
113;; Playlist parsing tests
114;; ---------------------------------------------------------------
116(test-group "playlist parsing"
118 (test "parse full playlist"
119 (let ((p (parse-playlist playlist-resource-json)))
120 (assert-true (youtube-playlist? p))
121 (assert-equal "PLxxxxxx" (youtube-playlist-id p))
122 (assert-equal "Emacs From Scratch" (youtube-playlist-title p))
123 (assert-equal "Building an Emacs config from scratch"
124 (youtube-playlist-description p))
125 (assert-equal 15 (youtube-playlist-item-count p))
126 (assert-equal "public" (youtube-playlist-privacy-status p))))
128 (test "parse minimal playlist"
129 (let ((p (parse-playlist playlist-minimal-json)))
130 (assert-equal "PLyyyyyy" (youtube-playlist-id p))
131 (assert-equal "" (youtube-playlist-title p))
132 (assert-equal 0 (youtube-playlist-item-count p)))))
134;; ---------------------------------------------------------------
135;; Playlist item parsing tests
136;; ---------------------------------------------------------------
138(test-group "playlist item parsing"
140 (test "parse playlist item"
141 (let ((item (parse-playlist-item playlist-item-json)))
142 (assert-true (youtube-playlist-item? item))
143 (assert-equal "UExxxxxxxBBBB" (youtube-playlist-item-id item))
144 (assert-equal "vid001" (youtube-playlist-item-video-id item))
145 (assert-equal "Episode 1: Getting Started"
146 (youtube-playlist-item-title item))
147 (assert-equal 0 (youtube-playlist-item-position item))))
149 (test "parse playlist item without position"
150 (let ((item (parse-playlist-item playlist-item-no-position-json)))
151 (assert-equal "UExxxxxxxCCCC" (youtube-playlist-item-id item))
152 (assert-equal "vid002" (youtube-playlist-item-video-id item))
153 (assert-equal 0 (youtube-playlist-item-position item)))))
155(run-tests)