;; lib/host/tests/handler.sx — host JSON envelope + request-reading helpers. (define host-hd-pass 0) (define host-hd-fail 0) (define host-hd-fails (list)) (define host-hd-test (fn (name actual expected) (if (= actual expected) (set! host-hd-pass (+ host-hd-pass 1)) (begin (set! host-hd-fail (+ host-hd-fail 1)) (append! host-hd-fails {:name name :actual actual :expected expected}))))) ;; ── host/ok ──────────────────────────────────────────────────────── (host-hd-test "ok status 200" (dream-status (host/ok "x")) 200) (host-hd-test "ok content-type sx" (dream-resp-header (host/ok "x") "content-type") "text/sx; charset=utf-8") (host-hd-test "ok envelope ok:true" (contains? (dream-resp-body (host/ok "x")) ":ok true") true) (host-hd-test "ok envelope carries data" (contains? (dream-resp-body (host/ok "hi")) ":data \"hi\"") true) ;; ── host/ok-status ───────────────────────────────────────────────── (host-hd-test "ok-status custom" (dream-status (host/ok-status 201 "y")) 201) (host-hd-test "ok-status data" (contains? (dream-resp-body (host/ok-status 201 "y")) ":data \"y\"") true) ;; ── host/error ───────────────────────────────────────────────────── (host-hd-test "error status" (dream-status (host/error 404 "nope")) 404) (host-hd-test "error ok:false" (contains? (dream-resp-body (host/error 404 "nope")) ":ok false") true) (host-hd-test "error message" (contains? (dream-resp-body (host/error 404 "nope")) ":error \"nope\"") true) (host-hd-test "error content-type sx" (dream-resp-header (host/error 500 "boom") "content-type") "text/sx; charset=utf-8") ;; ── host/sx-status ───────────────────────────────────────────────── (host-hd-test "sx-status arbitrary status" (dream-status (host/sx-status 418 {:a 1})) 418) (host-hd-test "sx-status serializes body" (contains? (dream-resp-body (host/sx-status 200 {:a 1})) ":a 1") true) ;; ── host/query-int ───────────────────────────────────────────────── (define host-hd-req (fn (target) (dream-request "GET" target {} ""))) (host-hd-test "query-int present" (host/query-int (host-hd-req "/x?limit=5") "limit" 10) 5) (host-hd-test "query-int absent -> fallback" (host/query-int (host-hd-req "/x") "limit" 10) 10) (define host-hd-tests-run! (fn () {:total (+ host-hd-pass host-hd-fail) :passed host-hd-pass :failed host-hd-fail :fails host-hd-fails}))