diff --git a/tradein-mvp/backend/tests/test_same_building_anchor.py b/tradein-mvp/backend/tests/test_same_building_anchor.py index f2d8eba8..268adbbd 100644 --- a/tradein-mvp/backend/tests/test_same_building_anchor.py +++ b/tradein-mvp/backend/tests/test_same_building_anchor.py @@ -501,6 +501,29 @@ def test_estimate_premium_lift_real_in_range() -> None: assert est.range_high_rub >= int(real * 0.9) +def test_estimate_anchor_gets_prod_weights() -> None: + """#2381: веса якоря доходят до расчёта боевыми (прод 17.09.2026). + + Тест значений констант держит только число в estimator.py. Подмена + rooms_boost/floor_sigma на месте вызова (например, 1.0) проходила весь сьют: + веса сдвигают headline внутри тех же допусков, что проверяют тесты выше. + """ + with patch( + "app.services.estimator._compute_same_building_anchor", + wraps=_compute_same_building_anchor, + ) as spy: + est = _run_estimate(anchor_comps=_SB_COMPS_PREMIUM, anchor_tier="A") + assert est.median_price_per_m2 >= 450_000 # якорь сработал, а не радиус + kw = spy.call_args.kwargs + assert {k: kw[k] for k in ("sigma", "rooms_boost", "floor_sigma", "min_comps", "mad_k")} == { + "sigma": 0.18, + "rooms_boost": 1.6, + "floor_sigma": 0.25, + "min_comps": 4, + "mad_k": 3.5, + } + + def test_estimate_anchor_fires_without_radius_analogs() -> None: """#691: радиусных аналогов НЕТ (median=0, прод-кейс провала ST_DWithin), но same-building комплы есть → якорь обязан сработать и дать median>0.