Pax acceptance run

Run e2e-20260917-uc8ydh Target https://paxpsychology.dev Branch redesign-ui-kits Commit 9972c61 Started 2026-09-17 05:18:25 UTC Duration 9m 12s
84
Cases
61
Passed
13
Failed
5
Manual
3
Retired
0
Not automated
2
Skipped

Client

36 cases23 passed 10 failed 2 manual 1 other

1A. Marketing & Public Pages

3 passed 2 failed 1 other
FailedTC-C-01Homepage loads correctly9.3s
  1. 1. Navigate to https://paxpsychology.dev/
  2. 2. Scroll through the full page
  3. Notes. At 375px the nav collapses to a hamburger whose panel adds Contact — failed
Error: expect(locator).toBeVisible() failed

Locator: getByRole('button', { name: 'Close menu' })
Expected: visible
Timeout: 5000ms
Error: element(s) not found

Call log:
  - Expect "toBeVisible" with timeout 5000ms
  - waiting for getByRole('button', { name: 'Close menu' })
Screenshot for TC-C-01
PassedTC-C-02Navigate to Our Story page3.1s
  1. 1. Navigate to https://paxpsychology.dev/our-story
Screenshot for TC-C-02
PassedTC-C-03Navigate to For Business page2.2s
  1. 1. Navigate to https://paxpsychology.dev/for-business
  2. 2. Click “Enter” with the code field empty
  3. 3. Type any code and click “Enter”
Screenshot for TC-C-03
FailedTC-C-04Navigate to Contact page13.9s
  1. 1. Navigate to https://paxpsychology.dev/contact
  2. 2. Click “Submit” with the form empty, and check the validation messages — failed
Error: expect(locator).toBeVisible() failed

Locator: getByText('Name must be at least 2 characters')
Expected: visible
Timeout: 10000ms
Error: element(s) not found

Call log:
  - Expect "toBeVisible" with timeout 10000ms
  - waiting for getByText('Name must be at least 2 characters')
Screenshot for TC-C-04
PassedTC-C-05Privacy Policy and Terms of Use pages load2.9s
  1. 1. Navigate to https://paxpsychology.dev/privacy-policy
  2. 2. Navigate to https://paxpsychology.dev/terms-of-use
Screenshot for TC-C-05
RetiredTC-C-06Newsletter signup from homepage footer

Retired by the 2026-09-03 script revision: the homepage and footer no longer contain a newsletter form. The only signup on the site is the strip at the foot of /journal, covered by TC-C-27.

1B. Find Your Match (6-step wizard)

2 passed 1 failed
FailedTC-C-07Complete the full match wizard35.9s
  1. 1. Navigate to https://paxpsychology.dev/onboarding
  2. 2. Confirm the chrome: brand link, “Step 1 of 6” counter, ochre progress bar and “Save & exit”
  3. 3. Step 1 — focus. Select a chip; “Continue” is disabled until one is chosen
  4. 4. Step 2 — story. Type a sentence, then click “Continue”
  5. 5. Step 3 — availability. Pick a chip, then click “See my matches”
  6. 6. Step 4 — shortlist. Pick a psychologist, then click “Pick a session time”
  7. 7. Step 5 — time slot. Pick a day and a slot, then “Continue to details”
  8. 8. Step 6 — details + payment. Fill the details and save the card — failed
Error: expect(locator).toBeVisible() failed

Locator: getByText(/Nothing comes out today — your card['’]s saved securely and only charged after your session happens\./)
Expected: visible
Timeout: 30000ms
Error: element(s) not found

Call log:
  - Expect "toBeVisible" with timeout 30000ms
  - waiting for getByText(/Nothing comes out today — your card['’]s saved securely and only charged after your session happens\./)
Screenshot for TC-C-07
PassedTC-C-08Match wizard progress persistence4.9s
  1. 1. Navigate to https://paxpsychology.dev/onboarding
  2. 2. Complete step 1 (focus) and step 2 (story), and land on step 3 (availability)
  3. 3. Close the tab, then reopen https://paxpsychology.dev/onboarding
  4. 4. Repeat, but get as far as step 4 (shortlist) before closing — only steps 1–3 persist
Screenshot for TC-C-08
PassedTC-C-08aEmail validation on the details step (new)4.1s
  1. Precondition. Reach step 6 of the wizard
  2. 1. Type `notanemail` into “Email” then click elsewhere (blur the field)
  3. 2. Correct it to a valid address — the error updates live on each keystroke
Screenshot for TC-C-08a

1C. Psychologist Directory

1 passed 1 failed
PassedTC-C-09Browse the directory and use the desktop filters15.0s
  1. 1. Navigate to /psychologists on a desktop-width window
  2. 2. Confirm the eyebrow “The marketplace” and H1 “Find a psychologist who gets you.”
  3. 3. Search using the box — try a psychologist’s name, then a location
  4. 4. In the left sidebar, tick a “Location” checkbox
  5. 5. Choose a “Psychologist’s gender” radio option
  6. 6. Select a chip under “What’s up”
  7. 7. Toggle “Taking clients now”
  8. 8. Change the sort dropdown from “Best match” to “Lowest rate”
  9. 9. Click “Clear all” in the pill row above the results
Screenshot for TC-C-09
FailedTC-C-10View an individual psychologist profile page8.3s
  1. 1. From /psychologists, click a psychologist['’]s name and then “Full profile” — failed
  2. An unknown username returns a real 404
Error: expect(locator).toHaveCount(expected) failed

Locator:  locator('dialog[open]')
Expected: 0
Received: 1
Timeout:  5000ms

Call log:
  - Expect "soft toHaveCount" with timeout 5000ms
  - waiting for locator('dialog[open]')
    14 × locator resolved to 1 element
       - unexpected value "1"
Screenshot for TC-C-10

1D. Authentication

4 passed 2 manual
PassedTC-C-11Login with email/password2.5s
  1. 1. Navigate to https://paxpsychology.dev/auth/login
  2. 2. Check the page copy
  3. 3. Enter client@paxpsychology.dev and Test123!
  4. 4. Click “Sign in”
Screenshot for TC-C-11
ManualTC-C-12Login with Google OAuth

Google's hosted consent screen cannot be driven from Playwright (bot detection plus a real Google account and 2FA). Verify by hand: /auth/login → “Continue with Google” → land on /dashboard.

ManualTC-C-13Login with Microsoft OAuth

Microsoft Entra's hosted sign-in cannot be driven from Playwright (bot detection plus a real tenant account). Verify by hand: /auth/login → “Continue with Microsoft” → land on /dashboard.

PassedTC-C-14Forgot password flow5.2s
  1. 1. From /auth/login, click “Forgot?” to reach /auth/forgot-password
  2. 2. Enter the account email and click “Send reset link”
  3. 3–5. MANUAL: open the reset email, follow the link, set a new password and sign in with it
  4. 6. Separately, open /auth/reset-password with no ?token
Screenshot for TC-C-14
PassedTC-C-15Login with invalid credentials2.2s
  1. 1. Navigate to https://paxpsychology.dev/auth/login
  2. 2. Enter invalid@example.com / wrongpassword and click “Sign in”
Screenshot for TC-C-15
PassedTC-C-16Sign out6.2s
  1. 1. From any dashboard page, click the user chip at the bottom of the left sidebar
  2. 2. Confirm the menu contains “Settings” and “Sign out”
  3. 3. Click “Sign out”
  4. 4. Log back in, then use the “Sign out” button in the red “Account” panel of Settings › Account
Screenshot for TC-C-16

1E. Booking Flow

2 passed 1 failed
FailedTC-C-17Complete a full booking (card saved, charged later)47.4s
  1. 1. From a psychologist profile click “Book a session” to reach /book/[username]/[appointmentName]
  2. 2. Step “Select Time”: pick a date, then a slot under “Available times for …”
  3. 3. Step “Your Info”: fill the form, tick both consents and click “Continue to Payment”
  4. 4. Step “Payment”: read the callouts, enter 4242 4242 4242 4242 and click “Confirm Booking - $<amount>” — failed
Error: expect(locator).toBeVisible() failed

Locator: getByText('Payment Details')
Expected: visible
Timeout: 40000ms
Error: element(s) not found

Call log:
  - Expect "toBeVisible" with timeout 40000ms
  - waiting for getByText('Payment Details')
Screenshot for TC-C-17
PassedTC-C-18Booking as a signed-in client (Review Info step)15.4s
  1. 1. Go to a booking page and select a date and time
  2. 2. Continue
  3. Saved cards are offered under “Payment Method”, with the default one marked “Default”
  4. Housekeeping: cancel the booking from the client Sessions list
Screenshot for TC-C-18
PassedTC-C-19Booking information validation4.5s
  1. 1. Go to a booking page and select a date and time
  2. 2. On “Your Info” leave every field empty and click “Continue to Payment”
  3. 3. Scroll up and note where the page has moved you
  4. 4. Enter `notanemail` in “Your Email” and blur the field
  5. 5. Fill the text fields correctly but leave the checkboxes unticked, and submit again
Screenshot for TC-C-19

1F. Client Portal

5 passed 3 failed
PassedTC-C-20Client Home3.5s
  1. 1. Navigate to https://paxpsychology.dev/dashboard
  2. Sidebar nav: Home · Sessions · Journal, then Care and Account groups
  3. Greeting, “Next session” hero, mood check-in, “This week” and “Past sessions”
Screenshot for TC-C-20
PassedTC-C-21Sessions list (Upcoming / Past)4.4s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/appointments
  2. 2. Confirm the “Upcoming” tab is selected, then click “Past”
  3. 3. Click a session title
Screenshot for TC-C-21
FailedTC-C-35Reschedule and cancel from the Sessions list35.5s
  1. 1. On /dashboard/appointments, find the session more than 24 hours out
  2. 2. Confirm both “Reschedule” and “Cancel session” buttons are present
  3. 3. Click “Reschedule”, pick a new date and time, and confirm — failed
Error: expect(locator).toHaveCount(expected) failed

Locator:  locator('dialog[open]')
Expected: 1
Received: 0
Timeout:  15000ms

Call log:
  - Expect "soft toHaveCount" with timeout 15000ms
  - waiting for locator('dialog[open]')
    34 × locator resolved to 0 elements
       - unexpected value "0"
Screenshot for TC-C-35
PassedTC-C-22View appointment detail (client)5.2s
  1. 1. From Sessions, click a session title to open /dashboard/appointments/[appointmentId]
Screenshot for TC-C-22
FailedTC-C-23Cancel an upcoming appointment15.3s
  1. Precondition. Book a session more than 24 hours out to cancel
  2. 1. Click “Cancel session” on the Sessions list
  3. 2. In the dialog, check the title and body copy — failed
  4. 3. Optionally enter a reason
  5. 4. Click “Cancel Appointment”
Error: expect(locator).toBeVisible() failed

Locator: locator('dialog[open][role=\'alertdialog\']').getByText(/Are you sure you want to cancel the .+ appointment with .+ on \w+, \w+ \d{1,2}, \d{4}\?/)
Expected: visible
Timeout: 5000ms
Error: element(s) not found

Call log:
  - Expect "soft toBeVisible" with timeout 5000ms
  - waiting for locator('dialog[open][role=\'alertdialog\']').getByText(/Are you sure you want to cancel the .+ appointment with .+ on \w+, \w+ \d{1,2}, \d{4}\?/)
Screenshot for TC-C-23
PassedTC-C-24Receipts (client invoices)7.1s
  1. 1. Navigate directly to https://paxpsychology.dev/dashboard/invoices
  2. 2. Go to /dashboard/appointments, open the “Past” tab, and click “Receipt”
  3. 3. On the receipt page, click “Download Receipt”
Screenshot for TC-C-24
PassedTC-C-25Client settings — Account6.5s
  1. 1. Navigate to /dashboard/settings?section=account
  2. 2. Confirm the section nav and the fields
  3. 3. Change “Full name” to `Updated Test Client` and click “Save changes”
  4. 4. Reload the page — the new name persists
  5. Housekeeping: restore the seeded client's name
Screenshot for TC-C-25
FailedTC-C-26Client settings — Payment methods and Medicare18.8s
  1. 1. Navigate to /dashboard/settings?section=payment-methods
  2. 2. Click “+ Add payment method”, enter 4242 4242 4242 4242 / 12/30 / 123 and click “Save card”
  3. 3. Click “Make default” on the new card
  4. 4. Click “Remove” on the non-default card and confirm
  5. 5. Scroll to the “Medicare” panel, enter a Medicare card number and IRN, and save — failed
Error: the Medicare panel's "Save changes" is covered by another element and cannot be clicked

expect(received).toBe(expected) // Object.is equality

Expected: true
Received: false
Screenshot for TC-C-26

1G. New public surfaces

4 passed 2 failed
FailedTC-C-27Journal index, article and newsletter signup7.2s
  1. 1. Navigate to https://paxpsychology.dev/journal
  2. 2. Click a category chip, then click “All”
  3. 3. Open an article
  4. 4. Scroll to the newsletter strip and subscribe
  5. 5. Try again with `notanemail` — failed
Error: locator.scrollIntoViewIfNeeded: Error: strict mode violation: locator('#newsletter-email') resolved to 2 elements:
    1) <input type="email" name="email" id="newsletter-email" placeholder="you@email.com" class="text-paper placeholder:text-paper/50 focus:border-paper/60 ease-pax min-w-[240px] rounded-[10px] border bg-[rgba(250,248,243,0.06)] px-4 py-3 text-[15px] transition-colors duration-150 focus:outline-none border-paper/25"/> aka getByRole('textbox', { name: 'Email Email' })
    2) <input type="email" name="email" id="newsletter-email" placeholder="you@email.com" class="text-paper placeholder:text-paper/50 focus:border-paper/60 ease-pax min-w-[240px] rounded-[10px] border bg-[rgba(250,248,243,0.06)] px-4 py-3 text-[15px] transition-colors duration-150 focus:outline-none border-paper/25"/> aka getByPlaceholder('you@email.com').nth(1)

Call log:
  - waiting for locator('#newsletter-email')
Screenshot for TC-C-27
FailedTC-C-28Newsletter unsubscribe28.0s
  1. 1. Open the unsubscribe link — failed
Error: expect(locator).toBeVisible() failed

Locator: getByRole('heading', { name: /You['’]re off the list\./ }).first()
Expected: visible
Timeout: 25000ms
Error: element(s) not found

Call log:
  - Expect "toBeVisible" with timeout 25000ms
  - waiting for getByRole('heading', { name: /You['’]re off the list\./ }).first()
Screenshot for TC-C-28
PassedTC-C-29For Psychologists landing page (new)3.6s
  1. 1. Navigate to https://paxpsychology.dev/for-psychs
  2. 2. Click “Apply to join”
Screenshot for TC-C-29
PassedTC-C-30Mobile filters drawer on the directory (new)6.5s
  1. 1. Navigate to /psychologists at 375px width
  2. 2. Confirm the desktop sidebar is hidden and a “Filters” button sits next to the sort dropdown
  3. 3. Tap “Filters”
  4. 4. Apply a couple of filters inside the drawer
  5. 5. Tap the button at the foot of the drawer
  6. 6. Widen the window past 768px — the drawer auto-closes and the sidebar reappears
Screenshot for TC-C-30
PassedTC-C-31FAQs page3.0s
  1. 1. Navigate to https://paxpsychology.dev/faqs
  2. 2. Expand several questions
Screenshot for TC-C-31
PassedTC-C-32Error pages2.4s
  1. 1. Navigate to https://paxpsychology.dev/this-page-does-not-exist
  2. 2. Navigate to /psychologists/definitely-not-a-real-username
Screenshot for TC-C-32

1H. Other new surfaces

2 passed
PassedTC-C-33Your psychologist and Reading list (new client Care pages)5.4s
  1. 1. Click “Your psychologist” in the sidebar
  2. 2. Click “Reading list”
  3. 3. Open a reading and mark it read
Screenshot for TC-C-33
PassedTC-C-34Self-serve registration7.0s
  1. 1. Navigate to https://paxpsychology.dev/auth/register
  2. 2. Fill “First name”, “Email” and “Password”, tick the terms checkbox and click “Create account”
  3. 3. Follow the flow to /auth/check-email and use the resend control
  4. 4. MANUAL: open the verification email and follow the link
Screenshot for TC-C-34

Psychologist

27 cases20 passed 2 failed 3 manual 2 other

2A. Onboarding

4 passed 1 manual
ManualTC-P-01Connect the Stripe Connect payout account3.6s

Steps 4–5 leave Pax: 'Connect with Stripe' hands off to Stripe's hosted Connect onboarding (a stripe.com form with identity and bank details) and returns via an OAuth-style callback. Nothing on that hop can be automated, and completing it would burn the shared `test2@` fixture's 'payouts not set up' state that other cases rely on. Everything Pax itself renders — the banner, the sidebar alert, the Stripe Connect card and its CTA — is checked below; a reviewer only needs to eyeball the hosted form and the post-connect 'Connected' badge (see TC-P-20).

  1. 1. Navigate to https://paxpsychology.dev/dashboard
  2. 2. Note the payout banner and click its CTA
  3. 3. On /dashboard/settings?section=payouts, read the Stripe Connect card
  4. 4. Click "Connect with Stripe" and complete the Stripe-hosted onboarding — MANUAL
  5. 5. Return to Pax — MANUAL
Screenshot for TC-P-01
PassedTC-P-02Complete profile / account details5.8s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/settings?section=account
  2. 2. Upload a profile picture, change "Full name", click "Save changes"
  3. 3. Switch to ?section=registration and fill the professional fields
  4. 4. Open /dashboard/listing and check the public-facing profile editor
  5. Notes: /dashboard/settings/profile 307-redirects to ?section=account
Screenshot for TC-P-02
PassedTC-P-03Set weekly availability6.0s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/appointments
  2. 2. Click the "Availability" button in the page header
  3. 3. In the modal, switch Monday on and set "From" 09:00 and "To" 17:00
  4. 4. Switch Saturday off
  5. 5. Click "Save availability"
  6. 6. Deliberately set an invalid combination (From later than To) and save again to see the error
  7. Restore the original weekly hours
Screenshot for TC-P-03
PassedTC-P-04Block out time (time off)19.4s
  1. 1. On /dashboard/appointments, click "Block time"
  2. 2. Pick a reason chip, page forward a week, pick a day, set "From" and "To", add a note
  3. 3. Click "Block time"
  4. 4. Repeat over a slot that already has a booking, and read the warning
  5. 5. Try the "Repeat weekly" switch
  6. 6. Delete the block from Settings › Availability › Time off
Screenshot for TC-P-04
PassedTC-P-05Create a session type7.1s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/settings?section=appointment-types
  2. 2. Click "Add session type"
  3. 3. Fill the form: Title, Url, Description, Duration, Video Call Provider, Schedule Fee
  4. 4. Click "Add appointment type"
  5. The new type is bookable at the generated URL
Screenshot for TC-P-05

2B. Dashboard

2 passed
PassedTC-P-06Psychologist Today page3.1s
  1. 1. Navigate to https://paxpsychology.dev/dashboard
  2. Sidebar: Today, Schedule, Clients, New clients, Earnings, then Practice › Your listing, Settings
  3. H1 greeting with the sessions / requests / notes sub-line, and the Block time + Schedule buttons
  4. Four KPI cards: "Today", "This week", "New requests", "Notes to write"
  5. Two-column row: "Today, <Weekday D Month>" with "Full schedule →", and "New clients" with "All →"
  6. Full-width "Worth a look" panel with a "Clients →" link
  7. Notes: the old earnings cards, chart, weekly schedule block and Quick Actions are gone
Screenshot for TC-P-06
PassedTC-P-07Pending completions alert3.0s
  1. 1. Navigate to https://paxpsychology.dev/dashboard
  2. The alert is headed "<n> sessions need completion" and names when the oldest was
  3. 2. Click "Review sessions"
Screenshot for TC-P-07

2C. Schedule and Appointments

6 passed 1 other
PassedTC-P-08Schedule views9.0s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/appointments
  2. 2. Switch between the "Day", "Week" and "Month" segments
  3. 3. Use the previous / next arrows and the "Today" button
  4. The legend reads "Video", "Intake", "Blocked"
  5. 4. Click an appointment
Screenshot for TC-P-08
PassedTC-P-09Appointment detail (psychologist)12.8s
  1. 1. Open /dashboard/appointments/[appointmentId]
  2. Back link, H1 "Session with <ClientFirstName>", meta line and status pill
  3. Panel "Session details" with Date, Time, Length, Session type, Format and the Client block
  4. The referring GP is read from the client profile, with clinic and provider number
  5. An "Actions" card with the applicable buttons, plus "View client profile"
  6. "Payout details" panel, a session-notes button and a "Documents" card
Screenshot for TC-P-09
PassedTC-P-10Complete an appointment (client attended)1m 11s
  1. Find a CONFIRMED session whose end time has passed and whose client has a saved card
  2. 1. Open the appointment detail page and click "Complete appointment"
  3. 2. Step 1 — Session Attendance. Choose "Client Attended", then "Continue"
  4. 3. Step 2 — Session Notes. Type notes in the textarea, then "Continue"
  5. 4. Step 3 — Documents. Optionally attach a file, then "Continue" (or "Skip")
  6. 5. Step 4 — Complete Session. Review the summary and click "Complete & Capture Payment"
  7. The status becomes Completed and an invoice is raised
Screenshot for TC-P-10
PassedTC-P-11Mark an appointment as No-Show1m 8s
  1. Find another CONFIRMED session whose end time has passed, with a card on file
  2. 1. Click "Complete appointment"
  3. 2. Choose "No-Show" and read the warning, then click "Continue"
  4. 3. On the confirm step, click "Confirm No-Show"
  5. The client is charged and notified, and the session reads No Show
Screenshot for TC-P-11
SkippedTC-P-27Complete an appointment for a client with no saved card (new)1m 49s

No completable session without a card on file

  1. Find a past CONFIRMED session whose client has no payment method on file — failed
Screenshot for TC-P-27
PassedTC-P-12Reschedule an appointment9.0s
  1. Find an upcoming CONFIRMED appointment to reschedule
  2. 1. On the appointment detail page, click "Reschedule"
  3. 2. Pick a new date under "Select New Date", wait for slots, and pick one under "Select New Time"
  4. 3. Click "Confirm Reschedule"
Screenshot for TC-P-12
PassedTC-P-13Session Notes workspace6.1s
  1. Open a completed appointment
  2. 1. Click "Write session notes" (or "Edit session notes" if notes already exist)
  3. 2. Choose a template, type notes, add a note to the client and assign a reading
  4. 3. Click "Save notes" / "Save & send"
  5. Notes: the "Share notes with client" switch is retired
Screenshot for TC-P-13

2D. Client Management

2 passed
PassedTC-P-14View the clients list9.2s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/clients
  2. 2. Search for a client, then try each status tab
  3. 3. Click a row
  4. Notes: the old Name / Email / Mobile / Referring Doctor columns are gone
Screenshot for TC-P-14
PassedTC-P-15View the client detail page6.5s
  1. 1. From the drawer click "View full profile"
  2. H1 is the client's name, with the email · mobile · with-you-since meta line
  3. KPI cards "Sessions", "Upcoming", "Total paid", "Client since"
  4. 2. Work through each tab
Screenshot for TC-P-15

2E. Invoices

1 passed 1 failed
PassedTC-P-16View the psychologist invoices list9.9s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/invoices
  2. 2. Search, then use the status filter
  3. Rows carry "View" and a "⋯" menu, and pagination appears at 10+ items
Screenshot for TC-P-16
FailedTC-P-17Invoice detail and resend4.9s
  1. 1. From /dashboard/invoices, click "View" on an invoice
  2. The detail page shows the invoice number, created-on line, status pill and its cards
  3. 2. Click "Resend Invoice" and confirm — failed
Error: The script requires resend to work from a PAYOUT invoice, not just a client one. Every PsychologistInvoice.stripeInvoiceId is written as `payout_<client invoice id>`, and isRealStripeInvoiceId() only accepts ids starting `in_`, so the button is permanently disabled as 'Resend unavailable' on every payout invoice.

expect(received).toBe(expected) // Object.is equality

Expected: false
Received: true
Screenshot for TC-P-17

2F. Settings

3 passed 1 failed 2 manual
PassedTC-P-18Edit a session type8.7s
  1. 1. Navigate to /dashboard/settings?section=appointment-types
  2. 2. Click "Edit" on a session type
  3. 3. Change the Schedule Fee to 250.00, the Duration to 1 hour, and the Description
  4. 4. Click "Update appointment type"
  5. "Cancel" returns to /dashboard/settings?section=appointment-types
Screenshot for TC-P-18
ManualTC-P-19Connect a calendar3.4s

Steps 2–3 leave Pax: 'Connect' redirects to Google's (or Microsoft's) hosted OAuth consent screen, which needs real credentials and a second factor and cannot be driven from a test browser. The Pax side — the provider rows, their state copy and the Connect/Disconnect buttons — is checked below; a reviewer grants consent by hand and then confirms the toast 'Google Calendar connected successfully!' and the row flipping to 'Connected · two-way sync of sessions and blocks'.

  1. 1. Navigate to https://paxpsychology.dev/dashboard/settings?section=calendar
  2. The panel lists Google Calendar, Microsoft Calendar and Apple Calendar with their state and action
  3. 2.–3. Click "Connect" next to Google Calendar, complete OAuth, return to Pax — MANUAL
  4. 4. Click "Disconnect" — MANUAL (only meaningful once a provider is connected)
  5. Notes: /dashboard/settings/calendars redirects here
Screenshot for TC-P-19
ManualTC-P-20Open the Stripe Express dashboard4.2s

The last hop of step 2 leaves Pax: 'Stripe Dashboard' mints a one-time Express login link and opens connect.stripe.com, which is Stripe's own product and cannot be asserted from here. Everything Pax renders — the 'Connected' badge, the Account ID / Country / Currency rows, the Charges Enabled / Payouts Enabled flags and the button itself — is checked below.

  1. 1. Navigate to /dashboard/settings?section=payouts
  2. The card shows the "Connected" badge, the account rows and both enabled flags
  3. 2. Click "Stripe Dashboard" — the button opens the Stripe Express dashboard (hosted hop is MANUAL)
Screenshot for TC-P-20
PassedTC-P-21Settings › Availability (new)7.4s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/settings?section=availability
  2. 2. Click "Edit weekly hours", change something and save
  3. 3. Close, then click "Block time" and add a block
  4. 4. Check the "Time off" panel and delete an entry
  5. Notes: /dashboard/settings/availability 307-redirects here
Screenshot for TC-P-21
PassedTC-P-22Legacy settings URLs redirect (new)10.7s
  1. Visit /dashboard/settings/availability and note where you land
  2. Visit /dashboard/settings/profile and note where you land
  3. Visit /dashboard/settings/billing and note where you land
  4. Visit /dashboard/settings/payments and note where you land
  5. Visit /dashboard/settings/payment-methods and note where you land
  6. Visit /dashboard/settings/calendars and note where you land
  7. Visit /dashboard/settings/notifications and note where you land
  8. Visit /dashboard/settings/appointment-types and note where you land
  9. Notes: appointment-types/add and appointment-types/[id] are real pages and must NOT redirect
Screenshot for TC-P-22
FailedTC-P-23Account actions — pause and resume the listing (new)14.1s
  1. 1. Navigate to /dashboard/settings?section=actions
  2. 2. Click "Pause"
  3. 3. Check /psychologists in a signed-out window
  4. 4. Return and click "Resume"
Error: a paused psychologist should not appear in the public directory

expect(locator).toHaveCount(expected) failed

Locator:  getByText('Emily Thompson').first()
Expected: 0
Received: 1
Timeout:  5000ms

Call log:
  - a paused psychologist should not appear in the public directory with timeout 5000ms
  - waiting for getByText('Emily Thompson').first()
Screenshot for TC-P-23

2G. New surfaces

2 passed 1 other
SkippedTC-P-24New clients queue (new)2.6s

No inbound match request in the queue

  1. 1. Navigate to https://paxpsychology.dev/dashboard/new-clients
  2. The queue lists requests, or shows its empty state — failed
Screenshot for TC-P-24
PassedTC-P-25Earnings (new)6.4s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/earnings
  2. H1 Earnings with the month sub-line and the KPI tiles
Screenshot for TC-P-25
PassedTC-P-26Your listing (new)5.4s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/listing
  2. 2. Edit the public-profile fields and save
  3. 3. Open /psychologists/[username] in a signed-out window
  4. Restore the original location
Screenshot for TC-P-26

Admin

21 cases18 passed 1 failed 2 other

3A. Dashboard

1 passed
PassedTC-A-01Admin landing page7.9s
  1. 1. Navigate to https://paxpsychology.dev/dashboard
  2. Expected: the sidebar shows the admin nav and the 'Admin' role tag
  3. Expected: the old admin overview has been removed
Screenshot for TC-A-01

3B. User Management

8 passed
PassedTC-A-02View all users10.1s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/users
  2. 2. Search by name, then by email
  3. 3. Try each role tab
  4. 4. Click a row
Screenshot for TC-A-02
PassedTC-A-03Create a new CLIENT user8.5s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/users/add
  2. 2. Choose the "Client" role card
  3. 3. Fill in the details, using a deliberately mixed-case email, and leave Password blank
  4. 4. Click "Create client"
  5. 5. Open the new user's detail page and check the stored email
  6. Expected: the same address in different casing is rejected as a duplicate
Screenshot for TC-A-03
PassedTC-A-04Create a new PSYCHOLOGIST user (and the welcome email)7.1s
  1. 1. Navigate to /dashboard/users/add and choose "Psychologist"
  2. 2. Fill the form (name, email, username, professional details) and submit, leaving the password blank
  3. Expected: the psychologist appears in the list with the "Psychologist" role tag and a lower-cased email
  4. Manual: open the welcome email and follow 'Set your password & get started'
Screenshot for TC-A-04
PassedTC-A-05Edit an existing user8.6s
  1. Setup: create a throwaway client to edit
  2. 1. Open a user's detail page and click "Edit"
  3. 2. Update the name and save
  4. Expected: the change appears in the users list
Screenshot for TC-A-05
PassedTC-A-06Deactivate a user9.7s
  1. Setup: create a throwaway client (with a password) to deactivate
  2. 1. Open the user's detail page and click "Deactivate"
  3. 2. Read the confirmation page and click "Deactivate user"
  4. 3. Try to sign in as that user
Screenshot for TC-A-06Screenshot for TC-A-06
PassedTC-A-07Impersonate a client12.1s
  1. 1. From /dashboard/users, open a CLIENT user and click "Impersonate"
  2. 2. Move around the dashboard
  3. Expected: the event is written to the impersonation log
Screenshot for TC-A-07
PassedTC-A-08Impersonate a psychologist6.0s
  1. 1. From /dashboard/users, open a PSYCHOLOGIST user and click "Impersonate"
Screenshot for TC-A-08
PassedTC-A-09Stop impersonation and check the audit log9.0s
  1. Setup: impersonate the seeded client so there is a session to stop
  2. 1. Click "Stop Impersonating" in the amber banner
  3. 2. Go to /dashboard/users and click "Impersonation log"
Screenshot for TC-A-09

3C. Content Management

1 passed 2 other
RetiredTC-A-10Create, edit, and publish a blog post

The blog has been folded into the Journal. There is no /dashboard/blog any more; /dashboard/blog, /dashboard/blog/add and /dashboard/blog/:id 307-redirect to the equivalent Journal routes. The Journal editor is tested as TC-A-16.

RetiredTC-A-11Create, edit, and publish a story/testimonial

The Story model was rebranded to Journal. There is no /dashboard/stories; /dashboard/stories and /dashboard/stories/* 307-redirect to /dashboard/journal. The "It's normal" stories carousel on the directory page has been replaced by the journal carousel. The Journal editor is tested as TC-A-16.

PassedTC-A-12Create, edit, and publish an FAQ18.8s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/faqs
  2. 2. Click "New FAQ"
  3. 3. Enter a Question and Answer, pick an Audience, turn "Published" on, and click "Create FAQ"
  4. 4. Edit the FAQ and save
  5. 5. Check the FAQ accordion on the homepage
  6. 6. Delete the FAQ
Screenshot for TC-A-12

3D. Newsletter

3 passed
PassedTC-A-13View newsletter subscribers6.8s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/newsletter
  2. 2. Search for a subscriber by email, then by first name
  3. 3. Try the "All", "Active" and "Unsubscribed" tabs
Screenshot for TC-A-13
PassedTC-A-14Export subscribers as CSV7.4s
  1. 1. Switch to the "Active" tab
  2. 2. Click "Export CSV" and choose "Export Current View (Active)"
  3. 3. Open the file
  4. 4. Repeat with "Export All Subscribers", "Export Active Only" and "Export Unsubscribed Only"
Screenshot for TC-A-14
PassedTC-A-15Toggle a subscriber's status and delete a subscriber13.4s
  1. Setup: subscribe from the public /journal newsletter strip
  2. 1. Open the "⋯" menu on an active subscriber's row
  3. 2. Click "Mark Unsubscribed"
  4. 3. Reopen the menu on the same row and click "Reactivate"
  5. 4. Open the menu again and click "Delete", then confirm
Screenshot for TC-A-15

3E. Journal CMS (new)

5 passed 1 failed
PassedTC-A-16Create, edit and publish a journal article26.1s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/journal
  2. 2. Click "New article"
  3. 3. Enter a Title and click "Generate from title" next to "URL slug"
  4. 4. Fill Excerpt and Body, upload a Cover image, pick a Category and Author
  5. 5. Click "Save draft"
  6. 6. Reopen the article from the list and click "Publish"
  7. 7. Check /journal in a signed-out window
  8. 8. Reopen the article, turn on "Feature on journal", and click "Update"
Screenshot for TC-A-16Screenshot for TC-A-16Screenshot for TC-A-16
PassedTC-A-17Journal status radio and scheduled articles12.7s
  1. Setup: write a draft article to schedule
  2. 1. Open the article and look at the "Publish" card in the right-hand sidebar
  3. 2. Select "Scheduled", set a "Goes live" date/time in the near past, and save
  4. 3. Wait past that time and reload /journal
Screenshot for TC-A-17Screenshot for TC-A-17
PassedTC-A-18Delete a journal article9.4s
  1. Setup: publish an article that can be discarded
  2. 1. Open the article and scroll to the "Danger zone" card
  3. 2. Click "Delete article" and confirm
  4. Expected: the article disappears from /journal immediately
Screenshot for TC-A-18Screenshot for TC-A-18
FailedTC-A-19Categories, Authors and Media (new)45.2s
  1. 1. Navigate to /dashboard/categories, add a category, edit it, then delete it
  2. 2. Navigate to /dashboard/authors
  3. 3. Navigate to /dashboard/media, upload an image, then delete it — failed
Error: expect(locator).toBeVisible() failed

Locator:  getByText('e2e-e2e-20260917-uc8ydh.png').first()
Expected: visible
Received: hidden
Timeout:  30000ms

Call log:
  - Expect "toBeVisible" with timeout 30000ms
  - waiting for getByText('e2e-e2e-20260917-uc8ydh.png').first()
    63 × locator resolved to <p id="_r_1_" class="text-ink-2 text-sm">Delete "e2e-e2e-20260917-uc8ydh.png" from the med…</p>
       - unexpected value "hidden"
Screenshot for TC-A-19
PassedTC-A-20Admin settings and platform integrations (new)9.5s
  1. 1. Navigate to https://paxpsychology.dev/dashboard/settings
  2. 2. Step through each section in the left nav
  3. 3. Open /dashboard/settings/integrations
Screenshot for TC-A-20
PassedTC-A-21Retired dashboard URLs redirect (new)7.9s
  1. Setup: pick a real article id for the /dashboard/blog/<id> row
  2. Visit each retired URL and note where you land
Screenshot for TC-A-21

Previous runs

DateRunBranchCommitPassFailManualNot automated
2026-09-17 03:08:43 UTCe2e-20260917-7py3wpredesign-ui-kits3e5d6f231078
2026-09-17 03:04:59 UTCe2e-20260917-sv2nzcredesign-ui-kits3e5d6f231080