Skip to main content
OnPageIQ Documentation

QA Handbook

Updated · Aug 15, 2026

How to test OnPageIQ: smoke checklist, regression rules, job queues, and what to file as bugs.

What changed

New step: Runtime Diagnostics capture — fixture pages at /test/diagnostics each trigger one real browser fault, so you can confirm the capture records it instead of assuming it would. Those pages were missing for four and a half months (a .gitignore rule swallowed them in March), so anything you checked there before now was never actually covered. Run the crash fixtures last: they freeze or kill the tab on purpose.

User goal

Run repeatable smoke and regression passes before releases; know what “correct” looks like.

Tier
All testers
Nav label
N/A (meta guide)
Route
/docs
Gates

Prerequisites

  • Local app running (Herd: https://onpageiq.test or composer run dev: http://localhost:8000)
  • Queue worker / Horizon running for async features
  • Platform docs at /docs (standalone — not in product sidebar; full URL shown on docs home)
  • At least one seeded demo org (see Test Environment guide)

QA focus

  • Tenant isolation on every project-scoped URL
  • Feature gates show upgrade UX, not raw errors
  • Async jobs complete; UI reflects terminal state
  • Credits and billing side effects are correct

Overview

OnPageIQ is org-scoped multi-tenant SaaS. Every test should use an explicit org and user; never assume “whatever is logged in” is enough.

What you get

  • Smoke and regression patterns that match the feature guides under /docs
  • Clear expectations for gates (upgrade UX), async jobs, credits, and billing side effects
  • Mandatory cross-org and tier-downgrade coverage before release

How it works

  • Pre-flight: seed demo data, start Horizon/queue, confirm login
  • Run happy paths from each feature guide, then cross-org probes and tier/flag downgrades
  • File bugs with org tier, flags, route, steps, expected vs actual, and Horizon job ID when async

Common issues & false alarms

  • Horizon not running → scans/audits stuck in “processing”
  • Playwright/browser not installed → scan or diagnostics failures
  • Feature flag off for org → 403 or upgrade page (expected, not a bug)
  • public/docs folder breaks artisan serve /docs route — images live under public/platform-doc-images/
  • Local Listings / Company Intelligence scrapes stuck → Horizon must watch directory-listings and company-enrichment; restart supervisors after deploy
  • Local Listings Incomplete / Failed confirms → unlock refunded, nothing linked; retry later or another URL (ops: BBB collector parity runbook §19)

Interactive guide

Step of

All steps (reference)

  1. Step 1. Pre-flight

    Seed demo data, start queue, confirm login works.

    What to do: Run PlatformDocsDemoSeeder; open Horizon; log in as platform-docs@onpageiq.test

    Where: Terminal + /login

    Expected (pass)

    • Dashboard loads with credit balance
    • Horizon shows workers active (including company-enrichment and directory-listings supervisors when those addons are in scope)
    • No 500 on first navigation

    Negative cases (must fail safely)

    • Wrong password shows validation error, not 500

    Tips

    • Use composer run dev for server + horizon + vite together
  2. Step 2. Smoke pass (30 min)

    Walk the smoke checklist on the docs home page: auth, scan, navigation, jobs, addons.

    What to do: Follow each bullet in the Smoke checklist section on /docs

    Where: /docs → Smoke checklist

    Expected (pass)

    • Each checklist item pass or documented known limitation

    Negative cases (must fail safely)

    • Do not skip cross-org check — it is mandatory
  3. Step 3. Runtime Diagnostics capture

    Fixture pages that each trigger one real browser fault, so you can confirm the diagnostics capture records it rather than trusting that it would. Registered in local and test environments only — these never serve to customers.

    What to do: Open /test/diagnostics and work down the list; visiting a page is usually enough, since the cheap faults fire on load

    Where: /test/diagnostics

    Expected (pass)

    • Console errors, uncaught exceptions and unhandled rejections are captured with their message and source
    • Mixed content and CSP violations are captured as security events, not as generic errors
    • Network failures record the failing URL and status (a 404, and a host that does not resolve)
    • Sensitive-data logging is captured REDACTED — the page logs fabricated API keys, a JWT, a card number and a password, and none of those values may appear in stored diagnostics

    Negative cases (must fail safely)

    • Dialogs (alert/confirm/prompt) sit behind buttons on purpose — firing them on load would block the page before anything could observe it
    • The page-crash fixtures freeze or kill the tab by design and ask for confirmation first; run them last, in a tab you do not mind losing

    Tips

    • These pages were missing for four and a half months (a .gitignore rule swallowed them), so anything you remember checking here before mid-2026 was never actually covered
  4. Step 4. Feature-deep pass

    For each changed area in the release, open the matching /docs/{feature} guide and run every step.

    What to do: Use interactive guide stepper; compare UI to screenshots

    Where: /docs → category → feature guide

    Expected (pass)

    • All “Expected results” assertions pass
    • Screenshots match current UI (or file doc drift ticket)
  5. Step 5. Admin: Filament Intelligence caches

    Ops inspect shared enrichment caches in Filament. Company Intelligence → Company Profiles; Local Listings → Directory Profiles. Enable addons per org under Organizations → Add-ons (Pennant overrides).

    What to do: Filament → Intelligence → Company Profiles / Directory Profiles; Organizations → Add-ons

    Expected (pass)

    • Directory Profiles lists BBB cache rows after a successful Local listings confirm
    • reported_bad flag visible when a tenant reports a bad listing
    • Raw JSON / artifacts / unlocks / project links relation managers render

    Negative cases (must fail safely)

    • No free-edit of scraped fields (view/purge/refresh only)

    Tips

    • Queues: company-enrichment (CI), directory-listings (BBB profile + phase-2 artifacts).
  6. Step 6. File bugs

    Include org tier, feature flags, URL, steps, expected vs actual, Horizon job ID if async.

    What to do: Reproduce once; capture screenshot + network tab for API issues

    Expected (pass)

    • Bug report contains route name and org slug

Related guides