fix: make SQLite migrations and e2e reproducible

This commit is contained in:
2026-09-13 14:52:09 +03:00
parent 8637ad2f34
commit ce24a84b7f
10 changed files with 237 additions and 83 deletions
+25 -9
View File
@@ -12,6 +12,7 @@ NestJS API WealthLedger. Backend владеет auth, SQLite-данными и s
cp .env.example .env
nvm use --silent
npm ci
npx prisma migrate deploy
npm run start:dev
```
@@ -31,9 +32,10 @@ npm run verify
Он запускает zero-warning lint,
application/test typechecks, Jest и build. `npm run lint:fix` — отдельная
записывающая команда, `npm run test:cov` — диагностика без общего числового
threshold. `npm run test:e2e` пока не является passing gate: Prisma schema
engine останавливает migration до запуска Jest. Точный статус и trigger
пересмотра находятся в [remediation registry](../docs/development/audit-remediation.md).
threshold. `npm run test:e2e` отдельно проверяет все HTTP suites на новых базах
и runtime OpenAPI с соседним frontend checkout. Для полной backend-проверки
выполните обе команды. Результаты — в
[remediation registry](../docs/development/audit-remediation.md).
Общий `tsconfig.json` включает `strict: true` и `noFallthroughCasesInSwitch`
для приложения, тестов и сборок. ESLint запрещает non-null assertions
@@ -72,12 +74,26 @@ npm run test:openapi-contract
## Реальная SQLite и сохранность данных
После `nvm use --silent` запускайте `npm run test:sqlite` при изменении auth,
карточных операций или DB boundary. Runner запускает существующие HTTP suites
последовательно, каждую на новой `/tmp/bank-cards-*/test.db`, применяет migrations
с `RUST_LOG=info` и удаляет только созданную им директорию. Внешний `DATABASE_URL`
заменяется временным; `.env` и пользовательские данные не изменяются. Ошибка
migration или Jest возвращает ненулевой exit code. Нужен доступ к loopback-порту.
Это отдельный scope, а не подтверждение всего `test:e2e` (задача 03).
карточных операций или DB boundary, `npm run test:e2e` — для всех HTTP suites.
Обе команды используют один runner: отдельный каталог `wealthledger-e2e-*`
в системном temp на каждую suite, один `DATABASE_URL` для migrations и Jest.
Внешний `DATABASE_URL` заменяется временным; `.env` и пользовательские данные
не изменяются. Прямой Jest без runner отклоняется до обращения к базе.
При ошибке migration/Jest или SIGINT/SIGTERM runner останавливает дочерние
процессы, удаляет свой каталог и возвращает ненулевой exit code.
Нужен доступ к локальным HTTP-портам; sandbox может его запрещать.
`prisma.config.ts` удаляет унаследованный `RUST_LOG` только в процессе Prisma CLI:
на Prisma 7.9.1 уровни `warn`/`error` вызывают пустой `Schema engine error`
при fresh migration, без переменной миграция проходит. Постоянный
`RUST_LOG=info` и обновление зависимостей не нужны. Logging приложения
настраивается отдельно. История migrations применяется штатным `migrate deploy`.
Регрессия самого запуска: `node test/sqlite-regression.cjs`. Она выполняет
три последовательных и два параллельных полных e2e, проверяет уникальность DB,
сохранность вымышленного внешнего файла, отказ migration и SIGINT/SIGTERM cleanup.
Логи остаются в каталоге из вывода. Для одной suite:
`node test/sqlite.cjs app.e2e-spec.ts`.
| Риск | Проверка реальной DB |
| --- | --- |