fix(tradein/ui): этаж сделки скрывался у всех 96 974 — требовалось второе поле
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 57s
CI / openapi-codegen-check (pull_request) Has been skipped
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 8s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Successful in 57s
CI / openapi-codegen-check (pull_request) Has been skipped
Карточка печатала «этаж X/Y» только когда непусты ОБА поля. Замер на проде 13.08: deals.floor заполнен у 96 974 из 96 974, deals.total_floors — у 0. Открытый набор Росреестра этажности не содержит в принципе, то есть это свойство источника, а не недоехавшие данные. Итог: этаж не показывался никогда, при том что он известен всегда. Правильный образец уже был в этом же дереве — BuildingListingsDrawer печатает «этаж N», когда этажность неизвестна. Повторяю его, а не изобретаю. Данных правка не требует и не запрашивает: показывает то, что уже лежит. Красный прогон: тем же файлом теста на origin/main — 1 failed, 2 passed. Падает ровно боевой случай (этаж есть, этажности нет); два контрольных (дробь при известной этажности, пусто при неизвестном этаже) зелены с ОБЕИХ сторон, то есть тест не односторонний и не позеленел бы от «печатать всегда». Refs #2674
This commit is contained in:
parent
d6c000eddb
commit
68706d631f
2 changed files with 66 additions and 2 deletions
|
|
@ -156,8 +156,15 @@ function DealRow({ deal }: { deal: AnalogLot }) {
|
||||||
<span className="a-main">{deal.address}</span>
|
<span className="a-main">{deal.address}</span>
|
||||||
<span className="a-sub">
|
<span className="a-sub">
|
||||||
{deal.area_m2.toFixed(1)} м² · {deal.rooms === 0 ? "студия" : `${deal.rooms}-к`}
|
{deal.area_m2.toFixed(1)} м² · {deal.rooms === 0 ? "студия" : `${deal.rooms}-к`}
|
||||||
{deal.floor !== null && deal.total_floors !== null
|
{/* #2674: этажность у сделок Росреестра пуста ВСЕГДА (0 из 96 974 —
|
||||||
? ` · этаж ${deal.floor}/${deal.total_floors}`
|
открытый набор её не содержит), а этаж заполнен у 96 974 из 96 974.
|
||||||
|
Прежнее условие требовало оба поля, поэтому этаж был скрыт у ВСЕХ
|
||||||
|
сделок. Печатаем «этаж N», когда этажности нет, — ровно так уже
|
||||||
|
делает BuildingListingsDrawer для объявлений. */}
|
||||||
|
{deal.floor !== null
|
||||||
|
? deal.total_floors !== null
|
||||||
|
? ` · этаж ${deal.floor}/${deal.total_floors}`
|
||||||
|
: ` · этаж ${deal.floor}`
|
||||||
: ""}
|
: ""}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
/**
|
||||||
|
* #2674 — этаж сделки скрывался у ВСЕХ сделок из-за требования второго поля.
|
||||||
|
*
|
||||||
|
* Замер на проде 13.08.2026: `deals.floor` заполнен у 96 974 из 96 974,
|
||||||
|
* `deals.total_floors` — у 0 из 96 974. Открытый набор Росреестра этажности не
|
||||||
|
* содержит в принципе, то есть это не «данные не доехали», а свойство источника.
|
||||||
|
*
|
||||||
|
* Прежнее условие печатало «этаж X/Y» только когда непусты ОБА поля, поэтому
|
||||||
|
* этаж не показывался никогда. Соседний компонент (BuildingListingsDrawer) уже
|
||||||
|
* делал правильно — печатал «этаж N», когда этажность неизвестна.
|
||||||
|
*/
|
||||||
|
import { render, screen } from "@testing-library/react";
|
||||||
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
|
import { DealsCard } from "../DealsCard";
|
||||||
|
import type { AggregatedEstimate, AnalogLot } from "@/types/trade-in";
|
||||||
|
|
||||||
|
function makeDeal(overrides: Partial<AnalogLot> = {}): AnalogLot {
|
||||||
|
return {
|
||||||
|
address: "Екатеринбург, Ленина 5",
|
||||||
|
area_m2: 55.4,
|
||||||
|
rooms: 2,
|
||||||
|
floor: 7,
|
||||||
|
total_floors: null,
|
||||||
|
price_rub: 6_500_000,
|
||||||
|
price_per_m2: 117_328,
|
||||||
|
source: "rosreestr",
|
||||||
|
deal_date: "2026-01-01",
|
||||||
|
...overrides,
|
||||||
|
} as AnalogLot;
|
||||||
|
}
|
||||||
|
|
||||||
|
function makeEstimate(deals: AnalogLot[]): AggregatedEstimate {
|
||||||
|
return {
|
||||||
|
actual_deals: deals,
|
||||||
|
period_months: 12,
|
||||||
|
} as unknown as AggregatedEstimate;
|
||||||
|
}
|
||||||
|
|
||||||
|
describe("DealsCard — этаж сделки", () => {
|
||||||
|
it("печатает этаж, когда этажность неизвестна (боевой случай: 100% сделок)", () => {
|
||||||
|
render(<DealsCard estimate={makeEstimate([makeDeal()])} />);
|
||||||
|
// Именно «этаж 7» без дроби — этажности у сделок Росреестра нет никогда.
|
||||||
|
expect(screen.getByText(/этаж 7/)).toBeTruthy();
|
||||||
|
expect(screen.queryByText(/этаж 7\//)).toBeNull();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("печатает дробь, когда этажность известна — прежнее поведение цело", () => {
|
||||||
|
render(<DealsCard estimate={makeEstimate([makeDeal({ total_floors: 9 })])} />);
|
||||||
|
expect(screen.getByText(/этаж 7\/9/)).toBeTruthy();
|
||||||
|
});
|
||||||
|
|
||||||
|
it("не печатает ничего, когда неизвестен сам этаж", () => {
|
||||||
|
render(<DealsCard estimate={makeEstimate([makeDeal({ floor: null })])} />);
|
||||||
|
expect(screen.queryByText(/этаж/)).toBeNull();
|
||||||
|
});
|
||||||
|
});
|
||||||
Loading…
Add table
Reference in a new issue