1. 后端新增高价值套装状态筛选(双套均可换/可换白日梦/可换萌兔/已拥有/高价值待救/未查资料),兼容 MySQL 原生 JSON 与 SQLite unicode 转义存储; 2. 后端新增多维资产与状态区间筛选(积分范围、鱼翅范围、宝典开通、电竞开通、角色绑定状态),并支持与批量打标签/删除联动; 3. 统计接口 accounts_summary 新增 high_value 聚合数据,毫秒级返回各类高价值资产数量; 4. 前端账号管理页面新增「高价值一键筛选」胶囊区(带数量徽标与激活状态,即点即滤); 5. 前端新增可折叠「高级自定义筛选」面板,支持套装状态下拉、积分快捷区间(≥300、≥600)、鱼翅快捷区间(>0、≥6)、宝典与角色绑定状态多条件组合; 6. 补充 6 个高价值筛选与资产区间单元测试,全量用例通过。
102 lines
3.4 KiB
Python
102 lines
3.4 KiB
Python
"""验证 DouyuTask 的 account_assigned_to 字段与任务查询优化。"""
|
|
|
|
from sqlalchemy.orm import Session
|
|
|
|
from tests.support.db import init_test_schema, make_test_session
|
|
from web.backend.models import Account, DouyuTask, User
|
|
from web.backend.routers.douyu import _visible_tasks_query
|
|
from web.backend.services.douyu_service import create_douyu_planned_tasks
|
|
|
|
|
|
def test_douyu_task_assigned_to_flow():
|
|
init_test_schema()
|
|
db: Session = make_test_session()
|
|
try:
|
|
db.query(DouyuTask).delete()
|
|
db.commit()
|
|
# 创建测试客服用户与账号
|
|
user_a = User(
|
|
username="test_kefu_a",
|
|
password_hash="fake",
|
|
role="support",
|
|
custom_permissions=["douyu:task", "account:view_assigned"],
|
|
is_active=True,
|
|
)
|
|
user_b = User(
|
|
username="test_kefu_b",
|
|
password_hash="fake",
|
|
role="support",
|
|
custom_permissions=["douyu:task", "account:view_assigned"],
|
|
is_active=True,
|
|
)
|
|
db.add_all([user_a, user_b])
|
|
db.flush()
|
|
|
|
acc_1 = Account(
|
|
username="dy_user_1",
|
|
password="pwd",
|
|
email="em1@test.com",
|
|
email_password="pwd",
|
|
assigned_to=user_a.id,
|
|
# CK 挂在账号上(2026-10-04 CK 解耦)
|
|
cookie="acf_uid=101; acf_auth=fake",
|
|
)
|
|
acc_2 = Account(
|
|
username="dy_user_2",
|
|
password="pwd",
|
|
email="em2@test.com",
|
|
email_password="pwd",
|
|
assigned_to=user_b.id,
|
|
cookie="acf_uid=102; acf_auth=fake",
|
|
)
|
|
db.add_all([acc_1, acc_2])
|
|
db.flush()
|
|
|
|
# 1. 验证创建任务时,自动继承 account.assigned_to
|
|
batch_id, count = create_douyu_planned_tasks(
|
|
db=db,
|
|
account_ids=[acc_1.id, acc_2.id],
|
|
task_type="query_points",
|
|
handbook_scope="elite",
|
|
created_by=user_a.id,
|
|
)
|
|
assert count == 2
|
|
|
|
tasks = db.query(DouyuTask).filter(DouyuTask.batch_id == batch_id).all()
|
|
task_map = {t.account_id: t for t in tasks}
|
|
assert task_map[acc_1.id].account_assigned_to == user_a.id
|
|
assert task_map[acc_2.id].account_assigned_to == user_b.id
|
|
|
|
# 2. 验证 _visible_tasks_query 能够精准过滤所属客服
|
|
query_a = _visible_tasks_query(db, user_a).filter(
|
|
DouyuTask.batch_id == batch_id
|
|
)
|
|
visible_a = query_a.all()
|
|
assert len(visible_a) == 1
|
|
assert visible_a[0].account_id == acc_1.id
|
|
|
|
query_b = _visible_tasks_query(db, user_b).filter(
|
|
DouyuTask.batch_id == batch_id
|
|
)
|
|
visible_b = query_b.all()
|
|
assert len(visible_b) == 1
|
|
assert visible_b[0].account_id == acc_2.id
|
|
|
|
# 3. 验证账号重新分配后,关联任务同步变更
|
|
db.query(DouyuTask).filter(DouyuTask.account_id == acc_1.id).update(
|
|
{DouyuTask.account_assigned_to: user_b.id}, synchronize_session=False
|
|
)
|
|
acc_1.assigned_to = user_b.id
|
|
db.commit()
|
|
|
|
# 此时 user_b 可以看到 acc_1 的任务
|
|
visible_b_after = (
|
|
_visible_tasks_query(db, user_b)
|
|
.filter(DouyuTask.batch_id == batch_id)
|
|
.all()
|
|
)
|
|
assert len(visible_b_after) == 2
|
|
finally:
|
|
db.rollback()
|
|
db.close()
|