- 新增 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 通过。
82 lines
3.2 KiB
Python
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
|