fix(tradein/ui): этаж сделки скрывался у всех 96 974 — требовалось второе поле (#2674) #2861
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-sub">
|
||||
{deal.area_m2.toFixed(1)} м² · {deal.rooms === 0 ? "студия" : `${deal.rooms}-к`}
|
||||
{deal.floor !== null && deal.total_floors !== null
|
||||
? ` · этаж ${deal.floor}/${deal.total_floors}`
|
||||
{/* #2674: этажность у сделок Росреестра пуста ВСЕГДА (0 из 96 974 —
|
||||
открытый набор её не содержит), а этаж заполнен у 96 974 из 96 974.
|
||||
Прежнее условие требовало оба поля, поэтому этаж был скрыт у ВСЕХ
|
||||
сделок. Печатаем «этаж N», когда этажности нет, — ровно так уже
|
||||
делает BuildingListingsDrawer для объявлений. */}
|
||||
{deal.floor !== null
|
||||
? deal.total_floors !== null
|
||||
? ` · этаж ${deal.floor}/${deal.total_floors}`
|
||||
: ` · этаж ${deal.floor}`
|
||||
: ""}
|
||||
</span>
|
||||
</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