test(tradein): граница radius-floor при n == порогу стережётся (#3466)
Ревью #3554: замена `>=` на `>` в гейте radius-floor оставляла test_estimator_radius_floor.py зелёным — в тестах были только count=15 и count=min_n−1. При n == min_n витрина не пишет «справочно» (advisory_only=False), значит floor обязан поднять цену. Новый тест: n = estimate_corridor_clamp_min_n, медиана 80k → ровно 120k, плюс проверка, что DkpCorridor на той же границе не справочный. Мутант `>` краснеет: «коридор из 10 сделок (ровно порог) должен поднять цену ровно до floor=120000». Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
1fe383f935
commit
49bcfdacd6
1 changed files with 33 additions and 0 deletions
|
|
@ -9,6 +9,7 @@
|
|||
- dkp_raw is None → no-op (нет базы для floor)
|
||||
- anchor-путь (anchor_tier != None) → не затронут floor'ом
|
||||
- коридор ниже estimate_corridor_clamp_min_n → floor не применяется (#3466)
|
||||
- коридор ровно estimate_corridor_clamp_min_n → floor применяется (#3466)
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
|
@ -219,3 +220,35 @@ def test_floor_not_applied_below_clamp_min_n() -> None:
|
|||
f"median_ppm2={est.median_price_per_m2}: коридор из "
|
||||
f"{dkp_raw['count']} сделок ниже порога не должен поднимать цену до floor=120000"
|
||||
)
|
||||
|
||||
|
||||
# ── тест 5: ровно на пороге floor уже работает (#3466) ──────────────────────
|
||||
|
||||
|
||||
def test_floor_applied_at_exactly_clamp_min_n() -> None:
|
||||
"""n = estimate_corridor_clamp_min_n: advisory_only=False → floor обязан поднять.
|
||||
|
||||
Тест 4 стережёт «ниже порога — нет», тест 1 — «15 сделок — да». Граница между
|
||||
ними (`>=` против `>`) не стереглась: при n == min_n витрина не пишет подпись
|
||||
«справочно», значит коридор обязан войти в цену.
|
||||
"""
|
||||
from app.core.config import settings
|
||||
from app.schemas.trade_in import DkpCorridor
|
||||
|
||||
analogs = _six(80_000.0)
|
||||
dkp_raw = {
|
||||
"count": settings.estimate_corridor_clamp_min_n,
|
||||
"low_ppm2": 150_000,
|
||||
"median_ppm2": 180_000,
|
||||
"high_ppm2": 220_000,
|
||||
"period_months": 12,
|
||||
}
|
||||
# Та же граница с другой стороны: на ней коридор уже не справочный.
|
||||
assert DkpCorridor(**dkp_raw).advisory_only is False
|
||||
|
||||
est = _run_estimate(analogs, dkp_raw, radius_floor_factor=0.8)
|
||||
|
||||
assert est.median_price_per_m2 == 150_000 * 0.8, (
|
||||
f"median_ppm2={est.median_price_per_m2}: коридор из {dkp_raw['count']} сделок "
|
||||
"(ровно порог) должен поднять цену ровно до floor=120000"
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue