Files
live-hub-py/tests/test_huya_workbench_import_ck.py
T
yml2213 4ce30e5c26 feat(huya): 精英宝典工作台支持导入外部 CK
- 新增 POST /api/huya/workbench-accounts/import-cookies(huya:task + huya:import):
  外部 CK 复用现有解析入库后直接加入当前用户的工作台集合,导入完即可在工作台执行
  「生成开通支付码/绑定二维码/查询角色/刷新积分」等操作
- 新账号自动 assigned_to=导入者:客服的账号列表按归属过滤,不设归属会「导入成功但看不到」
- import_huya_cookies_detailed 返回账号对象供工作台复用,原 import_huya_cookies 行为不变
- 工作台账号卡片新增「导入外部 CK」入口(huya:import 权限控制)与导入弹窗

验证:新增 tests/test_huya_workbench_import_ck.py(入库、归属、工作台集合、重复导入幂等、
全脏数据不建记录);按 AGENTS.md 做了反向验证(关掉归属赋值后该用例变红,还原后恢复)。
前端 tsc -b 与全量 pytest 通过。
2026-10-15 14:56:58 +08:00

82 lines
3.2 KiB
Python

"""工作台「导入外部 CK」:入库 + 自动加入工作台 + 归属导入者。"""
from tests.support.db import get_test_engine, make_test_session
from web.backend.models import HuyaAccount, HuyaWorkbench, HuyaWorkbenchAccount, User
from web.backend.routers.huya import import_workbench_cookies
from web.backend.schemas import HuyaWorkbenchCookieImport
COOKIE_1 = (
"yyuid=1001; udb_uid=1001; udb_passport=hy_test_1; "
"udb_cred=cred1; udb_biztoken=biz1"
)
COOKIE_2 = (
"yyuid=1002; udb_uid=1002; udb_passport=hy_test_2; "
"udb_cred=cred2; udb_biztoken=biz2"
)
class TestImportExternalCkToWorkbench:
def setup_method(self):
self.engine = get_test_engine()
self.session = make_test_session(self.engine)
self.user = User(username="operator", password_hash="hash", role="super_admin")
self.session.add(self.user)
self.session.commit()
def teardown_method(self):
self.session.close()
def test_import_creates_accounts_and_joins_workbench(self):
result = import_workbench_cookies(
HuyaWorkbenchCookieImport(
text=f"小号A----{COOKIE_1}\n这不是一行 CK\n{COOKIE_2}",
tag="外部CK",
handbook_scope="elite",
),
db=self.session,
current=self.user,
)
assert result["success"] is True
assert result["count"] == 2
assert result["skipped"] == 1
assert len(result["account_ids"]) == 2
accounts = {
account.yyuid: account for account in self.session.query(HuyaAccount).all()
}
assert set(accounts) == {"1001", "1002"}
# 无归属的新账号自动归属导入者,否则客服在工作台看不到自己导入的账号
assert all(account.assigned_to == self.user.id for account in accounts.values())
assert accounts["1001"].tag == "外部CK"
joined = {
row.account_id
for row in self.session.query(HuyaWorkbenchAccount)
.filter(HuyaWorkbenchAccount.user_id == self.user.id)
.all()
}
assert joined == set(result["account_ids"])
assert self.session.query(HuyaWorkbench).count() == 1
def test_reimport_is_idempotent(self):
payload = HuyaWorkbenchCookieImport(text=COOKIE_1, handbook_scope="elite")
first = import_workbench_cookies(payload, db=self.session, current=self.user)
second = import_workbench_cookies(payload, db=self.session, current=self.user)
assert first["account_ids"] == second["account_ids"]
assert len(first["account_ids"]) == 1
assert self.session.query(HuyaAccount).count() == 1
assert self.session.query(HuyaWorkbenchAccount).count() == 1
def test_all_invalid_lines_reports_zero(self):
result = import_workbench_cookies(
HuyaWorkbenchCookieImport(text="垃圾行\n更多垃圾", handbook_scope="elite"),
db=self.session,
current=self.user,
)
assert result["count"] == 0
assert result["skipped"] == 2
assert result["account_ids"] == []
assert self.session.query(HuyaAccount).count() == 0
assert self.session.query(HuyaWorkbench).count() == 0