Booking (v1.11 / v1.12)
Manual and automated checks for milestone Booking v1.11: guest wizard
hand-off, reschedule picker behaviour, host notices, guest RSVP notice, grid
RSVP styling, event-form cancel/reschedule actions, and host delete freeing
the reservation. v1.12 adds the bare /meet landing page.
Scope
Use this guide to validate booking UX shipped in v1.11. Earlier booking
milestones stay covered in docs/features/booking.md and the existing
e2e/booking/ guest specs.
Setup
- Guest
/meetflows: runbun dev:weband the booking-web dev server (seedocs/development/local-development.md), or rely on Playwright's webServer fore2e/booking/. - Host calendar-web flows: signed-in stub specs use the anonymous dev app
with stubbed
/api/**(same pattern ase2e/attendees/). - Backend host delete: needs Mongo (
compass.yaml); usebun test:backendfor the reservation cancel on delete test.
Scenario 1: Guest wizard hands off to sign-up and resumes go-live
UX
A signed-out visitor who starts meeting setup from /?meetingSetup=1 can
finish on a computer: Settings closes before sign-up, the draft stays in local
storage, and after authentication Meeting settings reopen on the go-live step.
Proof
bun test:web apps/calendar-web/src/booking/useGuestMeetingSetupEntry.test.tsx apps/calendar-web/src/booking/BookingSettingsSection.guest-handoff.test.tsx
Pass when both files are green. On a computer, opening /?meetingSetup=1
shows Settings on the meeting wizard with meetingSetup cleared from the URL.
Scenario 2: Reschedule page hides the current slot and opens on the meeting day
UX
On /meet/reschedule/:id?token=…, the guest never sees a button for the slot
they already hold. The month grid selects the day of the existing meeting when
the URL has no date= param.
Proof
bunx playwright test e2e/booking/booking-reschedule-current-slot.spec.ts
bun test:web apps/booking-web/src/booking/PublicBookingReschedulePage.test.tsx
Pass when Playwright and unit tests are green. Manually, only alternate slots
appear in the time list and the meeting's day cell has aria-pressed="true".
Scenario 3: Host toasts for book, cancel, and reschedule
UX
While Compass is open, the host sees one toast when guests book, cancel, or reschedule (copy uses the host timezone). Several updates collapse to a count with a Latest line. Show jumps the week view to the meeting time.
Cancelled and rescheduled meetings are included. Only reservations that
predate the lastGuestActionAt cursor are skipped.
Proof
bun test:web apps/calendar-web/src/booking/useNewMeetingsNotice.test.tsx
bun test:backend packages/backend/src/booking/services/booking-page.service.db.test.ts
Pass when tests are green. With a backend and two browsers (host + guest),
cancel or reschedule a booking and confirm the host toast mentions
cancelled or moved a meeting to within a few seconds.
Scenario 4: Host toast when a guest replies (RSVP)
UX
When a guest accepts, declines, or replies maybe on an event the host organizes, one toast appears while a Compass tab is open. Replies that arrive while every tab is closed are not toasted (grid styling still reflects RSVP).
Proof
bun test:web apps/calendar-web/src/booking/useGuestRsvpNotice.test.tsx apps/calendar-web/src/booking/GuestRsvpToast.test.tsx
Pass when tests are green.
Scenario 5: Grid cards show guest reply state
UX
Booking-related (and other) events show RSVP at a glance: awaiting reply
(dashed outline, reduced opacity), tentative (dashed outline), all guests
declined (reduced opacity), with accessible name prefixes such as
Awaiting reply:.
Proof
bun test:web apps/calendar-web/src/grid/grid-event-card-chrome.test.ts apps/calendar-web/src/grid/components/EventCard.test.tsx
Pass when tests are green. On the week grid, open a meeting with mixed guest RSVPs and confirm card labels match the prefix rules.
Scenario 6: Event form Cancel meeting and Reschedule actions
UX
For a saved event whose description contains matching Compass cancel and reschedule anchors, the actions row shows Cancel meeting and Reschedule. Cancel requires a second press (Confirm cancel) and calls the public cancel API with the parsed token. Reschedule opens the guest reschedule URL in a new tab.
Proof
bunx playwright test e2e/booking/booking-event-form-actions.spec.ts
bun test:web apps/calendar-web/src/views/Forms/EventForm/FormActionsRow.test.tsx apps/calendar-web/src/booking/booking-event-links.test.ts
Pass when Playwright and unit tests are green.
Scenario 7: Host delete cancels the reservation
UX
When the host deletes a booked calendar event in Compass (single event,
scope this), the linked reservation becomes cancelled and the slot is
freed. Deletes made only in Google Calendar are out of scope.
Proof
bun test:backend packages/backend/src/booking/services/public-booking.service.db.test.ts -t "cancels a confirmed reservation when the host deletes"
Pass when that test is green.
Scenario 8: Bare /meet is a landing page
UX
/meet and /meet/ on booking-web render the Meeting landing page with one
page shell (one main, one footer), the tab title "Meeting pages - Compass",
and a Set up your meeting page link to /?meetingSetup=1. An unknown
/meet/* path still says "Page not found" with one footer and links to
/meet. Clicking the CTA in a fresh browser profile opens Settings > Meeting
on the setup wizard; signed in, it opens Settings > Meeting.
Proof
bun test:booking-web
bunx playwright test e2e/booking/meet-landing.spec.ts
Pass when both are green.
Accessibility
Changed v1.11 surfaces are covered by:
bunx playwright test e2e/accessibility/booking-a11y.spec.ts
Includes the public reschedule picker and the booked-meeting event form actions row.