лендинг: этаж перестал теряться на переходе к проверке #3279

Merged
bot-backend merged 2 commits from fix/mera-keep-floor-in-draft into main 2026-08-30 10:33:35 +00:00
Collaborator

Из отчёта тестировщика 30.08.2026, пункт 5 (первая половина). С уточнением: разбор дал не совсем то, что в отчёте.

Что в отчёте и что на самом деле

В отчёте: «форма собирает 6 полей, /estimate принимает 4». Схему из четырёх полей тестировщик увидел в ответе 422 — но тот перечисляет только ОБЯЗАТЕЛЬНЫЕ поля. TradeInEstimateInput принимает и floor, и total_floors, и repair_state как опциональные.

Зато под этим нашлось кое-что определённее:

  • этаж на лендинге обязателен — без него форма не отправляется («Укажите этаж, например «7/16»»);
  • saveDraft его не клал;
  • на целевой странице поля этажа нет вовсе;
  • комментарий в коде объяснял это тем, что «повторно набирать одно короткое поле дешевле, чем хранить лишнее».

Довод был неверен: переспросить негде. Обязательное поле работало чистой помехой — человек его заполнял, и оно исчезало.

Правка

Этаж кладётся в черновик по тому же доводу, которым там уже лежит состояние: выбросить уже полученный ответ и спросить его второй раз хуже, чем донести до следующего шага. Бэкенд его принимает, и на цену он влияет (первый и последний этаж).

Неверный комментарий заменён на то, что происходит.

Про тест — отдельно, потому что первый был негодным

Первая версия звала saveDraft({ floor }) напрямую. Она проверяла round-trip хранилища и оставалась зелёной, когда из FreeCheckCard убирали передачу этажа — то есть ровно при возврате чинимого дефекта. Сторож, который не сторожит: тест настоящий, но охраняет не то место.

Переписан через саму форму: заполняются все поля, форма отправляется, черновик читается. Снятие проводки даёт expected undefined to be '7/16' — красное по значению.

Плюс три случая на хранилище: старый черновик без поля переживает выкатку, нестроковое значение выпадает не унося остальное.

Чего эта правка НЕ делает

  • Не подключает анонимный расчёт. Целевая страница сейчас зовёт /coverage, а не /estimate — ручка за флагом public_estimate_enabled и к UI не подключена. Проба покрытия этаж не использует (CoverageProbeInput о нём не знает), так что на СЕГОДНЯШНИЙ бесплатный ответ правка не влияет: она возвращает данные, которые ждут платного шага.
  • Не трогает бейдж «6 ПОЛЕЙ». Он стоит в ряду «БЕЗ РЕГИСТРАЦИИ · БЕЗ ЗВОНКОВ · 6 ПОЛЕЙ», то есть говорит про трудозатраты заполнения, а не про число входов расчёта, и как утверждение верен. Прочтение «ответ считается по шести полям» справедливо считать риском копирайта — но это отдельное решение о формулировке, а не дефект.

Проверки

vitest 127 passed · tsc --noEmit rc=0 · eslint --max-warnings 0 rc=0.

Из отчёта тестировщика 30.08.2026, пункт 5 (первая половина). С уточнением: разбор дал не совсем то, что в отчёте. ## Что в отчёте и что на самом деле В отчёте: «форма собирает 6 полей, `/estimate` принимает 4». Схему из четырёх полей тестировщик увидел в ответе 422 — но **тот перечисляет только ОБЯЗАТЕЛЬНЫЕ** поля. `TradeInEstimateInput` принимает и `floor`, и `total_floors`, и `repair_state` как опциональные. Зато под этим нашлось кое-что определённее: - **этаж на лендинге обязателен** — без него форма не отправляется («Укажите этаж, например «7/16»»); - `saveDraft` его **не клал**; - на целевой странице **поля этажа нет вовсе**; - комментарий в коде объяснял это тем, что «повторно набирать одно короткое поле дешевле, чем хранить лишнее». Довод был неверен: переспросить негде. Обязательное поле работало чистой помехой — человек его заполнял, и оно исчезало. ## Правка Этаж кладётся в черновик по тому же доводу, которым там уже лежит состояние: выбросить уже полученный ответ и спросить его второй раз хуже, чем донести до следующего шага. Бэкенд его принимает, и на цену он влияет (первый и последний этаж). Неверный комментарий заменён на то, что происходит. ## Про тест — отдельно, потому что первый был негодным Первая версия звала `saveDraft({ floor })` напрямую. Она проверяла round-trip хранилища и **оставалась зелёной, когда из `FreeCheckCard` убирали передачу этажа** — то есть ровно при возврате чинимого дефекта. Сторож, который не сторожит: тест настоящий, но охраняет не то место. Переписан через саму форму: заполняются все поля, форма отправляется, черновик читается. Снятие проводки даёт `expected undefined to be '7/16'` — красное **по значению**. Плюс три случая на хранилище: старый черновик без поля переживает выкатку, нестроковое значение выпадает не унося остальное. ## Чего эта правка НЕ делает - **Не подключает анонимный расчёт.** Целевая страница сейчас зовёт `/coverage`, а не `/estimate` — ручка за флагом `public_estimate_enabled` и к UI не подключена. Проба покрытия этаж не использует (`CoverageProbeInput` о нём не знает), так что на СЕГОДНЯШНИЙ бесплатный ответ правка не влияет: она возвращает данные, которые ждут платного шага. - **Не трогает бейдж «6 ПОЛЕЙ».** Он стоит в ряду «БЕЗ РЕГИСТРАЦИИ · БЕЗ ЗВОНКОВ · 6 ПОЛЕЙ», то есть говорит про трудозатраты заполнения, а не про число входов расчёта, и как утверждение верен. Прочтение «ответ считается по шести полям» справедливо считать риском копирайта — но это отдельное решение о формулировке, а не дефект. ## Проверки `vitest` 127 passed · `tsc --noEmit` rc=0 · `eslint --max-warnings 0` rc=0.
bot-backend added 1 commit 2026-08-30 10:12:15 +00:00
лендинг: этаж перестал теряться на переходе к проверке
All checks were successful
CI Trade-In / changes (pull_request) Successful in 10s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 12s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 1m5s
df53ff5a5f
Этаж — обязательное поле карточки: без него форма не отправляется. При этом
saveDraft его не клал, а на целевой странице поля этажа нет вовсе. Комментарий
объяснял это тем, что «повторно набирать одно короткое поле дешевле, чем
хранить лишнее» — довод неверен: переспросить негде, и обязательное поле
работало чистой помехой.

Схема бэкенда этаж принимает (TradeInEstimateInput.floor), и на цену он влияет
(первый и последний этаж). Хранится теперь по тому же доводу, что и состояние:
выбросить уже полученный ответ и спросить второй раз хуже, чем донести.

Тест — через САМУ ФОРМУ, и это не формальность. Первая попытка защитить правку
звала saveDraft({floor}) напрямую: она проверяла round-trip хранилища и
оставалась зелёной, когда из FreeCheckCard убирали передачу этажа, то есть
ровно при возврате чинимого дефекта. Сторож, который не сторожит. Теперь форма
заполняется и отправляется целиком; снятие проводки даёт «expected undefined to
be 7/16» — красное по значению.

Плюс три случая на само хранилище: старый черновик без поля переживает выкатку,
нестроковое значение выпадает не унося остальное.
bot-backend added 1 commit 2026-08-30 10:23:14 +00:00
Merge branch 'main' into fix/mera-keep-floor-in-draft
All checks were successful
CI Trade-In / changes (pull_request) Successful in 13s
CI / changes (pull_request) Successful in 16s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 2m21s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
f3e05e1907
bot-backend merged commit 65dfdee63d into main 2026-08-30 10:33:35 +00:00
bot-backend deleted branch fix/mera-keep-floor-in-draft 2026-08-30 10:33:35 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#3279
No description provided.