Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 1m6s
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
84 lines
2.9 KiB
Plaintext
84 lines
2.9 KiB
Plaintext
;; lib/dream/tests/demos.sx — end-to-end demo apps exercising the full stack.
|
|
|
|
(define dream-dm-pass 0)
|
|
(define dream-dm-fail 0)
|
|
(define dream-dm-fails (list))
|
|
|
|
(define
|
|
dream-dm-test
|
|
(fn
|
|
(name actual expected)
|
|
(if
|
|
(= actual expected)
|
|
(set! dream-dm-pass (+ dream-dm-pass 1))
|
|
(begin
|
|
(set! dream-dm-fail (+ dream-dm-fail 1))
|
|
(append! dream-dm-fails {:name name :actual actual :expected expected})))))
|
|
|
|
(define
|
|
dream-dm-req
|
|
(fn (method target headers) (dream-request method target headers "")))
|
|
|
|
;; ── hello ──────────────────────────────────────────────────────────
|
|
(dream-dm-test
|
|
"hello root"
|
|
(dream-resp-body (dream-hello-app (dream-dm-req "GET" "/" {})))
|
|
"<h1>Hello, World!</h1>")
|
|
(dream-dm-test
|
|
"hello name"
|
|
(dream-resp-body
|
|
(dream-hello-app (dream-dm-req "GET" "/hello/Ada" {})))
|
|
"<h1>Hello, Ada!</h1>")
|
|
(dream-dm-test
|
|
"hello content-type"
|
|
(dream-resp-header
|
|
(dream-hello-app (dream-dm-req "GET" "/" {}))
|
|
"content-type")
|
|
"text/html; charset=utf-8")
|
|
|
|
;; ── counter (sessions) ─────────────────────────────────────────────
|
|
(define dream-dm-cbackend (dream-memory-sessions))
|
|
(define dream-dm-capp (dream-counter-app-with dream-dm-cbackend))
|
|
|
|
;; first visit: no cookie -> count 1, session cookie set
|
|
(define dream-dm-c1 (dream-dm-capp (dream-dm-req "GET" "/" {})))
|
|
(dream-dm-test
|
|
"counter first visit"
|
|
(dream-resp-body dream-dm-c1)
|
|
"<p>You have visited this page 1 time(s).</p>")
|
|
(dream-dm-test
|
|
"counter sets cookie"
|
|
(len (dream-resp-cookies dream-dm-c1))
|
|
1)
|
|
|
|
;; subsequent visits with the cookie increment
|
|
(dream-dm-test
|
|
"counter second visit"
|
|
(dream-resp-body (dream-dm-capp (dream-dm-req "GET" "/" {:Cookie "dream.session=s1"})))
|
|
"<p>You have visited this page 2 time(s).</p>")
|
|
(dream-dm-test
|
|
"counter third visit"
|
|
(dream-resp-body (dream-dm-capp (dream-dm-req "GET" "/" {:Cookie "dream.session=s1"})))
|
|
"<p>You have visited this page 3 time(s).</p>")
|
|
|
|
;; reset zeroes the counter then redirects
|
|
(define
|
|
dream-dm-reset
|
|
(dream-dm-capp (dream-dm-req "POST" "/reset" {:Cookie "dream.session=s1"})))
|
|
(dream-dm-test
|
|
"counter reset redirects"
|
|
(dream-status dream-dm-reset)
|
|
303)
|
|
(dream-dm-test
|
|
"counter after reset"
|
|
(dream-resp-body (dream-dm-capp (dream-dm-req "GET" "/" {:Cookie "dream.session=s1"})))
|
|
"<p>You have visited this page 1 time(s).</p>")
|
|
|
|
;; a different session is independent
|
|
(dream-dm-test
|
|
"counter distinct session"
|
|
(dream-resp-body (dream-dm-capp (dream-dm-req "GET" "/" {})))
|
|
"<p>You have visited this page 1 time(s).</p>")
|
|
|
|
(define dream-dm-tests-run! (fn () {:total (+ dream-dm-pass dream-dm-fail) :passed dream-dm-pass :failed dream-dm-fail :fails dream-dm-fails}))
|