"""精英宝典工作台「转入外部单协作」:移出工作台并取回 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