You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The tests use fallback credentials test@example.com / testpassword123 (or TEST_USER_EMAIL / TEST_USER_PASSWORD env vars). Supabase Auth rejects these credentials, the page stays on /login showing "Invalid login credentials", and page.waitForURL("**/dashboard") times out after 15 seconds.
Failure 1 — Scenario 12: Dashboard shows seeded artist name 'Chic' after login
Failure screenshots were captured by Playwright for all 5 failing scenarios. All show the same state: login page with "Invalid login credentials" error.
Scenario
Screenshot Path
Scenario 12
.attractor/qa-report/scenario-12-failed.png
Scenario 13
.attractor/qa-report/scenario-13-failed.png
Scenario 14
.attractor/qa-report/scenario-14-failed.png
Scenario 15
.attractor/qa-report/scenario-15-failed.png
Scenario 27
.attractor/qa-report/scenario-27-failed.png
Notes
All 5 failures are a test-environment issue, not a code defect. The test credentials are not provisioned in the Supabase Auth instance. Once valid credentials are supplied via TEST_USER_EMAIL and TEST_USER_PASSWORD env vars, these tests are expected to pass.
Scenario 16 passed (static analysis) — Confirms the dashboard is wired to Drizzle/Postgres (@/db/queries/dashboard, db.query, drizzle-orm/postgres-js), even though E2E login couldn't reach /dashboard.
Dev server is healthy — Scenario 18 confirmed the server responds HTTP 200 with the expected <h1>Virtual Agent</h1> heading.
No dashboard rendering was tested end-to-end due to the auth blocker. Zero E2E coverage of: whether seeded data actually renders, whether data-testid attributes exist, or whether Drizzle queries return correct data at runtime.
Recommendation: Provision a test user in Supabase Auth (or set TEST_USER_EMAIL/TEST_USER_PASSWORD env vars) and re-run the 5 failing scenarios.
Full Playwright output
Running 27 tests using 1 worker
✓ 1 [chromium] › gherkin.spec.ts:42:7 › AC #1 — Migrations generate cleanly › Scenario 1: Drizzle config file targets Postgres with correct schema and output paths (3ms)
✓ 2 [chromium] › gherkin.spec.ts:62:7 › AC #1 — Migrations generate cleanly › Scenario 2: drizzle-kit generate produces SQL migration files for all 5 tables (2ms)
✓ 3 [chromium] › gherkin.spec.ts:77:7 › AC #1 — Migrations generate cleanly › Scenario 3: Generated migrations define pgEnum types for status and type columns (2ms)
✓ 4 [chromium] › gherkin.spec.ts:103:7 › AC #1 — Migrations generate cleanly › Scenario 4: Generated migrations define foreign keys with ON DELETE CASCADE (1ms)
✓ 5 [chromium] › gherkin.spec.ts:126:7 › AC #2 — Migrations apply successfully › Scenario 5: npm run db:migrate script is configured to apply migrations (2ms)
✓ 6 [chromium] › gherkin.spec.ts:152:7 › AC #3 — Seed script populates data › Scenario 6: Seed script file exists and is executable via npm (1ms)
✓ 7 [chromium] › gherkin.spec.ts:167:7 › AC #3 — Seed script populates data › Scenario 7: npm run db:seed inserts the artist 'Chic' (1ms)
✓ 8 [chromium] › gherkin.spec.ts:179:7 › AC #3 — Seed script populates data › Scenario 8: Seed creates one tour linked to the artist 'Chic' (1ms)
✓ 9 [chromium] › gherkin.spec.ts:191:7 › AC #3 — Seed script populates data › Scenario 9: Seed creates at least 5 gigs across different US cities (2ms)
✓ 10 [chromium] › gherkin.spec.ts:207:7 › AC #3 — Seed script populates data › Scenario 10: Seed creates at least 2 bookings linked to a gig (1ms)
✓ 11 [chromium] › gherkin.spec.ts:219:7 › AC #3 — Seed script populates data › Scenario 11: Seed creates one rider with hospitality and technical content as JSON (1ms)
✘ 12 [chromium] › gherkin.spec.ts:241:7 › AC #4 — Dashboard displays seeded data › Scenario 12: Dashboard shows seeded artist name 'Chic' after login (16.0s)
✘ 13 [chromium] › gherkin.spec.ts:260:7 › AC #4 — Dashboard displays seeded data › Scenario 13: Dashboard shows seeded tour name (15.6s)
✘ 14 [chromium] › gherkin.spec.ts:274:7 › AC #4 — Dashboard displays seeded data › Scenario 14: Dashboard shows gigs summary with cities and dates (15.7s)
✘ 15 [chromium] › gherkin.spec.ts:298:7 › AC #4 — Dashboard displays seeded data › Scenario 15: Dashboard shows booking information (16.5s)
✓ 16 [chromium] › gherkin.spec.ts:318:7 › AC #4 — Dashboard displays seeded data › Scenario 16: Dashboard data is sourced from Supabase Postgres via Drizzle, not hardcoded (3ms)
✓ 17 [chromium] › gherkin.spec.ts:342:7 › AC #5 — Database connection works in dev › Scenario 17: Database client module creates a Drizzle client using DATABASE_URL (1ms)
✓ 18 [chromium] › gherkin.spec.ts:362:7 › AC #5 — Database connection works in dev › Scenario 18: Dev server is configured to connect to Supabase Postgres (499ms)
✓ 19 [chromium] › gherkin.spec.ts:380:7 › AC #6 — Schema matches domain model › Scenario 19: Artists table schema has expected columns (2ms)
✓ 20 [chromium] › gherkin.spec.ts:399:7 › AC #6 — Schema matches domain model › Scenario 20: Tours table schema has expected columns and tour_status enum (5ms)
✓ 21 [chromium] › gherkin.spec.ts:426:7 › AC #6 — Schema matches domain model › Scenario 21: Gigs table schema has expected columns including venue, city, date, and status (3ms)
✓ 22 [chromium] › gherkin.spec.ts:455:7 › AC #6 — Schema matches domain model › Scenario 22: Bookings table schema has expected columns and booking_type enum (2ms)
✓ 23 [chromium] › gherkin.spec.ts:481:7 › AC #6 — Schema matches domain model › Scenario 23: Riders table schema has content as JSONB and rider_doc_status enum (2ms)
✓ 24 [chromium] › gherkin.spec.ts:509:7 › AC #6 — Schema matches domain model › Scenario 24: Cascade deletes propagate through the full entity hierarchy (3ms)
✓ 25 [chromium] › gherkin.spec.ts:562:7 › Environment & Configuration › Scenario 25: DATABASE_URL is documented in environment example files (1ms)
✓ 26 [chromium] › gherkin.spec.ts:590:7 › Security › Scenario 26: All database queries run server-side only (1ms)
✘ 27 [chromium] › gherkin.spec.ts:619:7 › Visual Verification › Scenario 27: End-to-end visual verification of seeded data on dashboard (16.0s)
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
QA Report
PR: #52 — feat: Postgres data plane & dashboard data — Drizzle schemas, migrations, seed, and dashboard reads⚠️ PARTIAL (22/27 passed, 5 failed)
Branch:
feat/48-postgres-data-plane-dashboardDate: 2026-02-26
Verdict:
Gherkin Scenarios
AC-by-AC Coverage
.env.exampleverifiedFailures
All 5 failures share an identical root cause.
Root Cause: Authentication Failure — "Invalid login credentials"
The tests use fallback credentials
test@example.com/testpassword123(orTEST_USER_EMAIL/TEST_USER_PASSWORDenv vars). Supabase Auth rejects these credentials, the page stays on/loginshowing "Invalid login credentials", andpage.waitForURL("**/dashboard")times out after 15 seconds.Failure 1 — Scenario 12: Dashboard shows seeded artist name 'Chic' after login
gherkin.spec.ts:253await page.waitForURL("**/dashboard", { timeout: 15_000 });TimeoutError: page.waitForURL: Timeout 15000ms exceeded.Failure 2 — Scenario 13: Dashboard shows seeded tour name
gherkin.spec.ts:265TimeoutError: page.waitForURL: Timeout 15000ms exceeded.Failure 3 — Scenario 14: Dashboard shows gigs summary with cities and dates
gherkin.spec.ts:281TimeoutError: page.waitForURL: Timeout 15000ms exceeded.Failure 4 — Scenario 15: Dashboard shows booking information
gherkin.spec.ts:303TimeoutError: page.waitForURL: Timeout 15000ms exceeded.Failure 5 — Scenario 27: End-to-end visual verification of seeded data on dashboard
gherkin.spec.ts:632TimeoutError: page.waitForURL: Timeout 15000ms exceeded.Screenshots
Failure screenshots were captured by Playwright for all 5 failing scenarios. All show the same state: login page with "Invalid login credentials" error.
.attractor/qa-report/scenario-12-failed.png.attractor/qa-report/scenario-13-failed.png.attractor/qa-report/scenario-14-failed.png.attractor/qa-report/scenario-15-failed.png.attractor/qa-report/scenario-27-failed.pngNotes
All 5 failures are a test-environment issue, not a code defect. The test credentials are not provisioned in the Supabase Auth instance. Once valid credentials are supplied via
TEST_USER_EMAILandTEST_USER_PASSWORDenv vars, these tests are expected to pass.Scenario 16 passed (static analysis) — Confirms the dashboard is wired to Drizzle/Postgres (
@/db/queries/dashboard,db.query,drizzle-orm/postgres-js), even though E2E login couldn't reach/dashboard.Dev server is healthy — Scenario 18 confirmed the server responds HTTP 200 with the expected
<h1>Virtual Agent</h1>heading.No dashboard rendering was tested end-to-end due to the auth blocker. Zero E2E coverage of: whether seeded data actually renders, whether
data-testidattributes exist, or whether Drizzle queries return correct data at runtime.Recommendation: Provision a test user in Supabase Auth (or set
TEST_USER_EMAIL/TEST_USER_PASSWORDenv vars) and re-run the 5 failing scenarios.Full Playwright output
Beta Was this translation helpful? Give feedback.
All reactions