FRANFUNNEL · Test Suite

env: —

Run

quick run:

Surfaces

Latest results

No run yet — hit “Run now”.

Coverage & roadmap

Tests

Add or remove tags per test. Edits rewrite the spec source (commit them); they take effect next run.
TestProjectsTags
Loading…

Tags

Create, rename, or delete tags. Rename/delete apply across every test that uses the tag.
TagTestsActions
Loading…

Environments

Named sets of target URLs. The active environment's URLs are used for runs. Secrets (keys/passwords) stay in .env.

Add environment

Credential profiles

Bundles of identities/secrets a run uses. Pick one on the Run tab; the active profile overrides .env. Stored locally in config/credentials.json (gitignored) — never committed.

Add profile

Lead templates

Rules for the lead a scenario creates. Pick one on the Run tab; on each scenario run it generates the next lead (random or +1 increment) and injects it. Stored locally (gitignored).

Add template

Run history

No runs recorded yet.
Loading insights…

SMS conversation

Loading…
Click “Re-check” to run a preflight.

Test coverage map

Every test, grouped by file with the purpose it verifies (pulled from each spec). Click a file to expand its tests.

Loading…

What this is

A central pre-release smoke / E2E suite for the FranFunnel platform — one repo, one report, one gate across surfaces. It points at deployed environments (staging/prod), so it gates a release rather than a local build.

This dashboard is local-only (binds 127.0.0.1), reads your own .env, and lets you run the suite, watch results live, inspect history, drive SMS, and preflight — all from the browser.

Common commands

CommandWhat it does
npm run test:fastunit + contract — deterministic, no creds, no network (~1s). Run before every commit.
npm run typechecktsc --noEmit across the whole repo.
npm run test:smokethe full pre-release gate (--grep @smoke).
npm run test:safeeverything except @mutates.
npm run doctorpreflight: what's configured, what runs vs skips, Twilio + surface reachability (also the Health tab).
npm run statsflaky tests + slowest + run trend from history (also the Insights tab).
npm run sms -- read|watch|sendread/send SMS on the Twilio test number (also the SMS tab).
npm run dashboardthis dashboard → http://127.0.0.1:4321.

Test projects

ProjectCoversNeeds
unitPure logic — SMS classifiers, CLI parser, waitFor, Twilio scoping. Deterministic.nothing
contractFranFunnel adapter vs a local HTTP fixture — request shapes + error contract.nothing
smokeCross-surface reachability + web render (health).network
apiFranFunnel API contract (safe; the mutating lead-create is opt-in).network
ff2-webFranFunnel login app — negative always, positive with creds.FF2_TEST_EMAIL/PASSWORD
autopilotAuthed admin journeys J1–J10 (shell, lists, detail, bookings, diagnostics, search, queue, playground).Supabase service-role + email
scenariosCross-system sagas: lead → autopilot SMS negotiation → booking. @mutatesFF_API_KEY (+ Twilio)

Run npm run doctor or open Health to see exactly which will run vs skip with your current config.

Tags

Every test carries tags; filter with the Tag dropdown or --grep.

@smoke fast pre-release gate · @p0@p1@p2 priority · @auth needs a session · @unit pure logic · @contract adapter contract · @scenario cross-system saga · @mutates writes/real side-effects (excluded from the safe run)

Dashboard tabs

RunPick a surface/tag/env and run — live progress bar, Stop, quick-run chips, optional 📱 watch-SMS.
TestsSearch, edit tags per test, and ▶ run one / ↻5 stability check any test.
TagsCreate / rename / delete tags across the suite.
EnvironmentsNamed target-URL sets; the active one is injected into runs.
CredentialsNamed credential profiles injected into runs (secrets stay local).
Lead templatesPer-field lead generation for scenario runs.
HistoryEvery run recorded locally; click a row for the per-test breakdown + errors.
InsightsPass-rate trend, flaky tests (click to drill into their timeline + last error), slowest tests.
SMSLive two-way conversation on the test number — read, watch (5s), and send as the lead.
HealthBrowser preflight: targets, creds, what-runs, Twilio auth, reachability. The header dot mirrors it.

Scenarios & safety

  • Lead creation hits PROD (app.franfunnel.com) — staging's lead endpoints are unreliable, and prod/staging share a backend, so the staging autopilot still handles it.
  • Twilio is scoped strictly to TWILIO_NUMBER (the simulated lead) and filtered by timestamp — the suite never touches other traffic on the shared account.
  • Self-cleaning: each scenario cancels its booking over SMS, stops the autopilot drip, and archives the lead — even on failure.
  • Authed autopilot tests mint a Supabase session from SUPABASE_URL; it only authenticates against the matching app env. Setup verifies this and fails with a clear message on a staging-session-vs-prod-app mismatch.
  • Never click mutating controls on shared envs: Lead Control Center send/handoff, Bookings Sync, Playground run, create forms.

Shortcuts & tips

  • /Ctrl + Enter on the Run tab launches a run.
  • Quick-run chips and your project/tag selection are remembered across reloads.
  • The header dot (● top-right) shows surface health; click it for the Health tab.
  • Hover most controls for a tooltip explaining what they do.