mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-30 19:58:50 +00:00
`src/backdrop-pick.ts` и `src/decor-image-editor.ts` не входили в tsconfig.test.json — юнитов у них не было вовсе. Смок при этом подменял `hass.callWS` целиком и до `uploadFromInput`, `upload`, `delete` не доходил; в шапке файла это было честно написано. AC1 #51 обещал доказательство «component unit + smoke» — не было ни того, ни другого. Цена известна: #427 — файл тяжелее 2 МиБ нельзя было добавить ничем, гасли обе кнопки диалога, включая «уменьшить копию», — прожил четыре круга ревью именно потому, что этот путь не проверяло ничто. Оба файла теперь в tsconfig.test.json (компиляция +6 с, без правок продуктового кода) и покрыты 13 юнитами: - классификация: проходной файл, тяжелее лимита источника (guard с probe.kind='safe' — предупреждение о размере, не об отказе), warn, hard, unknown, неподдерживаемый формат; - состав кнопок диалога на трёх случаях. Декор свыше лимита: «Отмена» и «уменьшить копию», без «оставить оригинал» — это и есть #427. Подложка на том же файле сохраняет обе кнопки, hard остаётся с одной «Отмена», unknown предупреждает, а не проходит тихо; - uploadFromInput: сброс input.value, молчание на занятом, отказ формата, исключение классификации, передача флага замены в оба слота; - upload: multipart-поле и URL, порядок каталога, палитра против замены ссылки в диалоге, восемь ответов бэкенда с разными текстами, отпускание busy на отказе, запрет второго запроса поверх незакончившегося; - delete: ссылки на ассет, отказ в подтверждении, чистка каталога, карты и палитры, различение in_use, сохранность каталога на отказе сервера; - loadCatalog: отбор валидных строк и тост на отказе. Смок `smoke_decor_images.mjs` получил последний блок, который проходит настоящие uploadFromInput → upload → delete в собранном бандле, подменяя только транспорт: fetchWithAuth и одну ветку callWS. Свидетели (§2.7, #435). Девять мутаций прогнаны на собранном дереве, каждая краснит свой тест: условие #427 → тест состава кнобок; снятие лимита источника; input.value; флаг замены; too_large; busy в upload; подтверждение удаления; used_by; проглоченный отказ каталога. Мутация busy сначала вешала прогон и уносила пять тестов cancelledByParent — тест переписан так, чтобы падать на сравнении, а не по таймауту. В реестр добавлены три мутанта на продуктовый код: условие #427, потеря флага замены, схлопывание кодов ошибок. Гейты: npm test 1806 tests, 1805 pass, 0 fail (было 1791); mutation-gate --check зелёный. Смок локально не прогнать — Chromium в песочнице нет, проверит CI. Issue: #433 User-Visible: no
51 lines
2.7 KiB
JSON
51 lines
2.7 KiB
JSON
{
|
|
"extends": "./tsconfig.json",
|
|
"compilerOptions": {
|
|
"module": "esnext",
|
|
"outDir": "test-build",
|
|
"noEmit": false,
|
|
"declaration": false,
|
|
"resolveJsonModule": true,
|
|
"incremental": true,
|
|
"tsBuildInfoFile": "test-build/.tsbuildinfo"
|
|
},
|
|
"include": [
|
|
"src/color.ts", "src/styles.ts", "src/styles/*.styles.ts", "src/logic.ts", "src/i18n.ts", "src/i18n/registry.ts", "src/i18n/language-runtime.ts", "src/glow-blend.ts", "src/grid-scale.ts", "src/device-visual.ts", "src/device-pulse.ts", "src/device-presentation.ts", "src/device-marker-geometry.ts",
|
|
"src/device-face.ts", "src/device-toggle.ts", "src/marker-toggle-entity.ts", "src/activity-runtime.ts", "src/device-area-relocation.ts",
|
|
"src/ha-binding-status.ts",
|
|
"src/integration-provider.ts", "src/vacuum.ts",
|
|
"src/sun.ts",
|
|
"src/light-visibility.ts", "src/glow-scene.ts", "src/space-render.ts",
|
|
"src/resize.ts", "src/resize-labels.ts", "src/resize-controller.ts", "src/wall-record-preservation.ts",
|
|
"src/rules.ts",
|
|
"src/devices.ts", "src/device-inbox.ts",
|
|
"src/virtual-light-state.ts",
|
|
"src/backdrop-probe.ts",
|
|
"src/types.ts",
|
|
"src/space-geometry.ts", "src/junction-limits.ts",
|
|
"src/space-order.ts", "src/card-editor-validation.ts",
|
|
"src/signing.ts", "src/initial-load.ts", "src/space-model-selection.ts", "src/space-dialog.ts",
|
|
"src/visual-continuity.ts", "src/mode-transition.ts", "src/viewport-transition.ts", "src/editor-runtime-loader.ts", "src/editor-secondary.ts", "src/pointer-modality.ts",
|
|
"src/render-device-snapshot.ts",
|
|
"src/command-stack.ts", "src/device-position-history.ts",
|
|
"src/coordinate-canonicalization.ts",
|
|
"src/serialized-write-queue.ts",
|
|
"src/align-grid.ts",
|
|
"src/plan-optimizer.ts", "src/space-reference-repair.ts", "src/space-deletion.ts",
|
|
"src/plan-geometry-preflight.ts",
|
|
"src/furniture.ts", "src/decor-assets.ts",
|
|
"src/floating-surface.ts", "src/floating-surface-controller.ts", "src/help-behavior.ts", "src/support-feedback.ts",
|
|
"src/hp-help.ts", "src/hp-dialog.ts", "src/hp-color-opacity.ts", "src/danger-confirm.ts",
|
|
"src/opening-placement.ts", "src/opening-dimensions.ts", "src/partition-openings.ts", "src/plan-snap-overlay.ts", "src/wall-face-graph.ts", "src/wall-face-repair.ts", "src/room-deletion.ts", "src/render/opening-symbol.ts",
|
|
"src/wall-thickness.ts",
|
|
"src/wall-segment-model.ts",
|
|
"src/wall-merge.ts",
|
|
"src/physical-geometry.ts",
|
|
"src/labs.ts", "src/iso-projection.ts", "src/iso-walls.ts", "src/iso-openings.ts",
|
|
"src/open-spans.ts",
|
|
"src/zero-walls.ts",
|
|
"src/editors/decor/geometry.ts",
|
|
"src/backdrop-pick.ts", "src/decor-image-editor.ts"
|
|
]
|
|
}
|