Files
live-hub-py/tests/test_huya_workbench_transfer_collab.py
T

100 lines
3.5 KiB
Python

"""精英宝典工作台「转入外部单协作」:移出工作台并取回 CK。"""
import pytest
from fastapi import HTTPException
from tests.support.db import get_test_engine, make_test_session
from web.backend.models import AuditLog, HuyaAccount, HuyaWorkbenchAccount, User
from web.backend.routers.huya.workbench import transfer_workbench_to_collab
from web.backend.schemas import HuyaWorkbenchTransferToCollab
class TestTransferWorkbenchToCollab:
def setup_method(self):
self.engine = get_test_engine()
self.session = make_test_session(self.engine)
self.support = User(username="transfer-cs", password_hash="h", role="support")
self.account = HuyaAccount(
uid="100",
yyuid="100",
cookie="yyuid=100; udb_uid=100; udb_passport=hy_test",
assigned_to=None,
)
self.session.add_all([self.support, self.account])
self.session.commit()
self.account.assigned_to = self.support.id
self.session.commit()
def teardown_method(self):
self.session.close()
def _add_membership(self):
membership = HuyaWorkbenchAccount(
user_id=self.support.id,
handbook_scope="elite",
account_id=self.account.id,
)
self.session.add(membership)
self.session.commit()
return membership
def test_support_transfers_assigned_workbench_account(self):
self._add_membership()
result = transfer_workbench_to_collab(
HuyaWorkbenchTransferToCollab(account_id=self.account.id),
db=self.session,
current=self.support,
)
assert result["success"] is True
assert result["account_id"] == self.account.id
assert "udb_uid=100" in result["ck_text"]
assert (
self.session.query(HuyaWorkbenchAccount)
.filter(HuyaWorkbenchAccount.account_id == self.account.id)
.count()
== 0
)
audit = self.session.query(AuditLog).one()
assert audit.action == "huya:workbench:transfer_collab"
assert audit.target == f"huya_account:{self.account.id}"
def test_account_not_in_workbench_is_rejected(self):
with pytest.raises(HTTPException) as excinfo:
transfer_workbench_to_collab(
HuyaWorkbenchTransferToCollab(account_id=self.account.id),
db=self.session,
current=self.support,
)
assert excinfo.value.status_code == 404
def test_account_without_cookie_is_rejected(self):
self.account.cookie = ""
self.session.commit()
self._add_membership()
with pytest.raises(HTTPException) as excinfo:
transfer_workbench_to_collab(
HuyaWorkbenchTransferToCollab(account_id=self.account.id),
db=self.session,
current=self.support,
)
assert excinfo.value.status_code == 400
def test_support_cannot_transfer_other_users_account(self):
other = User(username="transfer-other", password_hash="h", role="support")
self.session.add(other)
self.session.commit()
self.account.assigned_to = other.id
self.session.commit()
self._add_membership()
with pytest.raises(HTTPException) as excinfo:
transfer_workbench_to_collab(
HuyaWorkbenchTransferToCollab(account_id=self.account.id),
db=self.session,
current=self.support,
)
assert excinfo.value.status_code == 403