test(server): integration harness + deferred coverage (real Postgres/Redis) #115
Closed
Ghost
wants to merge 0 commits from
test/deferred-integration-coverage into develop
pull from: test/deferred-integration-coverage
merge into: vvzvlad:develop
vvzvlad:main
vvzvlad:test/244-part-b
vvzvlad:fix/255-ws-redis-adapter-leak
vvzvlad:feat/251-intentional-clear
vvzvlad:fix/252-e2e-open-handles
vvzvlad:feat/184-autonomous-agent-runs
vvzvlad:feat/221-image-captions
vvzvlad:feat/git-sync
vvzvlad:refactor/193-tool-spec-registry
vvzvlad:fix/244-dataloss-bugs
vvzvlad:fix/embeddings-reindex-progress
vvzvlad:develop
vvzvlad:feature/offline-sync
vvzvlad:feat/229-catalog-yaml
vvzvlad:feat/243-blob-sandbox
vvzvlad:feat/228-inline-footnotes
vvzvlad:fix/qa-ui-bugs-216-218
vvzvlad:feature/agent-roles-catalog
vvzvlad:fix/share-alias-rename
vvzvlad:fix/ai-chat-empty-render
vvzvlad:feat/191-chat-doc-binding
vvzvlad:feat/201-temporary-notes
vvzvlad:feat/198-interrupt-agent
vvzvlad:feat/ai-chat-full-history
vvzvlad:feat/199-ai-generate-title
vvzvlad:feat/205-share-aliases
vvzvlad:batch/issues-189-187-170
vvzvlad:feat/170-mcp-test-button
vvzvlad:feat/189-context-badge
vvzvlad:feat/198-interrupt-agent-send-now
vvzvlad:fix/issues-190-159
vvzvlad:fix/ai-chat-new-chat-during-stream
vvzvlad:fix/ai-chat-stream-perf
vvzvlad:batch/issues-2026-06-25
vvzvlad:feat/ai-chat-persistent-history
vvzvlad:fix/ai-chat-copy-chat-wysiwyg
vvzvlad:fix/ai-stream-reset-resilience
vvzvlad:fix/ai-stream-undici-timeout
vvzvlad:fix/footnote-review-1227-followup
vvzvlad:fix/ai-chat-token-counter-realtime
vvzvlad:docs/manual-qa-test-plan
No Reviewers
Labels
Clear labels
bug
documentation
duplicate
enhancement
epic
feature
good first issue
help wanted
idea
invalid
needs-human
question
refactor
review/approved
review/changes-requested
review/needs
security
status/blocked
status/done
status/in-progress
status/ready
test
wontfix
Something isn't working
Improvements or additions to documentation
This issue or pull request already exists
New feature or request
Large multi-phase effort spanning many changes
New functionality request
Good for newcomers
Extra attention is needed
Idea / proposal for discussion
This doesn't seem right
эскалация: нужно решение человека
Further information is requested
Code cleanup / refactoring
в последнем ревью нет открытых blocking-находок
последнее ревью оставило открытые blocking-находки
head не ревьюился (head != reviewed_head)
Security / hardening issue
ждёт зависимость blocked_by
закрыто и проверено
в активной работе (мягкая заявка)
специфицировано, не заблокировано, ждёт исполнителя
Test coverage / test infrastructure
This will not be worked on
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: vvzvlad/gitmost#115
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking 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