✔ old business response is discarded when the active membership changes (1.395125ms)
✔ private calls carry business context but session discovery can detect another-tab switch (0.392208ms)
✔ failed write retains retry id, while an account switch clears it (3.072334ms)
✔ portal requests are independent of staff context changes (3.279ms)
✔ private image response is discarded across an account switch (0.654375ms)
✔ private image lease is revoked on context change and release is idempotent (1.066792ms)
✔ staff switch does not revoke a customer portal image (0.221583ms)
✔ upload retry identity includes bytes, not just endpoint (5.733708ms)
✔ opening another preview does not announce an account switch; login does (2.056833ms)
✔ private PDF arriving after a customer session switch is discarded before download (0.403125ms)
✔ private PDF uses business context and only downloads confirmed PDF responses (29.4575ms)
✔ customer CSV cannot download after an owner business switch (0.877875ms)
✔ customer CSV enforces type and downloads the safe filename with credentials and business scope (0.306958ms)
✔ Week and day navigation cross months, years and UK clocks without shifting dates (9.869208ms)
✔ Midnight endings are exclusive while all-day end dates are inclusive (0.091542ms)
✔ Repeated UK hour shows distinguishable summer and winter clock labels (50.64175ms)
✔ matching contacts never select identity; inactive records cannot be transfer choices (3.52725ms)
✔ confirmation uses the exact preview rather than later selection and preserves false acknowledgement (0.107666ms)
✔ export filter is encoded and completion rows contain only explicitly selected exact evidence (0.153958ms)
✔ fractional lines round half up in integer pence before subtotal and VAT (0.549459ms)
✔ percentage deposit rounds half up and leaves the exact remaining pence (0.420041ms)
✔ invalid deposit percentages and sub-penny deposits are rejected (0.823416ms)
✔ stage editing cannot silently drop or add a penny (0.223791ms)
✔ public permission defaults to no projection and no rating (1.322042ms)
✔ approved statement retains exact customer text (0.158709ms)
✔ approval requires explicit boolean and nonempty exact fields (0.218ms)
✔ projection bounds are enforced (0.116209ms)
✔ unconfirmed response does not produce a payload (0.112834ms)
✔ response keeps private answers separate from optional publication (0.103208ms)
✔ all four ratings and recommendation require a deliberate valid choice (0.143292ms)
✔ publication uses the exact current approved preview hash and version (0.084333ms)
✔ the repeated autumn hour requires the selected actual offset (56.183833ms)
✔ spring clock gap and seasonally incorrect offsets are rejected (1.000666ms)
✔ London date and intervals remain the same on a computer in another timezone (0.647375ms)
✔ incomplete, reversed and zero-duration correction inputs are rejected before saving (0.4275ms)
✔ customer price starts blank and no private source details become a document line (0.087958ms)
✔ timer display permits long captures but never negative elapsed time (0.078667ms)
✔ quoted commas, multiline text, escaped quotes, CRLF and blank lines (2.042958ms)
✔ auto mapping and preview require explicit valid prices; no NaN/default repairs (0.732667ms)
✔ column mapping, row limits, reviewed price overrides and invalid costs (1.240125ms)
✔ reopened saved rows and reordered object fields are clean (0.545292ms)
✔ equivalent valid price and quantity spellings do not create unsaved changes (1.349875ms)
✔ every catalogue edit is protected and reverting to saved values is clean (0.336458ms)
✔ blank optional prices, zero and invalid numeric input remain distinct (0.888333ms)
✔ job selection, purchasing dates, notes and applied previous-price values are protected (0.141459ms)
✔ supplier reference edits, additions and removals are protected (0.428083ms)
✔ catalogue selection and CSV mapping or programmatic overrides are protected (0.376541ms)
✔ a persisted changed price becomes a clean reopened baseline (0.091416ms)
✔ comparison pairs render before then after without changing stored order (1.884042ms)
✔ reorder preserves identity and bounds (0.199084ms)
✔ public drafts and selected photos start with fresh public text (2.630584ms)
✔ response binds to displayed version and saved snapshot with deliberate confirmation (0.83075ms)
✔ expired quote cannot produce a response payload (0.073417ms)
✔ superseded quote cannot produce a response payload (0.481625ms)
✔ draft quote cannot produce a response payload (0.044834ms)
✔ already accepted quote cannot produce a response payload (0.045125ms)
✔ declined quote cannot produce a response payload (0.036042ms)
✔ missing snapshot review is rejected (0.073166ms)
✔ PDF links remain private and scoped to exact document or stage (0.074708ms)
✔ feedback validation is request-only and valid checks never replace draft inputs (11.174542ms)
✔ contact, transfer and feedback changes revalidate without broadcasting codes or private answers (2.786583ms)
✔ feedback validation failure 401 clears only the request view (0.866333ms)
✔ feedback validation failure 404 clears only the request view (0.878541ms)
✔ feedback validation failure 503 clears only the request view (0.913208ms)
✔ feedback checks coalesce, time out closed and cannot revive a view with a late result (1.09125ms)
✔ stopped feedback checks ignore a late rejection and release all timers and listeners (0.892834ms)
✔ portal 401 clears private context and image leases, rejects old work and preserves staff access (1.916833ms)
✔ public credential errors and another customer document 404 do not end a valid portal context (0.802375ms)
✔ focus, visibility and visible periodic checks preserve a valid context without resetting forms (2.850458ms)
✔ owner revoke, reissue, contact update and legacy rotation revalidate without blindly signing out (6.461584ms)
✔ another-tab access notice checks the active account and clears it only when validation fails (6.223166ms)
✔ customer identity changes clear old content even if the browser cookie now authenticates successfully (1.243459ms)
✔ business identity changes clear old content even if the browser cookie now authenticates successfully (0.563375ms)
✔ unreachable validation fails closed and overlapping focus checks coalesce (0.775708ms)
✔ validation deadline clears content and a late successful response cannot restore it (0.737583ms)
✔ stopping a watcher removes its deadline and ignores a late successful identity result (1.131083ms)
✔ apiImage clears current portal content on 401 but an old response cannot clear a newer session (0.549416ms)
✔ downloadPrivate clears current portal content on 401 but an old response cannot clear a newer session (0.425833ms)
✔ switching between week and month rules keeps valid explicit choices (2.6295ms)
✔ all-day conversion clears incompatible clock inputs (0.221375ms)
✔ single visit proposal retains original identity and requires fresh acknowledgement (0.183167ms)
✔ booking edits send booleans and exclude server and history fields (0.254166ms)
✔ suggested window is inclusive and bounded through DST (0.191792ms)
✔ month views include leap days and cross-year navigation (0.405584ms)
✔ range rejects reversed or over-62-day windows (0.348416ms)
✔ weekly windows and DST remain London calendar dates (0.195166ms)
✔ excluded placeholder can propose a reviewed single-date override without assuming a booking (0.243709ms)
✔ new request, edited filter, context change and unmount reject late success and failure (0.70275ms)
✔ drills use exact customer/resource IDs and one metric, never matching names or allocating money (0.110625ms)
✔ supporting row pages disclose full totals and do not lose the final partial page (0.150542ms)
✔ exports bind applied filters and exact snapshot, not draft input; time displays exact minutes (1.0475ms)
✔ reordering is bounded, preserves identities and leaves the saved array untouched (0.653834ms)
✔ new page starts unpublished with independent editable content (1.930459ms)
✔ page and service routes resolve exactly and links retain the business prefix (0.102958ms)
✔ light and dark branding retain a contrasting button text colour (0.092333ms)
✔ ready reviews exclude closed, snoozed and ineligible history (0.459042ms)
✔ snooze expiry uses the server effective state (0.08125ms)
✔ only preparation writes a draft and only snooze writes its date (0.087667ms)
✔ review confirmation is not inferred from a filled draft (0.643959ms)
✔ tag input retains duplicates for server validation (0.377625ms)
✔ all established workspace labels remain reachable alongside new sections (0.07425ms)
ℹ tests 101
ℹ suites 0
ℹ pass 101
ℹ fail 0
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 243.084584
