"""Tests for account ownership transfer.""" import pytest from httpx import AsyncClient @pytest.mark.asyncio class TestOwnershipTransfer: """Test POST /accounts/me/transfer-ownership.""" async def _create_member(self, client: AsyncClient, owner_headers: dict, test_db): """Register a second user and add them to the owner's account.""" from sqlalchemy import select from app.models.user import User # Register second user (gets own account) resp = await client.post("/api/v1/auth/register", json={ "email": "member@example.com", "password": "TestPassword123!", "name": "Member User", }) assert resp.status_code == 201 member_id = resp.json()["id"] # Get owner's account_id me = await client.get("/api/v1/auth/me", headers=owner_headers) owner_account_id = me.json()["account_id"] # Move member to owner's account result = await test_db.execute(select(User).where(User.id == member_id)) member = result.scalar_one() member.account_id = owner_account_id member.account_role = "engineer" await test_db.commit() return member_id async def test_transfer_success(self, client: AsyncClient, auth_headers: dict, test_db): member_id = await self._create_member(client, auth_headers, test_db) response = await client.post( "/api/v1/accounts/me/transfer-ownership", json={"current_password": "TestPassword123!", "target_user_id": member_id}, headers=auth_headers, ) assert response.status_code == 200 assert response.json()["owner_id"] == member_id async def test_transfer_self(self, client: AsyncClient, auth_headers: dict, test_user): response = await client.post( "/api/v1/accounts/me/transfer-ownership", json={"current_password": "TestPassword123!", "target_user_id": test_user["user_data"]["id"]}, headers=auth_headers, ) assert response.status_code == 400 async def test_transfer_wrong_password(self, client: AsyncClient, auth_headers: dict, test_db): member_id = await self._create_member(client, auth_headers, test_db) response = await client.post( "/api/v1/accounts/me/transfer-ownership", json={"current_password": "WrongPassword123!", "target_user_id": member_id}, headers=auth_headers, ) assert response.status_code == 401