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:
@@ -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")))))))
|
||||
|
||||
Reference in New Issue
Block a user