fix(tradein/ui): этаж сделки скрывался у всех 96 974 — требовалось второе поле (#2674) (#2861)
All checks were successful
Deploy Trade-In / changes (push) Successful in 12s
Deploy Trade-In / test (push) Has been skipped
Deploy Trade-In / build-backend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / build-frontend (push) Successful in 2m16s
Deploy Trade-In / deploy (push) Successful in 1m7s
All checks were successful
Deploy Trade-In / changes (push) Successful in 12s
Deploy Trade-In / test (push) Has been skipped
Deploy Trade-In / build-backend (push) Has been skipped
Deploy Trade-In / build-browser (push) Has been skipped
Deploy Trade-In / build-frontend (push) Successful in 2m16s
Deploy Trade-In / deploy (push) Successful in 1m7s
This commit is contained in:
parent
d6c000eddb
commit
9e83eb4a53
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