This commit is contained in:
@@ -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": "【Summer’s 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
|
||||
|
||||
Reference in New Issue
Block a user