[CL-1176] Тест-инфра: условные infra-моки — int-тесты получают реальные prisma/config #1193

Merged
andrei merged 1 commit from feature/claude-cl1176-conditional-prisma-mock into master 2026-07-23 10:17:47 +00:00
Owner

Что сделано

Устранён источник фиктивных «интеграционных» тестов (выбор CEO из вердикт-меню): фабрики трёх инфраструктурных моков в src/__tests__/setup.ts (@prisma/client, config/prisma.js, config/index.js) стали условными — для файлов *.int.test.ts возвращают importOriginal(). Интеграционный тест теперь ФИЗИЧЕСКИ не может молча бежать по prismaMock; vi.unmock в int-файлах больше не нужен (существующие остаются no-op-совместимыми).

Страж механизма: real-prisma-guard.int.test.ts — три проверки (реальный SQL против реальной БД, настоящий Prisma.Decimal с арифметикой, настоящий config.escrow) БЕЗ vi.unmock. Red-фаза зафиксирована: до правки 3/3 падали на моках.

Попутно: единый TRUNCATE-канон в E2E-файлах — серийный прогон всех 6 int-файлов на одной эфемерной БД 29/29 passed (раньше межфайловые FK-конфликты RESTRICT).

Зачем

Прецедент сессии: «E2E» бежал по глобальному моку и был зелёным, не тронув БД. Условные фабрики делают этот класс фикций структурно невозможным, сохраняя vi.mock-семантику для 873 юнит-файлов.

План тестирования

Полный юнит-сьют: 10998 passed / 0 failed (юнит-поведение не тронуто). Все int-файлы серийно на реальной БД: 29/29. tsc чист, eslint 0 warnings.

Где могу ошибаться

  • Определение testPath: expect.getState().testPath c fallback на __vitest_worker__.filepath — если будущий Vitest сменит оба API, int-файлы тихо получат моки; страж real-prisma-guard это ПОЙМАЕТ (упадёт в E2E-прогоне).
  • Соглашение по имени *.int.test.ts — новые интеграционные файлы обязаны следовать неймингу; страж документирует.
## Что сделано Устранён источник фиктивных «интеграционных» тестов (выбор CEO из вердикт-меню): фабрики трёх инфраструктурных моков в `src/__tests__/setup.ts` (@prisma/client, config/prisma.js, config/index.js) стали условными — для файлов `*.int.test.ts` возвращают `importOriginal()`. Интеграционный тест теперь ФИЗИЧЕСКИ не может молча бежать по prismaMock; `vi.unmock` в int-файлах больше не нужен (существующие остаются no-op-совместимыми). Страж механизма: `real-prisma-guard.int.test.ts` — три проверки (реальный SQL против реальной БД, настоящий Prisma.Decimal с арифметикой, настоящий config.escrow) БЕЗ vi.unmock. Red-фаза зафиксирована: до правки 3/3 падали на моках. Попутно: единый TRUNCATE-канон в E2E-файлах — серийный прогон всех 6 int-файлов на одной эфемерной БД 29/29 passed (раньше межфайловые FK-конфликты RESTRICT). ## Зачем Прецедент сессии: «E2E» бежал по глобальному моку и был зелёным, не тронув БД. Условные фабрики делают этот класс фикций структурно невозможным, сохраняя vi.mock-семантику для 873 юнит-файлов. ## План тестирования Полный юнит-сьют: 10998 passed / 0 failed (юнит-поведение не тронуто). Все int-файлы серийно на реальной БД: 29/29. tsc чист, eslint 0 warnings. ## Где могу ошибаться - Определение testPath: `expect.getState().testPath` c fallback на `__vitest_worker__.filepath` — если будущий Vitest сменит оба API, int-файлы тихо получат моки; страж real-prisma-guard это ПОЙМАЕТ (упадёт в E2E-прогоне). - Соглашение по имени `*.int.test.ts` — новые интеграционные файлы обязаны следовать неймингу; страж документирует.
[CL-1176] тест-инфра: условные infra-моки — *.int.test.ts получают реальные prisma/config
All checks were successful
CI / Telegram Mini App (pull_request) Successful in 1m44s
CI / Python SDK (pull_request) Successful in 28s
CI / Secrets Scan (pull_request) Successful in 14s
CI / Contracts (pull_request) Successful in 2m43s
CI / Prisma Migrate Gate (pull_request) Successful in 2m2s
CI / API (pull_request) Successful in 18m57s
CI / App (pull_request) Successful in 21m17s
9a2c9320ec
Глобальный prismaMock однажды молча подменил «интеграционный» E2E (тест
зелёный, БД не тронута). Фабрики трёх инфраструктурных моков в setup.ts
(@prisma/client, config/prisma.js, config/index.js) теперь условные: для
файлов *.int.test.ts возвращают importOriginal() — фикция «интеграция на
моке» структурно невозможна, vi.unmock в интеграционных файлах больше не
нужен (существующие остаются no-op-совместимыми, vi.mock-семантика и
юнит-поведение не тронуты: 10998 passed). Страж механизма —
real-prisma-guard.int.test.ts (red до правки: 3/3 падали на моках).
Попутно унифицирован TRUNCATE-канон в E2E-файлах — серийный прогон
всех 6 int-файлов на одной БД: 29/29 passed (раньше межфайловые FK-конфликты).
andrei scheduled this pull request to auto merge when all checks succeed 2026-07-23 10:15:59 +00:00
andrei merged commit 39f5c542cb into master 2026-07-23 10:17:47 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
europa-tech-srl/europatech!1193
No description provided.