test(server): integration harness + deferred coverage (real Postgres/Redis) #115
Reference in New Issue
Block a user
Delete Branch "test/deferred-integration-coverage"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Тесты: интеграционный харнесс + отложенное покрытие против реальных Postgres/Redis
Отчёт по скиллу архитектора.
1. Задача
Из
docs/backlog/feature-test-coverage-deferred.md: часть принятого тест-плана была отложена, т.к. требовала реального тестового Postgres / реального Redis / e2e-харнеса, которых в проекте не было — repo-зависимые проверки делались на моках, SQL/Lua-уровень не исполнялся. Нужно построить харнесс и закрыть отложенное.2. Решение — изолированный интеграционный харнесс
Тесты гоняются против изолированной авто-создаваемой БД
docmost_testи логического Redis DB 15 — dev-данные (docmost/ Redis db 0) не трогаются.apps/server/test/integration/db.ts—buildTestDb()зеркалитdatabase.module.tsодин-в-один (PostgresJSDialect + CamelCasePlugin + bigint-парсинг to:20/from:[20,1700]) + минимальные seed-хелперы; репозитории инстанцируются напрямую.global-setup.ts— DROP/CREATEdocmost_test,CREATE EXTENSION vector, миграции до latest через Kysely Migrator; падает громко при любой ошибочной миграции (никогда не гоняем на полу-мигрированной схеме).jest-integration.json+ скриптtest:int. Изоляция от unit-прогона: имя*.int-spec.tsНЕ матчит unit-testRegex\.spec\.ts$(дефис vs точка) + они внеsrc. Дефолтныйjestне тронут.3. Покрытие — 5 сьютов / 16 тестов, все зелёные против живых PG+Redis
htmlEmbed:true, НЕ затирая соседниеai/sharing(write-половина kill-switch) — перечитывается из БД.(name, workspace)→ Postgres23505; имя переиспользуемо после softDelete (partial unique indexWHERE deleted_at IS NULL); одинаковое имя в разных workspace разрешено.onDelete cascade) — реальный FK, не мок.ioredisEVAL sliding-window Lua — граница max (3 допущено / 4-й отклонён), re-admit после сдвига окна, same-ms различимые member'ы. Ловит баги в самой Lua (>=/PEXPIRE), которые FakeRedis не поймает.4. Найденные баги
Багов продукта не найдено (это бэкфилл покрытия). Ревью-субагент: APPROVE WITH SUGGESTIONS — критичные пункты (изоляция от unit-прогона, безопасность dev-БД/Redis, реальная инфра, точность ассертов, зеркало Kysely) подтверждены. Применил 2 его рекомендации по устойчивости: (a) бросать исключение при
status==='Error'в результатах миграции даже без top-level error; (b)TEST_REDIS_URL-override +ping()-preflight для раннего понятного отказа.5. Тестирование — статистика
Прогон (мной, независимо, после хардеринга):
Test Suites: 5 passed, Tests: 16 passedпротив живыхdocmost_test+ Redis db15. tsc чисто;jest --listTests | grep -c int-spec= 0 (unit-прогон их не видит).Циклы ревью: 1 (APPROVE с предложениями; 2 применены как minor-fix).
«Живая» проверка: для тест-инфры «работает» = сам интеграционный сьют зелёный против РЕАЛЬНЫХ PG/Redis (а не моков) — это и есть доказательство; браузер тут неприменим.
НЕ вошло (осознанно отложено, причины зафиксированы здесь)
AiChatService.stream(seamstreamTextonError/onFinish/onAbort +res.hijack) — самые тяжёлые (полный boot Nest + seam SDK), требуют отдельного e2e-слоя; харнесс этого PR — фундамент для них. Флагнул, т.к. доку удаляется этим коммитом.🤖 Generated with Claude Code
Ghost referenced this pull request2026-06-28 03:43:28 +03:00
Pull request closed