Зачем: 156 зелёных тестов на fakeDatabase не поймали, что ключевые сценарии (создание сотрудника, подтверждение смены, расчёт зарплаты) всегда падают на реальной PostgreSQL. Нужен приёмочный стенд, который проверяет продукт как чёрный ящик: настоящий процесс сервера, настоящая БД, роли как в pilot, но с минимальными привилегиями. - tests/e2e/harness/global-setup.ts: создаёт БД и роли через scripts/test/provision-pg.mjs, применяет миграции ролью krona_migrator (NOSUPERUSER), поднимает `tsx src/server.ts` под krona_staff_app с токенами/VAPID из crypto.randomBytes; три процесса: с токенами, без токенов (как корневой compose.yaml) и отдельный для проверки rate limit; логи серверов пишутся в tests/e2e/evidence/. - *.e2e.ts и отдельный vitest.e2e.config.ts: e2e не попадают в `npm test`, поэтому `npm run check` не требует БД и не краснеет от известных дефектов. - [HARNESS]/[CTRL] — позитивные контроли (версия PG >= 17, атрибуты ролей, app-роль не видит schema_migrations, RBAC, уволенный теряет доступ): если они красные, красные дефектные сценарии ничего не доказывают. - scripts/test/run-e2e.mjs: «храповик» известных дефектов по tests/e2e/known-defects.json (новый красный или исправленный-но-не- вычеркнутый ID = exit 1), таблица e2e-table.md и проверка, что в evidence нет ничего похожего на секреты стенда. Логи названы *.txt, т.к. *.log в .gitignore.
18 lines
704 B
TypeScript
18 lines
704 B
TypeScript
import { fileURLToPath } from 'node:url';
|
|
import { defineConfig } from 'vitest/config';
|
|
|
|
// Отдельный конфиг: e2e-файлы названы *.e2e.ts и не попадают в `npm test`
|
|
// (корневой vitest ищет только *.test.ts), поэтому `npm run check` не зависит от
|
|
// живой PostgreSQL и от известных открытых дефектов.
|
|
const root = fileURLToPath(new URL('../..', import.meta.url));
|
|
|
|
export default defineConfig({
|
|
root,
|
|
test: {
|
|
include: ['tests/e2e/**/*.e2e.ts'],
|
|
globalSetup: ['tests/e2e/harness/global-setup.ts'],
|
|
fileParallelism: false,
|
|
testTimeout: 60_000,
|
|
hookTimeout: 180_000,
|
|
},
|
|
});
|