Files
live-hub-py/tests/test_douyu_task_assigned_optimization.py
T
yml2213 512ea3db06 feat(accounts): 增加高价值资产一键筛选与高级自定义筛选功能
1. 后端新增高价值套装状态筛选(双套均可换/可换白日梦/可换萌兔/已拥有/高价值待救/未查资料),兼容 MySQL 原生 JSON 与 SQLite unicode 转义存储;
2. 后端新增多维资产与状态区间筛选(积分范围、鱼翅范围、宝典开通、电竞开通、角色绑定状态),并支持与批量打标签/删除联动;
3. 统计接口 accounts_summary 新增 high_value 聚合数据,毫秒级返回各类高价值资产数量;
4. 前端账号管理页面新增「高价值一键筛选」胶囊区(带数量徽标与激活状态,即点即滤);
5. 前端新增可折叠「高级自定义筛选」面板,支持套装状态下拉、积分快捷区间(≥300、≥600)、鱼翅快捷区间(>0、≥6)、宝典与角色绑定状态多条件组合;
6. 补充 6 个高价值筛选与资产区间单元测试,全量用例通过。
2026-10-05 11:23:48 +08:00

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()