AtlatestRepositorysigil-youtube
sigil-youtube / tree / testplaylist-test.sgl
1
;;; Tests for (youtube playlist) — playlist module2
;;;3
;;; Tests record construction and JSON parsing with fixture data.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 fixtures16
;; ---------------------------------------------------------------18
(define playlist-resource-json19
(json-decode20
(string-append21
"{\"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-json34
(json-decode35
(string-append36
"{\"id\": \"PLyyyyyy\","37
" \"snippet\": {},"38
" \"contentDetails\": {},"39
" \"status\": {}}")))41
(define playlist-item-json42
(json-decode43
(string-append44
"{\"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-json55
(json-decode56
(string-append57
"{\"id\": \"UExxxxxxxCCCC\","58
" \"snippet\": {"59
" \"title\": \"Episode 2\","60
" \"resourceId\": {"61
" \"kind\": \"youtube#video\","62
" \"videoId\": \"vid002\""63
" }"64
" }}")))66
;; ---------------------------------------------------------------67
;; Playlist record tests68
;; ---------------------------------------------------------------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: 1076
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 tests93
;; ---------------------------------------------------------------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 tests114
;; ---------------------------------------------------------------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 tests136
;; ---------------------------------------------------------------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)