test(2656): краснота на main — по значению, не ImportError
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m39s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
All checks were successful
CI Trade-In / changes (pull_request) Successful in 8s
CI / changes (pull_request) Successful in 10s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI Trade-In / backend-tests (pull_request) Successful in 4m39s
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
getattr вместо прямого импорта LISTINGS_FRESH_DAYS из config: на origin/main константы там ещё нет, и тест умирал ImportError'ом на сборке модуля — «возможности нет» вместо «значение неверно». Теперь на main: 5 красных ассертами (предикат отсутствует/окно None/протухшие комплы в пуле), 3 зелёных (сброс anchor_tier уже влит отдельно). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
3d0541b2e2
commit
7a5997b059
1 changed files with 12 additions and 7 deletions
|
|
@ -37,12 +37,17 @@ from unittest.mock import MagicMock
|
|||
# Settings требует DATABASE_URL при инициализации (fail-fast, C-3).
|
||||
os.environ.setdefault("DATABASE_URL", "postgresql+psycopg://test:test@localhost:5432/test")
|
||||
|
||||
from app.core.config import LISTINGS_FRESH_DAYS
|
||||
from app.core import config as core_config
|
||||
from app.services import estimator as est_mod
|
||||
from app.services.estimator import _fetch_analogs, _fetch_anchor_comps, _price_from_inputs
|
||||
from app.services.geocoder import GeocodeResult
|
||||
from app.tasks import asking_to_sold_ratio as ratio_mod
|
||||
|
||||
# getattr, а не прямой импорт: на origin/main константы в config ещё нет — тест
|
||||
# обязан падать ассертом О ЗНАЧЕНИИ (None != 14 / предикат отсутствует), а не
|
||||
# ImportError'ом на сборке модуля (красное должно значить «значение неверно»).
|
||||
LISTINGS_FRESH_DAYS = getattr(core_config, "LISTINGS_FRESH_DAYS", None)
|
||||
|
||||
# Ровно тот предикат, что стоит в _COMMON_WHERE радиусного пути. Сверяем ПОДСТРОКОЙ,
|
||||
# а не регуляркой: цель — чтобы во всех местах стоял ОДИН И ТОТ ЖЕ текст, а не пять
|
||||
# похожих вариантов, которые потом разъедутся по смыслу.
|
||||
|
|
@ -103,12 +108,12 @@ def test_freshness_window_lives_in_one_place() -> None:
|
|||
assert LISTINGS_FRESH_DAYS == 14 # текущее значение; меняется в одном месте
|
||||
for mod in (est_mod, ratio_mod):
|
||||
src = inspect.getsource(mod)
|
||||
assert re.search(
|
||||
r"from app\.core\.config import [^\n]*LISTINGS_FRESH_DAYS", src
|
||||
), f"{mod.__name__}: LISTINGS_FRESH_DAYS не импортирован из app.core.config"
|
||||
assert not re.search(
|
||||
r"^LISTINGS_FRESH_DAYS\s*=", src, re.M
|
||||
), f"{mod.__name__}: локальная копия константы — значение разъедется"
|
||||
assert re.search(r"from app\.core\.config import [^\n]*LISTINGS_FRESH_DAYS", src), (
|
||||
f"{mod.__name__}: LISTINGS_FRESH_DAYS не импортирован из app.core.config"
|
||||
)
|
||||
assert not re.search(r"^LISTINGS_FRESH_DAYS\s*=", src, re.M), (
|
||||
f"{mod.__name__}: локальная копия константы — значение разъедется"
|
||||
)
|
||||
assert "'14 days'" not in _REDERIVE_SQL
|
||||
assert "'14 days'" not in _ANCHOR_SRC
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue