71 lines
3.2 KiB
Python
71 lines
3.2 KiB
Python
"""Unit-тесты для repair_state_normalizer.normalize_repair_state() (#621).
|
||
|
||
Покрывают все известные raw-значения → enum mapping,
|
||
idempotency для уже нормализованных значений и None-guard.
|
||
"""
|
||
|
||
import logging
|
||
|
||
import pytest
|
||
|
||
from app.services.scrapers.repair_state_normalizer import normalize_repair_state
|
||
|
||
# ── needs_repair ─────────────────────────────────────────────────────────────
|
||
|
||
|
||
@pytest.mark.parametrize("raw", ["required", "without", "no", "rough"])
|
||
def test_needs_repair_values(raw: str) -> None:
|
||
assert normalize_repair_state(raw) == "needs_repair"
|
||
|
||
|
||
# ── standard ─────────────────────────────────────────────────────────────────
|
||
|
||
|
||
def test_cosmetic_maps_to_standard() -> None:
|
||
assert normalize_repair_state("cosmetic") == "standard"
|
||
|
||
|
||
# ── good ─────────────────────────────────────────────────────────────────────
|
||
|
||
|
||
@pytest.mark.parametrize("raw", ["euro", "fine"])
|
||
def test_good_values(raw: str) -> None:
|
||
assert normalize_repair_state(raw) == "good"
|
||
|
||
|
||
# ── excellent ────────────────────────────────────────────────────────────────
|
||
|
||
|
||
@pytest.mark.parametrize("raw", ["designer", "design"])
|
||
def test_excellent_values(raw: str) -> None:
|
||
assert normalize_repair_state(raw) == "excellent"
|
||
|
||
|
||
# ── None guard ───────────────────────────────────────────────────────────────
|
||
|
||
|
||
def test_none_returns_none() -> None:
|
||
assert normalize_repair_state(None) is None
|
||
|
||
|
||
# ── idempotency ──────────────────────────────────────────────────────────────
|
||
|
||
|
||
@pytest.mark.parametrize("enum_val", ["needs_repair", "standard", "good", "excellent"])
|
||
def test_already_normalized_is_passthrough(enum_val: str) -> None:
|
||
"""Уже нормализованное значение возвращается as-is (idempotent при ре-обработке)."""
|
||
assert normalize_repair_state(enum_val) == enum_val
|
||
|
||
|
||
# ── unknown value ────────────────────────────────────────────────────────────
|
||
|
||
|
||
def test_unknown_raw_returns_none(caplog: pytest.LogCaptureFixture) -> None:
|
||
"""Нераспознанное значение → None + WARNING в лог."""
|
||
with caplog.at_level(
|
||
logging.WARNING,
|
||
logger="app.services.scrapers.repair_state_normalizer",
|
||
):
|
||
result = normalize_repair_state("whitebox")
|
||
assert result is None
|
||
assert "whitebox" in caplog.text
|