fix(assignments): 未分配列表不再混入 CK 失效账号
分配池统一为:持 CK、CK 未判失效、未被停用/归档。新增 assignable_only 参数贯穿账号列表、批量分配与分配概览;前端列表与一键全部分配使用同一口径。
This commit is contained in:
@@ -14,7 +14,11 @@
|
||||
|
||||
from tests.support.db import get_test_engine, make_test_session
|
||||
from web.backend.models import Account, User
|
||||
from web.backend.routers.accounts import batch_assign_accounts, list_accounts
|
||||
from web.backend.routers.accounts import (
|
||||
assignments_summary,
|
||||
batch_assign_accounts,
|
||||
list_accounts,
|
||||
)
|
||||
from web.backend.schemas import BatchAssign
|
||||
|
||||
|
||||
@@ -97,6 +101,66 @@ class TestAssignFilter(_Base):
|
||||
assert self.names(assign_status="unassigned", tag="10.1-测试") == ["tag-a-free"]
|
||||
|
||||
|
||||
class TestAssignablePool(_Base):
|
||||
"""分配池口径:CK 失效的号必须先修复,不能混进「未分配」让人误分配。"""
|
||||
|
||||
def test_assignable_only_excludes_invalid_ck(self):
|
||||
self.make_account("ap-valid", ck_check_status="valid")
|
||||
self.make_account("ap-unchecked") # 还没检测过:按可用处理
|
||||
self.make_account("ap-error", ck_check_status="error") # 查不到 ≠ 失效
|
||||
self.make_account("ap-invalid", ck_check_status="invalid")
|
||||
self.make_account("ap-disabled", ck_check_status="valid", status="disabled")
|
||||
|
||||
assert self.names(assign_status="unassigned", assignable_only=True) == [
|
||||
"ap-valid",
|
||||
"ap-unchecked",
|
||||
"ap-error",
|
||||
]
|
||||
|
||||
def test_summary_counts_only_assignable(self):
|
||||
self.make_account("as-valid", ck_check_status="valid")
|
||||
self.make_account("as-invalid", ck_check_status="invalid")
|
||||
self.make_account(
|
||||
"as-assigned-valid", ck_check_status="valid", assigned_to=self.support.id
|
||||
)
|
||||
self.make_account(
|
||||
"as-assigned-invalid",
|
||||
ck_check_status="invalid",
|
||||
assigned_to=self.support.id,
|
||||
)
|
||||
|
||||
summary = assignments_summary(db=self.session, current=self.admin)
|
||||
|
||||
assert summary["unassigned_count"] == 1
|
||||
assert summary["assigned_count"] == 1
|
||||
assert summary["total_count"] == 2
|
||||
support = next(
|
||||
u for u in summary["support_users"] if u["id"] == self.support.id
|
||||
)
|
||||
assert support["assigned_count"] == 1
|
||||
|
||||
def test_all_matching_assignable_only_skips_invalid(self):
|
||||
valid = self.make_account("am-valid", ck_check_status="valid")
|
||||
invalid = self.make_account("am-invalid", ck_check_status="invalid")
|
||||
|
||||
result = batch_assign_accounts(
|
||||
BatchAssign(
|
||||
all_matching=True,
|
||||
assign_status="unassigned",
|
||||
assignable_only=True,
|
||||
assigned_to=self.support.id,
|
||||
),
|
||||
db=self.session,
|
||||
current=self.admin,
|
||||
)
|
||||
|
||||
assert result["count"] == 1
|
||||
self.session.refresh(valid)
|
||||
self.session.refresh(invalid)
|
||||
assert valid.assigned_to == self.support.id
|
||||
assert invalid.assigned_to is None
|
||||
|
||||
|
||||
class TestAllMatchingAssign(_Base):
|
||||
def test_assigns_every_matching_unassigned(self):
|
||||
free = [self.make_account(f"mf-{i}") for i in range(3)]
|
||||
|
||||
Reference in New Issue
Block a user