Add swap tests for newly unblocked handlers

7 new suites: inline-edit (edit/save/cancel cycle), row-editing
(form load + save), profile-editing (edit + put), tabs (content +
OOB buttons), loading-indicator (sleep + content), bulk-operations
(activate users), dedup-search. Total: 29 suites, 41 tests.

All example handlers now have swap integration coverage.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-01 18:26:57 +00:00
parent 714538f1b4
commit 5ab45c969c

View File

@@ -502,3 +502,145 @@
(do
(assert-true (contains? result "~anim-result"))
(assert-true (contains? result "12:00:00")))))))
(defsuite
"swap:inline-edit"
(deftest
"edit form loads current value"
(reset-mocks!)
(set! _mock-args {:value "Hello" :id "42"})
(let
((page "(div :id \"edit-target\" (span \"Hello\"))")
(response (run-handler handler:ex-edit-form)))
(let
((result (sx-swap page "innerHTML" "edit-target" response)))
(assert-true (contains? result "~examples/inline-edit-form")))))
(deftest
"save returns updated view"
(reset-mocks!)
(set! _mock-form {:value "Updated"})
(let
((page "(div :id \"edit-target\" (input))")
(response (run-handler handler:ex-edit-save)))
(let
((result (sx-swap page "innerHTML" "edit-target" response)))
(assert-true (contains? result "Updated")))))
(deftest
"cancel restores original"
(reset-mocks!)
(set! _mock-args {:value "Original" :id "42"})
(let
((page "(div :id \"edit-target\" (input))")
(response (run-handler handler:ex-edit-cancel)))
(let
((result (sx-swap page "innerHTML" "edit-target" response)))
(assert-true (contains? result "Original"))))))
(defsuite
"swap:row-editing"
(deftest
"form loads row data"
(reset-mocks!)
(set! _mock-args {:row-id "r1"})
(set! _mock-state {:ex-row-r1 {:stock "5" :id "r1" :price "$10" :name "Widget"}})
(let
((page "(tr :id \"row-r1\" (td \"Widget\"))")
(response (run-handler handler:ex-editrow-form)))
(let
((result (sx-swap page "outerHTML" "row-r1" response)))
(do
(assert-true (contains? result "~examples/edit-row-form"))
(assert-true (contains? result "Widget"))))))
(deftest
"save stores and returns view"
(reset-mocks!)
(set! _mock-form {:id "r1" :price "$20" :name "Gadget"})
(let
((page "(tr :id \"row-r1\" (input))")
(response (run-handler handler:ex-editrow-save)))
(let
((result (sx-swap page "outerHTML" "row-r1" response)))
(assert-true (contains? result "Gadget"))))))
(defsuite
"swap:profile-editing"
(deftest
"edit loads profile fields"
(reset-mocks!)
(set! _mock-state {:ex-profile {:email "ada@example.com" :role "Engineer" :name "Ada"}})
(let
((page "(div :id \"profile-target\" (p \"Ada\"))")
(response (run-handler handler:ex-pp-edit-all)))
(let
((result (sx-swap page "innerHTML" "profile-target" response)))
(assert-true (contains? result "~examples/pp-form-full")))))
(deftest
"put saves and returns view"
(reset-mocks!)
(set! _mock-form {:email "grace@example.com" :role "Captain" :name "Grace"})
(let
((page "(div :id \"profile-target\" (form))")
(response (run-handler handler:ex-pp-put)))
(let
((result (sx-swap page "innerHTML" "profile-target" response)))
(assert-true (contains? result "Grace"))))))
(defsuite
"swap:tabs"
(deftest
"returns tab content with OOB buttons"
(reset-mocks!)
(set! _mock-args {:tab "tab1"})
(let
((page "(div (div :id \"tab-content\" (p \"old\")) (div :id \"tab-buttons\" (button \"old\")))")
(response (run-handler handler:ex-tabs)))
(let
((result (apply-response page response "innerHTML" "tab-content")))
(do
(assert-true (contains? result "~examples/tab-btn"))
(assert-false (contains? result "\"old\"")))))))
(defsuite
"swap:loading-indicator"
(deftest
"slow handler returns content after mock sleep"
(reset-mocks!)
(let
((page "(div :id \"loading-result\" (p \"Loading...\"))")
(response (run-handler handler:ex-slow)))
(let
((result (sx-swap page "innerHTML" "loading-result" response)))
(do
(assert-true (contains? result "~examples/loading-result"))
(assert-true (contains? result "12:00:00"))
(assert-false (contains? result "Loading")))))))
(defsuite
"swap:bulk-operations"
(deftest
"activates selected users"
(reset-mocks!)
(set! _mock-args {:action "activate"})
(set! _mock-form {:ids (list "u1" "u2")})
(set! _mock-state {:ex-bulk-u2 {:status "inactive" :id "u2" :name "Bob"} :ex-bulk-u1 {:status "inactive" :id "u1" :name "Alice"}})
(let
((page "(tbody :id \"bulk-rows\" (tr \"old\"))")
(response (run-handler handler:ex-bulk)))
(let
((result (sx-swap page "innerHTML" "bulk-rows" response)))
(assert-true (contains? result "~examples/bulk-row"))))))
(defsuite
"swap:dedup-search"
(deftest
"returns search result"
(reset-mocks!)
(set! _mock-args {:q "test"})
(let
((page "(div :id \"search-result\" (p \"Searching...\"))")
(response (run-handler handler:ex-slow-search)))
(let
((result (sx-swap page "innerHTML" "search-result" response)))
(do
(assert-true (contains? result "~examples/sync-result"))
(assert-false (contains? result "Searching")))))))