Skip to main content

Test accounts

Scope: who you test as, on which stack. How to mint a token for an account is real-token HTTP testing; the things you test against are the Clerk dev instance and the deployed test stack.

Two Clerk instances — accounts never cross​

Local dev authenticates against one Clerk dev instance; the deployed test stack (optolink-test) runs on a different one. The same email can exist on both with different passwords and different user ids. Never cross-point a backend, DB, or portal publishable key between the two.

Account state below is runtime fact — recorded, not provable by grep, except where a line names its source. Re-verify live on next use (recorded 2026-09-13 → 2026-10-06).

Local dev — seed-owned accounts​

pnpm prisma db seed (idempotent) creates/finds both accounts in the Clerk dev instance and mirrors them into the DB:

AccountPasswordState
[email protected]QAvr9TaaxuZ2BXDn — a seed re-run resets the Clerk password to TestPassword123!owner of Demo Org (seeded: 5 links, 200 click events), plan starter
[email protected]same reset behaviorowner of OptoLink Ops (the seeded ops org — CLERK_OPS_ORG_ID in backend .env)

Password-reset behavior source-checked against optolink-backend @ 29f8589 (prisma/seed.ts — CLERK_USER_PASSWORD = 'TestPassword123!'). The QAvr9TaaxuZ2BXDn initial password and the account states are recorded.

Ad-hoc personas — mint, don't share​

  • All shared qa-* accounts were purged 2026-09-13 (13 users + 8 QA orgs, local instance + local DB). Flow audits mint purpose-built users via Recipe B (real-token HTTP testing); do not resurrect shared accounts.
  • Org cap: max 5 memberships including pending invites — plan fixture orgs accordingly.
  • Stamp roles AFTER creation. A membership created directly via the Backend API (no pending invitation) is stamped owner by resolveAndStampRole on organizationMembership.created; re-patch the membership publicMetadata.role AND the DB OrgMember.role afterwards, then sign in fresh — mechanism on team management.
  • Orgless accounts hit Clerk's mandatory choose-organization task (/login/tasks/choose-organization) after password sign-in. To re-test sign-in, sign out from that prebuilt page first — it clears the pending session (recorded v2.2.0 portal behavior, 2026-09).

Recorded QA fixtures (local)​

Purpose-built orgs from the flow audits; states drift as later audits flip them — re-verify before reuse, and re-seed whatever a test destroyed.

  • QA Billing Org (FLOW-012; clerkOrgId org_3JGphj83espIVgqvwTtwkPTDhhU, orgKey qabil012): plan growth, IOS AppConfig, 165 links, subscription row qa_sub_flow012 (GROWTH · ACTIVE · PAYMOB, fake gateway sub id — deliberately Paymob so cancel/resume/downgrade stay local DB writes). Owner [email protected] / Xq7-flow012!1789297378Aa; viewer [email protected] (same password). DB flips used by the audit (re-apply as needed): UPDATE subscriptions SET status='PAST_DUE' / scheduled_plan='SOLO' / cancel_at_period_end=true. Key the row by id='qa_sub_flow012' — its gateway_subscription_id drifts over time (observed qa_fixture_gwsub → 608880561).
  • QA Flow013 Org (settings general; clerkOrgId org_3JJ7Eo2OmENkaDcYvdupafaKJbg): plan growth, IOS AppConfig without teamId + ANDROID with fingerprints (the pill states + fingerprint-wipe repro). owner/dev/viewer qa-flow013-{owner,dev,viewer}@test.com / Xq7-flow013!1789367205Aa. Re-seed the AppConfig rows after any wipe test — a settings save destroys the fingerprints (FLOW-013 FB-1).

Deployed test stack — seeded personas​

Two purpose-built demo orgs on optolink-test (portal https://dashboard.optoapp.link); all three accounts use password TestPassword123!. Existing orgs (demo/opl4/myte/myug/qali) untouched.

AccountOrg (orgKey)PlanSeeded state (2026-09-22 snapshot)
[email protected]Tambe (tamb)STARTER (free)7/10 links · 622/1,000 clicks · domains 1/1 + seats 1/1 "limit reached" · no subscription/invoices/ledger
[email protected]Elevate (elev)SOLO — Stripe USD34/50 links · 6,251/10,000 clicks · 2/3 domains · 3/5 templates · SOLO sub ACTIVE + USD 19.00 PAID invoice
[email protected]Elevate (elev)—DEVELOPER member (fills seats 2/2)
  • State drifts with use: Elevate's click window rolls at period end (the clicks bar falls toward 0); re-run the seed script to re-anchor (scripts + stack gotchas: deployed test stack).
  • Racemate ([email protected], org race, added 2026-10-04): password lives only in the browser credential manager + Clerk — never in files or chat.