feat(store-mapping): JD 缓存 deeplink 失效标记(对标淘宝) (#56)
Reviewed-on: #56
This commit was merged in pull request #56.
This commit is contained in:
@@ -16,11 +16,13 @@ _SECRET = "test-internal-secret-only-for-pytest"
|
||||
|
||||
|
||||
def _mk_row(db, *, trace_id, name_meituan=None, name_taobao=None,
|
||||
id_taobao=None, deeplink=None, lat=None, lng=None):
|
||||
id_taobao=None, deeplink=None, lat=None, lng=None,
|
||||
name_jd=None, id_jd=None, jd_deeplink=None):
|
||||
row = StoreMapping(
|
||||
trace_id=trace_id, business_type="food",
|
||||
name_meituan=name_meituan, name_taobao=name_taobao,
|
||||
id_taobao=id_taobao, taobao_deeplink=deeplink, lat=lat, lng=lng,
|
||||
name_jd=name_jd, id_jd=id_jd, jd_deeplink=jd_deeplink,
|
||||
)
|
||||
db.add(row)
|
||||
db.commit()
|
||||
@@ -110,9 +112,45 @@ def test_invalidate_endpoint_marks_and_lookup_miss(client, db, monkeypatch):
|
||||
assert "taobao" not in lk.json()
|
||||
|
||||
|
||||
def test_invalidate_endpoint_non_taobao_noop(client, monkeypatch):
|
||||
def test_invalidate_endpoint_unsupported_platform_noop(client, monkeypatch):
|
||||
# 当前支持 taobao/jd;其它平台(如 meituan)no-op 返 affected=0
|
||||
monkeypatch.setattr(settings, "INTERNAL_API_SECRET", _SECRET)
|
||||
r = client.post("/internal/store-mapping/invalidate",
|
||||
json={"platform": "jd", "shop_id": "X"},
|
||||
json={"platform": "meituan", "shop_id": "X"},
|
||||
headers={"X-Internal-Secret": _SECRET})
|
||||
assert r.status_code == 200 and r.json()["affected"] == 0
|
||||
|
||||
|
||||
# ---------- 京东(对称淘宝)----------
|
||||
|
||||
def test_mark_jd_invalid_marks_all_rows_with_store_id(db):
|
||||
_mk_row(db, trace_id="j1", name_meituan="兰州拉面", name_jd="兰州拉面", id_jd="JBAD", jd_deeplink="dl_a")
|
||||
_mk_row(db, trace_id="j2", name_meituan="兰州拉面", name_jd="兰州拉面", id_jd="JBAD", jd_deeplink="dl_b")
|
||||
_mk_row(db, trace_id="j3", name_meituan="兰州拉面", name_jd="兰州拉面", id_jd="JGOOD", jd_deeplink="dl_g")
|
||||
assert repo.mark_jd_deeplink_invalid(db, "JBAD") == 2
|
||||
assert repo.mark_jd_deeplink_invalid(db, "JBAD") == 0 # 幂等
|
||||
rows = {r.trace_id: r for r in db.query(StoreMapping).all()}
|
||||
assert rows["j1"].jd_deeplink_invalid_at is not None
|
||||
assert rows["j2"].jd_deeplink_invalid_at is not None
|
||||
assert rows["j3"].jd_deeplink_invalid_at is None # 不同 storeId 不动
|
||||
|
||||
|
||||
def test_lookup_filters_invalid_jd(db):
|
||||
_mk_row(db, trace_id="j1", name_meituan="兰州拉面", name_jd="兰州拉面", id_jd="JBAD", jd_deeplink="dl")
|
||||
assert repo.lookup_nearest(db, "meituan", "兰州拉面")["jd"]["store_id"] == "JBAD"
|
||||
repo.mark_jd_deeplink_invalid(db, "JBAD")
|
||||
assert "jd" not in repo.lookup_nearest(db, "meituan", "兰州拉面")
|
||||
|
||||
|
||||
def test_invalidate_endpoint_jd_marks_and_lookup_miss(client, db, monkeypatch):
|
||||
monkeypatch.setattr(settings, "INTERNAL_API_SECRET", _SECRET)
|
||||
_mk_row(db, trace_id="j1", name_meituan="店J", name_jd="店J", id_jd="JBADX", jd_deeplink="dl")
|
||||
_mk_row(db, trace_id="j2", name_meituan="店J", name_jd="店J", id_jd="JBADX", jd_deeplink="dl2")
|
||||
r = client.post("/internal/store-mapping/invalidate",
|
||||
json={"platform": "jd", "shop_id": "JBADX"},
|
||||
headers={"X-Internal-Secret": _SECRET})
|
||||
assert r.status_code == 200 and r.json()["affected"] == 2
|
||||
lk = client.get("/internal/store-mapping/lookup",
|
||||
params={"source_platform": "meituan", "name": "店J"},
|
||||
headers={"X-Internal-Secret": _SECRET})
|
||||
assert "jd" not in lk.json()
|
||||
|
||||
Reference in New Issue
Block a user