18b1e0f66e
The .picpeak restore suites gate their Postgres cases behind PICPEAK_PG_TEST_URL and describe.skip themselves out when it is unset. That variable was set in no workflow, so those cases have never run in CI — the suites reported green while silently skipping the half that needs a real database: sequence resync, operator/role preservation across a cross-instance restore, and whether a coerced row lands with the right STORED VALUES rather than merely not throwing. Add a postgres:15-alpine service to the backend job (same shape schema-drift already uses) and point the variable at it. Everything else in the suite still runs on SQLite; this only un-gates the cases that were skipping. Verified against a real Postgres 15 before wiring: picpeakRestorePg 4/4 and picpeakCrossEngine 11/11 (8 of which were previously skipped across both). Matters now because #1043 opens sqlite -> pg restore to the upload UI, so the coercion layer's correctness stops being a CLI-only concern. Co-authored-by: Paul Nothaft <paul@MacStudio-von-Paul.local>
116 lines
4.1 KiB
YAML
116 lines
4.1 KiB
YAML
name: Tests
|
|
|
|
# Runs the backend Jest suite and the frontend Vitest suite on every PR.
|
|
# Both suites already exist and cover the CRM service layer (quoteService,
|
|
# contractService, invoiceService.*, customerHoursService, eventService.
|
|
# calendar) plus the photo / settings / OG / auth surface — wiring them
|
|
# into CI makes regressions visible at PR time instead of post-merge.
|
|
#
|
|
# Six backend suites are excluded via --testPathIgnorePatterns. They
|
|
# fail on `upstream/beta` too (pre-existing mock/infra issues, NOT CRM
|
|
# regressions). Excluding them here keeps CI green from day 1; revisit
|
|
# each individually as its own fix.
|
|
#
|
|
# Triggers on any change that could affect either suite. The backend
|
|
# job intentionally omits frontend paths and vice versa so unrelated
|
|
# PRs don't pay both build costs.
|
|
|
|
on:
|
|
push:
|
|
branches: [main, beta, stable]
|
|
pull_request:
|
|
branches: [main, beta, stable]
|
|
workflow_dispatch:
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
backend:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
|
|
# The .picpeak restore suites gate their real-Postgres cases behind
|
|
# PICPEAK_PG_TEST_URL and `describe.skip` themselves out when it is
|
|
# unset — so until now they never ran here. That hid the half that
|
|
# matters: sequence resync, operator/role preservation across a
|
|
# cross-instance restore, and (with #1041) whether a SQLite-shaped
|
|
# row actually lands in Postgres with the right STORED VALUES rather
|
|
# than merely not throwing. Everything else in the suite still runs
|
|
# on SQLite; this service only un-gates those cases.
|
|
services:
|
|
postgres:
|
|
image: postgres:15-alpine
|
|
env:
|
|
POSTGRES_USER: picpeak
|
|
POSTGRES_PASSWORD: testpass
|
|
POSTGRES_DB: picpeak_test
|
|
options: >-
|
|
--health-cmd "pg_isready -U picpeak -d picpeak_test"
|
|
--health-interval 2s
|
|
--health-timeout 2s
|
|
--health-retries 30
|
|
ports:
|
|
- 5432:5432
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '22'
|
|
cache: 'npm'
|
|
cache-dependency-path: backend/package-lock.json
|
|
|
|
- name: Install backend deps
|
|
working-directory: ./backend
|
|
run: npm ci
|
|
|
|
- name: Run Jest suite
|
|
working-directory: ./backend
|
|
env:
|
|
# backupService tests would otherwise try a real S3 round-trip.
|
|
# The S3 path itself is covered separately by the integration
|
|
# suite when MinIO is provisioned.
|
|
SKIP_S3_TESTS: 'true'
|
|
# Un-gates the real-Postgres cases in the .picpeak restore suites
|
|
# (see the `services:` note above). Absent it they silently skip.
|
|
PICPEAK_PG_TEST_URL: 'postgres://picpeak:testpass@127.0.0.1:5432/picpeak_test'
|
|
run: |
|
|
# Excluded suites — fail on upstream/beta too, tracked
|
|
# separately as test-infra debt:
|
|
# adminSettings.logo — supertest fixture
|
|
# integration/adminPhotos.reference — supertest fixture
|
|
# integration/webhookDelivery — supertest fixture
|
|
# services/backupService.enhanced — knex mock chain
|
|
# routes/__tests__/adminAuth — supertest fixture
|
|
# (adminNotifications was excluded; #597 fix re-enables it.)
|
|
npx jest \
|
|
--testPathIgnorePatterns='/node_modules/|adminSettings\.logo\.test|integration/adminPhotos\.reference|integration/webhookDelivery|backupService\.enhanced|routes/__tests__/adminAuth' \
|
|
--ci
|
|
|
|
frontend:
|
|
runs-on: ubuntu-latest
|
|
timeout-minutes: 10
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
|
|
- name: Set up Node.js
|
|
uses: actions/setup-node@v4
|
|
with:
|
|
node-version: '22'
|
|
cache: 'npm'
|
|
cache-dependency-path: frontend/package-lock.json
|
|
|
|
- name: Install frontend deps
|
|
working-directory: ./frontend
|
|
run: npm ci
|
|
|
|
- name: Run Vitest suite
|
|
working-directory: ./frontend
|
|
run: npm test -- --run
|