feat(huya): 精英宝典账号支持转入外部单协作
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
"""精英宝典工作台「转入外部单协作」:移出工作台并取回 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
|
||||
Reference in New Issue
Block a user