V10.520 拆分過期價格刷新與搜尋救援
All checks were successful
CD Pipeline / deploy (push) Successful in 1m11s

This commit is contained in:
OoO
2026-05-31 23:41:44 +08:00
parent 371a2b325e
commit dd6b6160fe
6 changed files with 88 additions and 18 deletions

View File

@@ -102,6 +102,7 @@ def test_competitor_feeder_persists_all_match_attempt_outcomes():
assert "identity_v2" in source
assert "_fetch_expired_identity_skus" in source
assert "run_expired_identity_refresh" in source
assert "allow_missing_recovery=False" in source
assert "_fetch_retryable_candidate_skus" in source
assert "run_retryable_candidate_revalidation" in source
retryable_source = source.split("def _fetch_retryable_candidate_skus", 1)[1].split(
@@ -1664,6 +1665,43 @@ def test_competitor_feeder_refresh_recovers_when_known_id_missing(monkeypatch):
assert attempts[0]["attempt_status"] == "matched"
def test_competitor_feeder_expired_refresh_defers_missing_known_id_recovery(monkeypatch):
from services.competitor_price_feeder import CompetitorPriceFeeder
class FakeCrawler:
def __init__(self, *_args, **_kwargs):
pass
def fetch_product_details(self, product_ids, batch_size=20):
assert product_ids == ["DDAB01-MISSING"]
return True, "ok", []
def search_products(self, *_args, **_kwargs):
raise AssertionError("expired identity refresh should not run fresh search recovery")
monkeypatch.setattr("services.pchome_crawler.PChomeCrawler", FakeCrawler)
feeder = CompetitorPriceFeeder(engine=object())
attempts = []
monkeypatch.setattr(
feeder,
"_record_match_attempt",
lambda *args, **kwargs: attempts.append(kwargs),
)
result = feeder._run_known_identity_refresh_items([{
"sku": "9823407",
"name": "【Summers Eve 舒摩兒】浴潔露237ml 單入任選(私密清潔 經典防護王)",
"product_id": 4864,
"momo_price": 441,
"competitor_product_id": "DDAB01-MISSING",
}], allow_missing_recovery=False)
assert result.matched == 0
assert result.skipped_no_result == 1
assert attempts[0]["attempt_status"] == "refresh_no_result"
assert "fresh_search_recovery_deferred" in attempts[0]["error_message"]
def test_competitor_feeder_records_missing_known_id_low_score_candidate(monkeypatch):
from services.competitor_price_feeder import CompetitorPriceFeeder
from services.pchome_crawler import PChomeProduct