fix: backfill account groups before priority reorder
This commit is contained in:
@@ -249,6 +249,50 @@ def test_old_data_null_target_group_fallback(db_session, monkeypatch):
|
||||
assert len(update_calls) == 2
|
||||
|
||||
|
||||
def test_null_target_group_backfills_from_remote_account_group(db_session, monkeypatch):
|
||||
"""老导入数据 target_group_id=NULL,但远端账号有单一 group_ids → 回填后参与同组重排。"""
|
||||
w = Website(name="W1", base_url="http://w1", enabled=True,
|
||||
auth_config_json="{}", timeout_seconds=30)
|
||||
u1 = Upstream(name="U1", base_url="http://u1")
|
||||
u2 = Upstream(name="U2", base_url="http://u2")
|
||||
u3 = Upstream(name="U3", base_url="http://u3")
|
||||
db_session.add_all([w, u1, u2, u3])
|
||||
db_session.commit()
|
||||
db_session.refresh(w); db_session.refresh(u1); db_session.refresh(u2); db_session.refresh(u3)
|
||||
|
||||
_make_snapshot(db_session, u1.id, {"G2": 0.06})
|
||||
_make_snapshot(db_session, u2.id, {"G19": 0.07})
|
||||
_make_snapshot(db_session, u3.id, {"G21": 0.05})
|
||||
|
||||
legacy = _make_key(db_session, u1.id, "G2", "K2", "V2", w.id, "A2", imported_target_group_id=None)
|
||||
_make_key(db_session, u2.id, "G19", "K19", "V19", w.id, "A19", imported_target_group_id="TG1")
|
||||
_make_key(db_session, u3.id, "G21", "K21", "V21", w.id, "A21", imported_target_group_id="TG1")
|
||||
|
||||
update_calls = []
|
||||
|
||||
class AccountListMockClient:
|
||||
def __init__(self, **kwargs): pass
|
||||
def __enter__(self): return self
|
||||
def __exit__(self, *a): pass
|
||||
def list_accounts(self):
|
||||
return [
|
||||
{"id": "A2", "group_ids": ["TG1"]},
|
||||
{"id": "A19", "group_ids": ["TG1"]},
|
||||
{"id": "A21", "group_ids": ["TG1"]},
|
||||
]
|
||||
def update_account(self, account_id, data):
|
||||
update_calls.append((account_id, data))
|
||||
|
||||
monkeypatch.setattr("app.services.website_sync.Sub2ApiWebsiteClient", AccountListMockClient)
|
||||
|
||||
sync_account_priorities_for_upstream(db_session, u1.id, website_id=w.id)
|
||||
|
||||
updated = {account_id: payload["priority"] for account_id, payload in update_calls}
|
||||
assert updated == {"A21": 1, "A2": 11, "A19": 21}
|
||||
db_session.refresh(legacy)
|
||||
assert legacy.imported_target_group_id == "TG1"
|
||||
|
||||
|
||||
def test_single_account_in_mixed_website(db_session, monkeypatch):
|
||||
"""同一网站:一个目标分组有 2 账号(竞争),另一个目标分组只有 1 账号(不参与)。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user