events: whole-series booking + 9 tests
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 59s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 59s
ev/book-series! / ev/cancel-series! apply a booking/cancel to every occurrence of one event in a window (RSVP the whole weekly class), returning per- occurrence (occ-key status) results; capacity still enforced per occurrence (some :booked, some :full), idempotent re-book (:already). ev/series-count, ev/series-booked. 341/341 green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -319,6 +319,65 @@
|
||||
(ev/would-time-conflict? b store (quote zed) ob)
|
||||
false))))))
|
||||
|
||||
;; ---- whole-series booking ----
|
||||
(define
|
||||
ev-api-sr-run-all!
|
||||
(fn
|
||||
()
|
||||
(let
|
||||
((b (persist/open))
|
||||
(store
|
||||
(ev/schedule
|
||||
(ev/empty)
|
||||
(quote yoga)
|
||||
(ev-dt 2026 6 1 18 0)
|
||||
60
|
||||
{:freq :weekly :byday (list 0 2) :count 4}
|
||||
20))
|
||||
(ws (ev-date 2026 6 1))
|
||||
(we (ev-date 2026 7 1)))
|
||||
(do
|
||||
(let
|
||||
((res (ev/book-series! b store (quote nia) (quote yoga) ws we)))
|
||||
(do
|
||||
(ev-api-check! "series booking covers all four occurrences" (len res) 4)
|
||||
(ev-api-check! "all occurrences booked" (ev/series-count res :booked) 4)
|
||||
(ev-api-check!
|
||||
"actor is now booked into the whole series"
|
||||
(len (ev/series-booked b store (quote nia) (quote yoga) ws we))
|
||||
4)))
|
||||
;; re-booking the series is idempotent
|
||||
(ev-api-check!
|
||||
"re-booking the series is idempotent"
|
||||
(ev/series-count (ev/book-series! b store (quote nia) (quote yoga) ws we) :already)
|
||||
4)
|
||||
;; cancel the whole series
|
||||
(let
|
||||
((res (ev/cancel-series! b store (quote nia) (quote yoga) ws we)))
|
||||
(do
|
||||
(ev-api-check! "series cancel reports four cancellations" (ev/series-count res :cancelled) 4)
|
||||
(ev-api-check!
|
||||
"actor booked into nothing after series cancel"
|
||||
(len (ev/series-booked b store (quote nia) (quote yoga) ws we))
|
||||
0)))
|
||||
;; capacity interacts per-occurrence: fill one occurrence first
|
||||
(let
|
||||
((b2 (persist/open))
|
||||
(s2
|
||||
(ev/schedule (ev/empty) (quote clinic) (ev-dt 2026 6 1 9 0) 30 {:freq :daily :count 3} 1)))
|
||||
(do
|
||||
(ev/book-occ! b2 s2 (quote x) (ev-occ (quote clinic) (ev-dt 2026 6 2 9 0) 30))
|
||||
(let
|
||||
((res (ev/book-series! b2 s2 (quote nia) (quote clinic) (ev-date 2026 6 1) (ev-date 2026 6 10))))
|
||||
(do
|
||||
(ev-api-check! "series booking succeeds on free occurrences" (ev/series-count res :booked) 2)
|
||||
(ev-api-check! "series booking hits :full where capacity is taken" (ev/series-count res :full) 1)))))
|
||||
;; unknown event id
|
||||
(ev-api-check!
|
||||
"series booking an unknown event yields no results"
|
||||
(ev/book-series! b store (quote nia) (quote nope) ws we)
|
||||
(list))))))
|
||||
|
||||
(define
|
||||
ev-api-tests-run!
|
||||
(fn
|
||||
@@ -329,4 +388,5 @@
|
||||
(set! ev-api-failures (list))
|
||||
(ev-api-run-all!)
|
||||
(ev-api-cf-run-all!)
|
||||
(ev-api-sr-run-all!)
|
||||
{:failures ev-api-failures :total (+ ev-api-pass ev-api-fail) :passed ev-api-pass :failed ev-api-fail})))
|
||||
|
||||
Reference in New Issue
Block a user