From c3c89646cec46192427ce19d043f02c2976b4b9e Mon Sep 17 00:00:00 2001 From: bot-backend Date: Wed, 17 Jun 2026 21:21:56 +0300 Subject: [PATCH] fix(scrapers): narrow domrf Level-1 status badge-class regex (#1609 follow-up) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit _STATUS_BADGE_CLS_RE was too broad: `status|badge|tag|chip|label` matched generic UI elements (e.g. , ) that are unrelated to the sale-status badge, risking picking the wrong block. Narrowed to `(? str | None: diff --git a/backend/tests/services/scrapers/test_domrf_catalog_parse.py b/backend/tests/services/scrapers/test_domrf_catalog_parse.py index c75f3fdc..a9214814 100644 --- a/backend/tests/services/scrapers/test_domrf_catalog_parse.py +++ b/backend/tests/services/scrapers/test_domrf_catalog_parse.py @@ -211,6 +211,31 @@ def test_prodana_feminine_classified_as_sold() -> None: assert result.get("status") == STATUS_SOLD +def test_generic_label_tag_not_treated_as_badge() -> None: + """Элемент с классом 'label' или 'tag' (без слова 'status') НЕ должен + активировать Уровень 1 (#1686 follow-up: regex был слишком широк). + + Страница: generic с текстом 'В продаже' в шапке, + реальный статус-бейдж с классом 'status-badge' содержит 'Продана'. + Уровень 1 должен выбрать только блок status-badge, а не label-шапку. + """ + html = ( + "" + # generic label в шапке — НЕ должен активировать Level-1 badge match + 'В продаже' + 'Новостройка' + 'ЕКБ' + 'Акция' + # настоящий статус-бейдж — должен быть подхвачен Level-1 + '
Продана
' + "" + ) + result = parse_catalog_flat(html) + # Level-1 должен взять status-badge (Продана → sold), + # generic label/tag/chip/badge не должны перебить правильный результат + assert result.get("status") == STATUS_SOLD + + def test_full_page_sold_flat_no_false_free() -> None: """Реалистичный HTML проданной квартиры: навигация 'в продаже', бейдж 'продано'.""" html = ( -- 2.45.3