AtlatestRepositorysigil-oauth
sigil-oauth / tree / testsstore-test.sgl
1
;;; Tests for (sigil oauth store)3
(import (sigil core)4
(sigil test)5
(sigil dict)6
(sigil string)7
(sigil struct)8
(sigil json)9
(sigil io)10
(sigil fs)11
(sigil oauth)12
(sigil oauth store))14
;; Test helper15
(define (str-contains? haystack needle)16
(let ((hlen (string-length haystack))17
(nlen (string-length needle)))18
(if (> nlen hlen)19
#f20
(let loop ((i 0))21
(cond22
((> (+ i nlen) hlen) #f)23
((string=? (substring haystack i (+ i nlen)) needle) #t)24
(else (loop (+ i 1))))))))26
;; Use a temporary directory for test files27
(define test-dir "/tmp/sigil-oauth-test")28
(define test-file (string-append test-dir "/tokens.json"))30
;; Clean up before tests31
(define (cleanup-test-files)32
(if (file-exists? test-file)33
(delete-file test-file))34
(if (file-exists? test-dir)35
(delete-directory test-dir)))37
(cleanup-test-files)39
;; ---------------------------------------------------------------40
;; Token path41
;; ---------------------------------------------------------------43
(test-group "oauth-token-path"45
(test "builds path under ~/.config/sigil/"46
(let ((path (oauth-token-path "youtube")))47
(assert-true (str-contains? path ".config/sigil/youtube/tokens.json")))))49
;; ---------------------------------------------------------------50
;; Save and load round-trip51
;; ---------------------------------------------------------------53
(test-group "oauth-save-tokens and oauth-load-tokens"55
(test "save and load full token set"56
(let ((tokens (oauth-tokens57
access-token: "access-123"58
refresh-token: "refresh-456"59
expires-at: 171138240060
token-type: "Bearer"61
scopes: '("read" "write"))))62
(oauth-save-tokens "test" tokens test-file)63
(let ((loaded (oauth-load-tokens "test" test-file)))64
(assert-true (oauth-tokens? loaded))65
(assert-equal "access-123" (oauth-tokens-access-token loaded))66
(assert-equal "refresh-456" (oauth-tokens-refresh-token loaded))67
(assert-equal 1711382400 (oauth-tokens-expires-at loaded))68
(assert-equal "Bearer" (oauth-tokens-token-type loaded))69
(assert-equal '("read" "write") (oauth-tokens-scopes loaded)))))71
(test "save and load minimal token set"72
(let ((tokens (oauth-tokens access-token: "minimal-token")))73
(oauth-save-tokens "test" tokens test-file)74
(let ((loaded (oauth-load-tokens "test" test-file)))75
(assert-true (oauth-tokens? loaded))76
(assert-equal "minimal-token" (oauth-tokens-access-token loaded))77
(assert-equal #f (oauth-tokens-refresh-token loaded))78
(assert-equal #f (oauth-tokens-expires-at loaded)))))80
(test "load returns #f for missing file"81
(let ((result (oauth-load-tokens "test"82
"/tmp/sigil-oauth-test-nonexistent/tokens.json")))83
(assert-equal #f result)))85
(test "load returns #f for invalid JSON"86
(write-file-string test-file "not valid json {{")87
(let ((result (oauth-load-tokens "test" test-file)))88
(assert-equal #f result))))90
;; ---------------------------------------------------------------91
;; Clear tokens92
;; ---------------------------------------------------------------94
(test-group "oauth-clear-tokens"96
(test "deletes existing token file"97
(let ((tokens (oauth-tokens access-token: "to-delete")))98
(oauth-save-tokens "test" tokens test-file)99
(assert-true (file-exists? test-file))100
(let ((result (oauth-clear-tokens "test" test-file)))101
(assert-equal #t result)102
(assert-equal #f (file-exists? test-file)))))104
(test "returns #f for non-existent file"105
(let ((result (oauth-clear-tokens "test"106
"/tmp/sigil-oauth-nonexistent-clear.json")))107
(assert-equal #f result))))109
;; Final cleanup110
(cleanup-test-files)