MuseMVP Docs
Development

Testing and Acceptance

Spec, Code, Verify, Test, Green and real-platform verification boundaries.

Deliver non-trivial behavior through Spec → Code → Verify → Test → Green. Define acceptance first and maintain tests/e2e/SCENARIOS.md for browser journeys. New package behavior, schemas, and bug fixes start with a minimal failing test.

Test Layers

LocationWhat it proves
packages/<name>/testsPackage factories, pure logic, schema/query behavior
tests/unitApp logic, orchestration, transformations, validation
tests/apiReal HTTP against a running app: auth, permissions, validation, response contracts
tests/e2ePlaywright navigation, auth UX, redirects, signed-in journeys
tests/utilsShared environment/Better Auth plumbing, not feature assertions

Coverage floors in packages/testing/coverage-floors.json may only rise. Database tests include Postgres/PGlite and SQLite queries. Passing one dialect does not verify the other platform.

Local Node Setup

pnpm muse:init --yes --app web --database-url <postgres-url>
pnpm db:seed
pnpm dev

Manual password login uses [email protected] / [email protected], with MUSE_SEED_PASSWORD (default musemvp). Normal runs keep BETTER_AUTH_ENABLE_TEST_UTILS=false.

Reuse tests/utils/better-auth.ts and tests/e2e/utils/session.ts. Test processes enable Better Auth testUtils; APIs use getAuthHeaders, browsers use getCookies, and OTP uses capture helpers. Do not reinvent login bootstrap in each spec.

Commands and Limits

CommandScope
pnpm test:unitPackage and app logic
pnpm test:unit:coverageCoverage and floor checks
pnpm test:apiReal Node HTTP contracts
pnpm test:e2eNode Playwright; config can start build/start, reused servers must match the base URL
pnpm apps:parityPage/content copy consistency, not behavior

Select Coverage by Change

Use unit tests for logic and HTTP contracts for routes. Combine lower-level and browser checks for auth, billing, role gates, uploads, and cross-route navigation. Walk the critical path before locking assertions, including empty states, service errors, invalid input, and cross-user denial. Report passed, unrun, and deferred checks explicitly; rendering/types alone are not completion.

On this page