AtlatestRepositorysigil-oauth

sigil-oauth / tree / testsstore-test.sgl

1;;; Tests for (sigil oauth store)
2
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 helper
15(define (str-contains? haystack needle)
16 (let ((hlen (string-length haystack))
17 (nlen (string-length needle)))
18 (if (> nlen hlen)
19 #f
20 (let loop ((i 0))
21 (cond
22 ((> (+ 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 files
27(define test-dir "/tmp/sigil-oauth-test")
28(define test-file (string-append test-dir "/tokens.json"))
30;; Clean up before tests
31(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 path
41;; ---------------------------------------------------------------
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-trip
51;; ---------------------------------------------------------------
53(test-group "oauth-save-tokens and oauth-load-tokens"
55 (test "save and load full token set"
56 (let ((tokens (oauth-tokens
57 access-token: "access-123"
58 refresh-token: "refresh-456"
59 expires-at: 1711382400
60 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 tokens
92;; ---------------------------------------------------------------
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 cleanup
110(cleanup-test-files)