Files
rose-ash/spec/tests/test-handlers.sx
giles 174260df93 Add request primitive tests (17 passing) + test runner support
Request primitives (now, state-get/set!/clear!, request-form/arg,
into, request-headers-all, etc.) added to test runner environment.
17 new tests covering all primitives with round-trip, default value,
and type assertion checks.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 00:57:57 +00:00

80 lines
2.5 KiB
Plaintext

(defsuite
"request-primitives"
(deftest
"now returns a string"
(let
((result (now)))
(assert-type "string" result)
(assert-true (> (len result) 5))))
(deftest
"now with format returns time"
(let
((result (now "%H:%M:%S")))
(assert-type "string" result)
(assert-true (contains? result ":"))))
(deftest
"state-get returns default for missing key"
(assert-equal 42 (state-get "test-nonexistent-key-xyz" 42)))
(deftest
"state-set! and state-get round-trip"
(state-set! "test-rt-abc" "hello")
(assert-equal "hello" (state-get "test-rt-abc" nil))
(state-clear! "test-rt-abc"))
(deftest
"state-set! overwrites previous value"
(state-set! "test-ow-abc" "first")
(state-set! "test-ow-abc" "second")
(assert-equal "second" (state-get "test-ow-abc" nil))
(state-clear! "test-ow-abc"))
(deftest
"state-clear! removes key"
(state-set! "test-cl-abc" "value")
(state-clear! "test-cl-abc")
(assert-nil (state-get "test-cl-abc" nil)))
(deftest
"request-method returns string"
(assert-type "string" (request-method)))
(deftest
"request-arg returns default for missing param"
(assert-nil (request-arg "nonexistent-param-xyz")))
(deftest
"request-form returns default for empty body"
(assert-equal "" (request-form "nonexistent-field-xyz")))
(deftest
"request-form with custom default"
(assert-equal "fallback" (request-form "missing-xyz" "fallback")))
(deftest
"into list converts dict to pairs"
(let
((d {:b 2 :a 1}) (result (into "list" d)))
(assert-type "list" result)
(assert-equal 2 (len result))))
(deftest
"into dict converts pairs to dict"
(let
((pairs (list (list "x" 1) (list "y" 2)))
(result (into "dict" pairs)))
(assert-type "dict" result)
(assert-equal 1 (get result "x"))
(assert-equal 2 (get result "y"))))
(deftest
"into round-trips dict→list→dict"
(let
((original {:age 36 :name "Ada"})
(as-list (into "list" original))
(back (into "dict" as-list)))
(assert-equal "Ada" (get back "name"))
(assert-equal 36 (get back "age"))))
(deftest
"request-headers-all returns dict"
(assert-type "dict" (request-headers-all)))
(deftest
"request-form-all returns dict"
(assert-type "dict" (request-form-all)))
(deftest
"request-args-all returns dict"
(assert-type "dict" (request-args-all)))
(deftest
"request-content-type returns string"
(assert-type "string" (request-content-type))))