feat(weibo): 增加协作 CK 失效筛选与实时同步开关

This commit is contained in:
yml
2026-11-12 20:36:11 +08:00
parent aa978a808e
commit f3aab9dabb
6 changed files with 283 additions and 27 deletions
+66
View File
@@ -4,7 +4,9 @@ from __future__ import annotations
from sqlalchemy.orm import Session
from core.weibo import WeiboAuthError
from web.backend.models import AuditLog, User, WeiboAccount, WeiboExternalOrderMetric
from web.backend.routers import weibo_collab as weibo_collab_router
from web.backend.schemas import WeiboCollabCkExportOut
from web.backend.services import weibo_collab_service as collab
@@ -223,3 +225,67 @@ def test_export_cks_exposes_skipped_orders(db):
assert dumped["exported"] == 1
assert {item["id"] for item in dumped["skipped"]} == {unbound.id, 999999}
assert any("还没关联微博账号" in item["reason"] for item in dumped["skipped"])
def test_list_orders_filters_invalid_ck_and_summary_excludes_error(db):
user = make_user(db)
valid_account = make_account(db, uid="4014000101")
invalid_account = make_account(db, uid="4014000102")
error_account = make_account(db, uid="4014000103")
invalid_account.ck_check_status = "invalid"
error_account.ck_check_status = "error"
db.commit()
for index, account in enumerate(
(valid_account, invalid_account, error_account), start=1
):
collab.create_order(
db,
user,
order_no=f"WB-CK-FILTER-{index}",
account_id=account.id,
goods_name="商品A",
required_weidou=100,
require_verified=False,
)
invalid = collab.list_orders(
db,
page=1,
page_size=20,
ck_status="invalid",
)
assert invalid["total"] == 1
assert invalid["items"][0]["account_id"] == invalid_account.id
assert collab.summary(db)["ck_invalid"] == 1
def test_verify_batch_persists_ck_invalid_after_row_rollback(monkeypatch, db):
user = make_user(db)
account = make_account(db)
order = collab.create_order(
db,
user,
order_no="WB-CK-VERIFY-INVALID",
account_id=account.id,
goods_name="商品A",
required_weidou=100,
require_verified=False,
)
def fail_refresh(*_args, **_kwargs):
raise WeiboAuthError("CK 已过期")
monkeypatch.setattr(collab, "refresh_weibo_account", fail_refresh)
result = weibo_collab_router.verify_external_orders_batch(
[order.id],
db=db,
current=user,
)
assert result["success"] is False
assert result["results"][0]["ck_status"] == "invalid"
db.refresh(account)
assert account.ck_check_status == "invalid"