From d953899d929d9db1ca7812e12b07ad013d8db9c6 Mon Sep 17 00:00:00 2001 From: bot-backend Date: Sat, 5 Sep 2026 23:05:12 +0500 Subject: [PATCH] =?UTF-8?q?fix(mera):=20=D0=BF=D0=BE=D0=B4=D0=BF=D0=B8?= =?UTF-8?q?=D1=81=D1=8C=20=D1=82=D0=BE=D0=BD=D0=BA=D0=BE=D0=B3=D0=BE=20?= =?UTF-8?q?=D1=80=D1=8B=D0=BD=D0=BA=D0=B0=20=D0=B4=D0=BE=D0=B5=D0=B7=D0=B6?= =?UTF-8?q?=D0=B0=D0=B5=D1=82=20=D0=B4=D0=BE=20=D0=BA=D0=B0=D1=80=D1=82?= =?UTF-8?q?=D0=BE=D1=87=D0=BA=D0=B8=20=D0=BE=D1=86=D0=B5=D0=BD=D0=BE=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=D0=B9=20=D0=BC=D0=BE=D0=B4=D0=B5=D0=BB=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Карточка печатает тот же recommended_price, что и hero, но берёт его из своего endpoint и подписи не имела — рядом с итогом стояла неподписанная копия величины, исключённой из расчёта (ровно то, что #3339 чинил в hero). Проп note + проброс thinMarketNote(estimate.avito_imv) со страницы; подпись тем же классом .bench-chip__sub, ему же дан max-width, чтобы длинная строка не растягивала чип. Тест падает при снятии рендера подписи (проверено: 1 failed / 5 passed). --- tradein-mvp/frontend/src/app/page.tsx | 3 +- .../src/components/trade-in/IMVBenchmark.tsx | 10 +++++- .../__tests__/thinMarketBadge.test.tsx | 32 ++++++++++++++++++- .../src/components/trade-in/trade-in.css | 1 + 4 files changed, 43 insertions(+), 3 deletions(-) diff --git a/tradein-mvp/frontend/src/app/page.tsx b/tradein-mvp/frontend/src/app/page.tsx index 834247d2..0b4bf289 100644 --- a/tradein-mvp/frontend/src/app/page.tsx +++ b/tradein-mvp/frontend/src/app/page.tsx @@ -16,7 +16,7 @@ import { HTTPError } from "@/lib/api"; import { EstimateForm } from "@/components/trade-in/EstimateForm"; import { Topbar } from "@/components/trade-in/Topbar"; import { SourcesProgress } from "@/components/trade-in/SourcesProgress"; -import { HeroSummary } from "@/components/trade-in/HeroSummary"; +import { HeroSummary, thinMarketNote } from "@/components/trade-in/HeroSummary"; import { IMVBenchmark } from "@/components/trade-in/IMVBenchmark"; import { CianValuationCard } from "@/components/trade-in/CianValuationCard"; import { HouseInfoCard } from "@/components/trade-in/HouseInfoCard"; @@ -276,6 +276,7 @@ export default function TradeInPage() { @@ -59,6 +66,7 @@ export function IMVBenchmark({ benchmark, isLoading }: Props) {
{formatRub(recommended_price)}
+ {note &&
{note}
}
Диапазон
diff --git a/tradein-mvp/frontend/src/components/trade-in/__tests__/thinMarketBadge.test.tsx b/tradein-mvp/frontend/src/components/trade-in/__tests__/thinMarketBadge.test.tsx index 01c5d7f6..ed0fa74e 100644 --- a/tradein-mvp/frontend/src/components/trade-in/__tests__/thinMarketBadge.test.tsx +++ b/tradein-mvp/frontend/src/components/trade-in/__tests__/thinMarketBadge.test.tsx @@ -12,7 +12,12 @@ import { render, screen } from "@testing-library/react"; import { describe, expect, it, vi } from "vitest"; import { HeroSummary, thinMarketNote } from "../HeroSummary"; -import { FIXTURE_ESTIMATE, FIXTURE_INPUT } from "@/app/ui-preview/estimate/fixture"; +import { IMVBenchmark } from "../IMVBenchmark"; +import { + FIXTURE_ESTIMATE, + FIXTURE_IMV, + FIXTURE_INPUT, +} from "@/app/ui-preview/estimate/fixture"; import type { AggregatedEstimate, AvitoImvSummary } from "@/types/trade-in"; // Бренд и блок прозрачности ходят в сеть (TanStack Query) — к подписи отношения @@ -81,3 +86,28 @@ describe("thin_market — подпись у числа оценочной мод ); }); }); + +/** + * То же число печатается второй раз в отдельной карточке под hero. Подпись в + * hero её не покрывает: у карточки свой источник данных (imv-benchmark endpoint), + * и без проброса note рядом с итогом остаётся неподписанная копия величины. + */ +describe("IMVBenchmark — подпись доезжает до второго места с тем же числом", () => { + const NOTE = "рынок из 3 объявлений — в расчёт не входит"; + + it("note передан → подпись стоит под числом", () => { + const { container } = render( + , + ); + + expect(container.textContent).toContain(NOTE); + }); + + it("note не передан (рынок не тонкий) → подписи нет", () => { + const { container } = render( + , + ); + + expect(container.textContent).not.toContain("в расчёт не входит"); + }); +}); diff --git a/tradein-mvp/frontend/src/components/trade-in/trade-in.css b/tradein-mvp/frontend/src/components/trade-in/trade-in.css index 7cb46b9e..302bb7d2 100644 --- a/tradein-mvp/frontend/src/components/trade-in/trade-in.css +++ b/tradein-mvp/frontend/src/components/trade-in/trade-in.css @@ -846,6 +846,7 @@ .bench-chip__sub { font-size: 10px; color: var(--muted); + max-width: 240px; } /* ── empty-state headline (без данных) ── */