[test] Тест-стратегия #204: оставшиеся фазы (хвост Ф2 + Ф3 безопасность/DB-харнесс + Ф4 контракты) #245

Closed
opened 2026-06-28 03:42:58 +03:00 by Ghost · 0 comments

Выделено из #204 (закрыт: приоритетный поднабор плана реализован в PR #230 — Фаза 1 + часть Фазы 2). Здесь — остаток тест-стратегии, чтобы план не потерялся.

Уже сделано (PR #230)

  • Фаза 1: mcp-clients.lease.spec.ts (жизненный цикл lease/refcount/eviction MCP-клиента).
  • Фаза 2 (частично): editor-ext table-utils (transpose/moveRow/round-trip) + math-tokenizer false-positive; client emoji-menu (+it.fails на незащищённый JSON.parse), sort-cells, normalizeTableColumnWidths; mcp htmlEmbed/pageBreak data-loss + footnote-diff; server export getInternalLinkPageName (баг исправлен + тест).

Остаток

Фаза 2 (хвост, data-integrity чистых функций)

  • ai-chat: экспорт+тест SSRF guardedFetch/lookup, decideClose; decryptHeaders fail-open.
  • editor-ext: recreateTransform-инвариант (apply(diff)=target), moveRow/moveColumn, getSelectionRangeInColumn, addUniqueIdsToDoc.
  • client: ordered-emitter диктовки, paste-хелперы, decideTurnEnd/sendNow (после R-рефакторов).
  • mcp: round-trip медиа (video/youtube/embed/excalidraw/audio/pdf), cookie-парсинг performLogin, applyAnchorInDoc.

Фаза 3 — серверная безопасность/доступ (нужен DB-харнесс Postgres + R-core)

  • getShareForPage наследование share, isSharingAllowed toggle, getShareTree restricted-ancestor, lookupTransclusionForShare access-граф, acceptInvitation атомарность.
  • AiSettingsService (секреты write-only, неутечка ключей), environment.validation (после снятия process.exit).
  • common: yjs.util (setYjsMark/removeYjsMarkByAttribute/updateYjsMarkAttribute) — 0 тестов.

Фаза 4 — добивка и контракты

  • client tree-reducers/utils (applyUpdateOne, tree-utils, formatRelativeTime), transclusion-lookup-context.
  • contract-тесты: паритет SHARED_TOOL_SPECS ↔ in-app/MCP; дрейф recreate-transform (vendored editor-ext vs npm в mcp/diff.ts).
  • замена тавтологичных спеков (storage.service.spec.ts, environment.service.spec.ts) на проверки делегирования.
  • завести issue/фикс на findBreadcrumbPath-мутацию входа.

Инфраструктура

  • Поставить @vitest/coverage-v8 и/или починить istanbul на ESM-импорте @docmost/editor-ext, ввести порог покрытия (coverage-gate сейчас отсутствует).
  • DB-харнесс (Postgres) — блокирует 5 share/invitation integration-тестов.

Полный детальный план по модулям — в #204.

> Выделено из #204 (закрыт: приоритетный поднабор плана реализован в PR #230 — Фаза 1 + часть Фазы 2). Здесь — **остаток** тест-стратегии, чтобы план не потерялся. ## Уже сделано (PR #230) - **Фаза 1:** `mcp-clients.lease.spec.ts` (жизненный цикл lease/refcount/eviction MCP-клиента). - **Фаза 2 (частично):** editor-ext table-utils (transpose/moveRow/round-trip) + math-tokenizer false-positive; client emoji-menu (+`it.fails` на незащищённый `JSON.parse`), sort-cells, `normalizeTableColumnWidths`; mcp htmlEmbed/pageBreak data-loss + footnote-diff; server export `getInternalLinkPageName` (баг исправлен + тест). ## Остаток ### Фаза 2 (хвост, data-integrity чистых функций) - ai-chat: экспорт+тест SSRF `guardedFetch`/`lookup`, `decideClose`; `decryptHeaders` fail-open. - editor-ext: `recreateTransform`-инвариант (apply(diff)=target), `moveRow`/`moveColumn`, `getSelectionRangeInColumn`, `addUniqueIdsToDoc`. - client: ordered-emitter диктовки, paste-хелперы, `decideTurnEnd`/`sendNow` (после R-рефакторов). - mcp: round-trip медиа (`video/youtube/embed/excalidraw/audio/pdf`), cookie-парсинг `performLogin`, `applyAnchorInDoc`. ### Фаза 3 — серверная безопасность/доступ (нужен DB-харнесс Postgres + R-core) - `getShareForPage` наследование share, `isSharingAllowed` toggle, `getShareTree` restricted-ancestor, `lookupTransclusionForShare` access-граф, `acceptInvitation` атомарность. - `AiSettingsService` (секреты write-only, неутечка ключей), `environment.validation` (после снятия `process.exit`). - common: `yjs.util` (`setYjsMark`/`removeYjsMarkByAttribute`/`updateYjsMarkAttribute`) — 0 тестов. ### Фаза 4 — добивка и контракты - client tree-reducers/utils (`applyUpdateOne`, tree-utils, `formatRelativeTime`), `transclusion-lookup-context`. - contract-тесты: паритет `SHARED_TOOL_SPECS` ↔ in-app/MCP; дрейф `recreate-transform` (vendored editor-ext vs npm в `mcp/diff.ts`). - замена тавтологичных спеков (`storage.service.spec.ts`, `environment.service.spec.ts`) на проверки делегирования. - завести issue/фикс на `findBreadcrumbPath`-мутацию входа. ### Инфраструктура - Поставить `@vitest/coverage-v8` и/или починить istanbul на ESM-импорте `@docmost/editor-ext`, ввести порог покрытия (coverage-gate сейчас отсутствует). - DB-харнесс (Postgres) — блокирует 5 share/invitation integration-тестов. Полный детальный план по модулям — в #204.
Ghost added the test label 2026-06-28 03:42:58 +03:00
Ghost closed this issue 2026-06-28 03:46:13 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: vvzvlad/gitmost#245