From 601ee7d8abed9d03d1cb072e03c392dd556eebde Mon Sep 17 00:00:00 2001 From: giles Date: Wed, 1 Apr 2026 18:04:17 +0000 Subject: [PATCH] Add infinite-scroll swap integration test Three tests covering the beforeend pagination pattern: page 1 appends items with sentinel trigger, page 2 appends more, last page shows "All items loaded" without sentinel. Co-Authored-By: Claude Opus 4.6 (1M context) --- web/tests/test-swap-integration.sx | 42 ++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/web/tests/test-swap-integration.sx b/web/tests/test-swap-integration.sx index 7d780df7..ae83dffb 100644 --- a/web/tests/test-swap-integration.sx +++ b/web/tests/test-swap-integration.sx @@ -189,6 +189,48 @@ (assert-true (contains? result "first")) (assert-true (contains? result "second"))))))) +(defsuite + "swap:infinite-scroll" + (deftest + "page 1 appends items to container" + (reset-mocks!) + (set! _mock-args {:page "1"}) + (let + ((page "(div :id \"scroll-items\" (div \"Item 0 — seed\"))") + (response (run-handler handler:ex-scroll))) + (let + ((result (sx-swap page "beforeend" "scroll-items" response))) + (do + (assert-true (contains? result "Item 0")) + (assert-true (contains? result "Item 1")) + (assert-true (contains? result "page 1")) + (assert-true (contains? result "scroll-sentinel")))))) + (deftest + "page 2 appends more items" + (reset-mocks!) + (set! _mock-args {:page "2"}) + (let + ((page "(div :id \"scroll-items\" (div \"page 1 items\"))") + (response (run-handler handler:ex-scroll))) + (let + ((result (sx-swap page "beforeend" "scroll-items" response))) + (do + (assert-true (contains? result "page 1 items")) + (assert-true (contains? result "Item 6")) + (assert-true (contains? result "page 2")))))) + (deftest + "last page has no sentinel" + (reset-mocks!) + (set! _mock-args {:page "6"}) + (let + ((page "(div :id \"scroll-items\")") + (response (run-handler handler:ex-scroll))) + (let + ((result (sx-swap page "beforeend" "scroll-items" response))) + (do + (assert-true (contains? result "All items loaded")) + (assert-false (contains? result "scroll-sentinel"))))))) + (defsuite "swap:state-across-calls" (deftest