mirror of
https://github.com/Matysh/houseplan-card
synced 2026-10-01 04:09:17 +00:00
refactor: one function owns the junction geometry of a space (#229 r2 M1)
Дефект High-1 был одинаковым в двух местах — и в живом рисовании, и в
«Оптимизировать планы», — потому что каждый вызывающий собирал геометрию
примыканий сам. Ревью r2 справедливо заметило, что и защита получилась
однобокой: юнит и мутант сторожили только оптимизатор, а путь карты — тот, где
дефект и был виден пользователю, — не сторожил никто. Заплатка в виде второго
мутанта-близнеца оставила бы причину на месте: два списка координат, которые
обязаны совпадать, но ничем не связаны.
Поэтому геометрия переехала в `spaceMergeGeometry(space, { excludeDraftId })`:
один источник комнат, колонн и концов черновиков, одни координаты, одно место,
где можно ошибиться. Оба вызывающих теперь строчка вызова.
Покрытие идёт за причиной, а не за симптомом: три юнита в
`test/wall-merge.test.mjs` проверяют масштаб полигонов (включая комнаты в форме
x/y/w/h и комнату без геометрии), исключение активного черновика и сам T-стык к
середине стороны комнаты. Мутанты `partition-merge-rescales-rooms` и
`chain-merge-sees-own-draft` перенацелены на общий модуль и теперь краснеют для
обоих путей сразу: 2 и 1 падение, проверено применением патча.
Сценарий с комнатой в смоке пробовал — не взлетел: рисование в комнату
поднимает `_offerWallFaces`, и цепочка не завершается штатно. Ломать смок под
тест не стал, юниты общего модуля покрывают оба пути честнее.
Issue: #229
User-Visible: no
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"version": 1,
|
||||
"fixture": "synthetic-only",
|
||||
"sourceFingerprint": "afa20fd81ac20e56571c5fc16e5f881b9fac8ead93f923b52d132c853f55cc48",
|
||||
"sourceFingerprint": "fc61db49515bfed7d6f6a7cb6f2011fafc323e3a75d048244fb02f0e3d39587d",
|
||||
"captureScriptSha256": "34f2219790d46efd8250e7a1bd829cb8fc0b0547e1260635fefa52407551b41b",
|
||||
"command": "npm run build && node demo/docs/capture.mjs",
|
||||
"scenarios": {
|
||||
@@ -13,7 +13,7 @@
|
||||
},
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"sourceSha256": "afa20fd81ac20e56571c5fc16e5f881b9fac8ead93f923b52d132c853f55cc48",
|
||||
"sourceSha256": "fc61db49515bfed7d6f6a7cb6f2011fafc323e3a75d048244fb02f0e3d39587d",
|
||||
"imageSha256": "d7ce576f5a70b1977277e15985bb409f40f205f6016eeebc62f76a4394effdb4"
|
||||
},
|
||||
"view-touch": {
|
||||
@@ -24,7 +24,7 @@
|
||||
},
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"sourceSha256": "afa20fd81ac20e56571c5fc16e5f881b9fac8ead93f923b52d132c853f55cc48",
|
||||
"sourceSha256": "fc61db49515bfed7d6f6a7cb6f2011fafc323e3a75d048244fb02f0e3d39587d",
|
||||
"imageSha256": "62c13b7f9dc6c0576735a727a1988bc35b9b28fc2a9d34e9a746a4dc3e01b28a"
|
||||
},
|
||||
"space-create": {
|
||||
@@ -35,7 +35,7 @@
|
||||
},
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"sourceSha256": "afa20fd81ac20e56571c5fc16e5f881b9fac8ead93f923b52d132c853f55cc48",
|
||||
"sourceSha256": "fc61db49515bfed7d6f6a7cb6f2011fafc323e3a75d048244fb02f0e3d39587d",
|
||||
"imageSha256": "a73bb2301677752c7980712af554d40f3fd6077944249677245c8135d325b1b9"
|
||||
},
|
||||
"room-contour-close": {
|
||||
@@ -46,7 +46,7 @@
|
||||
},
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"sourceSha256": "afa20fd81ac20e56571c5fc16e5f881b9fac8ead93f923b52d132c853f55cc48",
|
||||
"sourceSha256": "fc61db49515bfed7d6f6a7cb6f2011fafc323e3a75d048244fb02f0e3d39587d",
|
||||
"imageSha256": "8f234c7750809cbc75b3ce364dc2d3b55eebacd4b2b5e42b223d6e2cee9bb4ac"
|
||||
},
|
||||
"plan-context-tray": {
|
||||
@@ -57,7 +57,7 @@
|
||||
},
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"sourceSha256": "afa20fd81ac20e56571c5fc16e5f881b9fac8ead93f923b52d132c853f55cc48",
|
||||
"sourceSha256": "fc61db49515bfed7d6f6a7cb6f2011fafc323e3a75d048244fb02f0e3d39587d",
|
||||
"imageSha256": "3eee486fe5cc226e8b3c19c4035ebb279087432a69959d24b7edabc59d848582"
|
||||
},
|
||||
"device-editor": {
|
||||
@@ -68,7 +68,7 @@
|
||||
},
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"sourceSha256": "afa20fd81ac20e56571c5fc16e5f881b9fac8ead93f923b52d132c853f55cc48",
|
||||
"sourceSha256": "fc61db49515bfed7d6f6a7cb6f2011fafc323e3a75d048244fb02f0e3d39587d",
|
||||
"imageSha256": "a6360309a9a6125bdc2dfd411463d281af2f21a09b07e58eae1fc23d7371b8e5"
|
||||
},
|
||||
"device-display-preview": {
|
||||
@@ -79,7 +79,7 @@
|
||||
},
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"sourceSha256": "afa20fd81ac20e56571c5fc16e5f881b9fac8ead93f923b52d132c853f55cc48",
|
||||
"sourceSha256": "fc61db49515bfed7d6f6a7cb6f2011fafc323e3a75d048244fb02f0e3d39587d",
|
||||
"imageSha256": "4476e223863379ef9dfd0a1c89fb4c169a1249268e733ac11e5a2eec8d90f8f5"
|
||||
},
|
||||
"background-editor": {
|
||||
@@ -90,7 +90,7 @@
|
||||
},
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"sourceSha256": "afa20fd81ac20e56571c5fc16e5f881b9fac8ead93f923b52d132c853f55cc48",
|
||||
"sourceSha256": "fc61db49515bfed7d6f6a7cb6f2011fafc323e3a75d048244fb02f0e3d39587d",
|
||||
"imageSha256": "a83926911c2d6d468c81dfdf74be7e00cbbca9a02afade6e6b5644bdf4f46852"
|
||||
},
|
||||
"room-card": {
|
||||
@@ -101,7 +101,7 @@
|
||||
},
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"sourceSha256": "afa20fd81ac20e56571c5fc16e5f881b9fac8ead93f923b52d132c853f55cc48",
|
||||
"sourceSha256": "fc61db49515bfed7d6f6a7cb6f2011fafc323e3a75d048244fb02f0e3d39587d",
|
||||
"imageSha256": "48a5685039a5e0de2a28190d857b193c86e2e63606e3c7a8c40fc9d2b190da4e"
|
||||
},
|
||||
"device-info": {
|
||||
@@ -112,7 +112,7 @@
|
||||
},
|
||||
"theme": "dark",
|
||||
"language": "en",
|
||||
"sourceSha256": "afa20fd81ac20e56571c5fc16e5f881b9fac8ead93f923b52d132c853f55cc48",
|
||||
"sourceSha256": "fc61db49515bfed7d6f6a7cb6f2011fafc323e3a75d048244fb02f0e3d39587d",
|
||||
"imageSha256": "307b2ba224cd0b55c2e2936767a16cdda7af3ddffd292705f20c5a300e56c648"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user