Files
blog/.gitignore
T
davide 91181f2170 Add unit, integration and e2e test suites
tests/{unit,integration,e2e}/, at the repo root (not under frontend/,
since e2e exercises the frontend and PocketBase together) — all
against real code rather than mocks:

- unit/: Vitest (nuxt environment) — pure functions in server/utils
  and shared/utils, plus components/composables via
  @nuxt/test-utils/runtime's mountSuspended.
- integration/: Vitest (node environment) — @nuxt/test-utils/e2e's
  setup() builds and runs the real Nitro server against a real
  ephemeral PocketBase instance, exercising the actual /content/* and
  /admin routes end to end.
- e2e/: Playwright, a real browser against the built app and another
  ephemeral PocketBase, covering the user-facing flows (home, blog
  archive, article detail incl. JSON-LD, category filter, 404s, the
  /admin redirect).

The Vitest/Playwright tooling (and node_modules) stays in frontend/,
the repo's only npm project; its configs just point at ../tests/.
Playwright resolves packages from the node_modules nearest each spec
file, so `npm run test:e2e` first symlinks tests/node_modules to
frontend/node_modules (pretest:e2e, idempotent, gitignored).

tests/support/pocketbase.ts is the shared piece behind integration
and e2e: it downloads the same pinned PocketBase binary
pocketbase/Dockerfile uses, starts it against the real
pocketbase/pb_migrations/ (not a copy), and seeds it from
tests/support/fixtures.ts — so these tests run against the exact
schema and API rules that ship to production, catching the class of
bug that only shows up when PocketBase actually enforces them (e.g. a
wrong filter/fields query string silently returning nothing, or too
much).

CLAUDE.md and docs/frontend.md document the new npm scripts and the
single-test commands for each layer.
2026-09-11 11:48:43 +02:00

56 lines
807 B
Plaintext

# dependencies
node_modules/
.pnp/
.pnp.js
# symlink to frontend/node_modules (created by `npm run pretest:e2e`); the
# trailing-slash pattern above doesn't match a symlink even when it points to
# a directory
tests/node_modules
# env / secrets
.env
.env.*
!.env.example
*.pem
*.key
# ops (holds VPS credentials, never commit)
ops/
# nuxt
frontend/.nuxt/
frontend/.output/
frontend/.data/
frontend/dist/
.nitro/
.cache/
# playwright
frontend/test-results/
frontend/playwright-report/
# nuxt module-setup marker (regenerated, not meaningful project config)
frontend/.nuxtrc
# caddy runtime
caddy/data/
caddy/config/
# logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# editors / os
.vscode/
!.vscode/extensions.json
.idea/
.DS_Store
Thumbs.db
# misc
coverage/
*.tsbuildinfo