100 lines
3.5 KiB
Python
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
|