feat(douyu): 支持账号批量撤回并刷新未分配状态
新增按勾选或标签批量撤回账号归属,撤回只处理确实已分配的账号。账号管理和分配管理增加可见时自动刷新、窗口聚焦刷新及手动刷新,解决批量登录完成后未分配账号延迟出现。
This commit is contained in:
@@ -213,6 +213,38 @@ class TestAllMatchingAssign(_Base):
|
||||
self.session.refresh(account)
|
||||
assert account.assigned_to is None
|
||||
|
||||
def test_unassign_all_matching_by_tag_only_touches_assigned_tag(self):
|
||||
"""按标签撤回:只动该标签下当前已分配的账号,未分配和别的标签都保留。"""
|
||||
assigned_a = self.make_account(
|
||||
"mut-a-assigned", tag="撤回标签", assigned_to=self.support.id
|
||||
)
|
||||
assigned_a_2 = self.make_account(
|
||||
"mut-a-assigned-2", tag="撤回标签", assigned_to=self.other.id
|
||||
)
|
||||
unassigned_a = self.make_account("mut-a-free", tag="撤回标签")
|
||||
assigned_b = self.make_account(
|
||||
"mut-b-assigned", tag="保留标签", assigned_to=self.support.id
|
||||
)
|
||||
|
||||
result = batch_assign_accounts(
|
||||
BatchAssign(
|
||||
all_matching=True,
|
||||
assign_status="assigned",
|
||||
tag="撤回标签",
|
||||
assigned_to=None,
|
||||
),
|
||||
db=self.session,
|
||||
current=self.admin,
|
||||
)
|
||||
|
||||
assert result["count"] == 2
|
||||
for account in (assigned_a, assigned_a_2, unassigned_a, assigned_b):
|
||||
self.session.refresh(account)
|
||||
assert assigned_a.assigned_to is None
|
||||
assert assigned_a_2.assigned_to is None
|
||||
assert unassigned_a.assigned_to is None
|
||||
assert assigned_b.assigned_to == self.support.id
|
||||
|
||||
def test_explicit_ids_still_work(self):
|
||||
"""旧路径(显式勾选)不能被 all_matching 改动带坏。"""
|
||||
a = self.make_account("me-a")
|
||||
@@ -230,6 +262,26 @@ class TestAllMatchingAssign(_Base):
|
||||
assert a.assigned_to == self.support.id
|
||||
assert b.assigned_to is None
|
||||
|
||||
def test_explicit_unassign_counts_only_assigned_accounts(self):
|
||||
"""显式勾选混合未分配账号时,撤回只处理有归属的那些并返回真实数量。"""
|
||||
assigned = self.make_account("mul-assigned", assigned_to=self.support.id)
|
||||
unassigned = self.make_account("mul-free")
|
||||
|
||||
result = batch_assign_accounts(
|
||||
BatchAssign(
|
||||
account_ids=[assigned.id, unassigned.id],
|
||||
assigned_to=None,
|
||||
),
|
||||
db=self.session,
|
||||
current=self.admin,
|
||||
)
|
||||
|
||||
assert result["count"] == 1
|
||||
self.session.refresh(assigned)
|
||||
self.session.refresh(unassigned)
|
||||
assert assigned.assigned_to is None
|
||||
assert unassigned.assigned_to is None
|
||||
|
||||
def test_all_matching_without_match_is_rejected(self):
|
||||
import pytest
|
||||
from fastapi import HTTPException
|
||||
|
||||
Reference in New Issue
Block a user