gendesign/tradein-mvp/backend/tests/test_avito_relative_date.py
Light1YT f5c87201f1
All checks were successful
Deploy Trade-In / build-backend (push) Successful in 49s
Deploy Trade-In / deploy (push) Successful in 36s
Deploy Trade-In / changes (push) Successful in 1m28s
Deploy Trade-In / build-frontend (push) Has been skipped
fix(tradein): Avito listing_date extraction (3 формата) (#601)
2026-05-27 12:55:27 +00:00

69 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from datetime import date, timedelta
from app.services.scrapers.avito import _parse_relative_date
def test_days_ago():
assert _parse_relative_date("5 дней назад") == date.today() - timedelta(days=5)
def test_week_ago():
assert _parse_relative_date("2 недели назад") == date.today() - timedelta(days=14)
def test_hour_ago_is_today():
assert _parse_relative_date("3 часа назад") == date.today()
def test_none_passthrough():
assert _parse_relative_date(None) is None
assert _parse_relative_date("") is None
assert _parse_relative_date("random text") is None
# Keyword shortcuts — без \d+ (Avito SERP формат для свежих cards)
def test_today_keyword():
assert _parse_relative_date("сегодня в 12:30") == date.today()
def test_yesterday_keyword():
assert _parse_relative_date("вчера в 18:45") == date.today() - timedelta(days=1)
def test_day_before_yesterday():
assert _parse_relative_date("позавчера") == date.today() - timedelta(days=2)
def test_just_now():
assert _parse_relative_date("только что") == date.today()
# Absolute dates — «18 мая», «5 июня в 12:30»
def test_absolute_date_recent():
today = date.today()
# Take a day-month combo near current (last month) — gradening для CI stability
if today.month >= 2:
target = date(today.year, today.month - 1, 15)
else:
target = date(today.year - 1, 12, 15)
ru_months = {
1: "января", 2: "февраля", 3: "марта", 4: "апреля",
5: "мая", 6: "июня", 7: "июля", 8: "августа",
9: "сентября", 10: "октября", 11: "ноября", 12: "декабря",
}
text = f"{target.day} {ru_months[target.month]} в 12:30"
assert _parse_relative_date(text) == target
def test_absolute_date_future_month_rolls_back():
"""Если today январь, а текст «5 декабря» — это прошлый год."""
today = date.today()
if today.month == 1:
# Today already January, «декабря» → previous year December
result = _parse_relative_date("5 декабря")
assert result == date(today.year - 1, 12, 5)
else:
# Skip when not January — would change semantics
result = _parse_relative_date("5 января")
# Either matches current year January (если уже прошло) или previous
assert result is not None and result.month == 1 and result.day == 5