import io from openpyxl import load_workbook from app.tools.create_excel import build_workbook from app.tools.excel_templates import TEMPLATES def _ws(params): # noqa: ANN001, ANN202 data, _ = build_workbook(TEMPLATES["comparables_ajustes"](params)) return load_workbook(io.BytesIO(data))["Comparables"] def test_rates_mode_builds_live_formulas() -> None: ws = _ws({ "sujet": {"adresse": "Bungalow Hull", "superficie": "1 200 pi²", "terrain": 6000, "garage": "Oui", "etat": "bon"}, "taux": {"superficie": "120 $", "terrain": 8, "garage": "15 000 $", "etat": 10000}, "taux_temps_mensuel": "0,5 %", "comparables": [ {"adresse": "45 rue Laurier", "prix": "425 000 $", "date": "mars 2026", "mois": 6, "superficie": 1150, "terrain": 5500, "garage": "Oui", "etat": "bon"}, {"adresse": "12 rue Front", "prix": 398000, "mois": 8, "superficie": 1250, "terrain": 7000, "garage": "Non", "etat": "moyen"}, ], }) values = {c.coordinate: c.value for row in ws.iter_rows() for c in row if c.value is not None} # subject inputs and rates present as blue inputs assert values["B4"] == 1200 and values["D4"] == 120 assert any(v == "Oui".lower() or v == 1.0 for k, v in values.items() if k.startswith("B")) # garage → 1 # adjustment formulas reference subject/rate cells formulas = [v for v in values.values() if isinstance(v, str) and v.startswith("=(")] assert formulas and all("$B$" in f and "$D$" in f for f in formulas) # time adjustment uses months × monthly rate assert any(isinstance(v, str) and v.startswith("=D") and "*$D$" in v for v in values.values()) assert any(h == "Ajust. Garage ($)" for h in values.values()) assert any(h == "Médiane" for h in values.values()) def test_dollar_mode_still_works_with_text() -> None: ws = _ws({"comparables": [{"adresse": "A", "prix": 415000, "temps": "+2 %", "garage": "Oui", "ajustements": {"Superficie": -5000}}]}) values = [c.value for row in ws.iter_rows() for c in row if c.value is not None] assert "Oui" in values and -5000 in values and "Garage" in values