html-embed: клиентский гейт исполнения JS (shouldExecute) не покрыт тестами #77

Closed
opened 2026-06-21 02:33:10 +03:00 by Ghost · 0 comments

Найдено в multi-aspect code review всех изменений с коммита 053a9c0d (ветка develop).

Грань: test-coverage · Severity: warning
Где: apps/client/src/features/editor/components/html-embed/html-embed-view.tsx:73

Проблема
shouldExecute = !editor.isEditable || htmlEmbedEnabled — самое security-нагруженное решение фичи на клиенте (исполнится ли произвольный admin-JS в браузере читателя). Ветки нетривиальны: (a) read-only/share-режим ВСЕГДА исполняет независимо от тоггла (полагаясь на серверный strip для OFF-шаров); (b) editable-режим исполняет только при htmlEmbedEnabled; (c) OFF+editable очищает контейнер. Ни одна не покрыта. Будущий рефактор, переключивший read-only-ветку на htmlEmbedEnabled (которое анонимный зритель читает как false), молча сломает исполнение на публичных шарах без падающего теста.

Предлагаемый фикс
Вынести решение в экспортируемый чистый хелпер (resolveShouldExecuteEmbed({isEditable, htmlEmbedEnabled})) по образцу resolveCardStatus и покрыть все 4 комбинации (в частности read-only+OFF всё ещё исполняет; editable+OFF — нет).

Связанные: #27

Найдено в multi-aspect code review всех изменений с коммита `053a9c0d` (ветка develop). **Грань:** test-coverage · **Severity:** warning **Где:** `apps/client/src/features/editor/components/html-embed/html-embed-view.tsx:73` **Проблема** `shouldExecute = !editor.isEditable || htmlEmbedEnabled` — самое security-нагруженное решение фичи на клиенте (исполнится ли произвольный admin-JS в браузере читателя). Ветки нетривиальны: (a) read-only/share-режим ВСЕГДА исполняет независимо от тоггла (полагаясь на серверный strip для OFF-шаров); (b) editable-режим исполняет только при htmlEmbedEnabled; (c) OFF+editable очищает контейнер. Ни одна не покрыта. Будущий рефактор, переключивший read-only-ветку на htmlEmbedEnabled (которое анонимный зритель читает как false), молча сломает исполнение на публичных шарах без падающего теста. **Предлагаемый фикс** Вынести решение в экспортируемый чистый хелпер (resolveShouldExecuteEmbed({isEditable, htmlEmbedEnabled})) по образцу resolveCardStatus и покрыть все 4 комбинации (в частности read-only+OFF всё ещё исполняет; editable+OFF — нет). **Связанные:** #27
Ghost closed this issue 2026-06-21 03:02:11 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: vvzvlad/gitmost#77