"""Unit tests for _extract_short_addr in app.services.estimator.

Covers real Ekaterinburg address formats: full admin chain, Россия/РФ prefix,
apartment stripped, prospect keyword, korpus stripped, non-street fallback, None passthrough.
"""

from app.services.estimator import _extract_short_addr


def test_full_admin_chain() -> None:
    assert _extract_short_addr(
        "Свердловская область, г. Екатеринбург, Склад, ул. Заводская, д. 44-а"
    ) == "ул. Заводская, д. 44-а"


def test_russia_prefix() -> None:
    assert _extract_short_addr(
        "Россия, Екатеринбург, ул. Малышева, 1"
    ) == "ул. Малышева, 1"


def test_apt_stripped() -> None:
    out = _extract_short_addr("Екатеринбург, ул. Ленина, 5, кв. 12")
    assert out is not None
    assert "кв" not in out
    assert out.startswith("ул. Ленина")


def test_prospekt_keyword() -> None:
    out = _extract_short_addr("г. Екатеринбург, проспект Ленина, 50")
    assert out is not None
    assert out.startswith("проспект Ленина")


def test_korp_stripped() -> None:
    out = _extract_short_addr("Екатеринбург, ул. Крауля, 48, корп. 2")
    assert out is not None
    assert "корп" not in out.lower()


def test_no_street_keyword_returns_fallback() -> None:
    # Should not crash; either returns stripped str or None.
    out = _extract_short_addr("Industrial zone X")
    assert out is None or "Industrial" in out


def test_none_passthrough() -> None:
    assert _extract_short_addr(None) is None
    assert _extract_short_addr("") is None
