"""Tests for PUT /api/avatar/{avatar_id}/authorizations/takeover endpoint.""" from fastapi.testclient import TestClient from main import app from database import SessionLocal, Base, engine from models import Authorization, Avatar def setup_test_db(): Base.metadata.create_all(bind=engine) db = SessionLocal() avatar = Avatar(name="test", status="active", config={}) db.add(avatar) db.commit() db.refresh(avatar) auth = Authorization(avatar_id=avatar.id, target_id="user1", target_name="测试用户") db.add(auth) db.commit() db.refresh(auth) return db, auth.id def test_update_takeover_config(): db, auth_id = setup_test_db() try: client = TestClient(app) response = client.put( f"/api/avatar/test_avatar_id/authorizations/takeover", json={ "authorization_id": auth_id, "takeover_enabled": True, "takeover_mode": "delayed", "takeover_delay_seconds": 60, }, ) assert response.status_code == 200 data = response.json() assert data["code"] == 200 assert data["data"]["takeoverEnabled"] is True assert data["data"]["takeoverMode"] == "delayed" assert data["data"]["takeoverDelaySeconds"] == 60 # 验证数据库已更新 auth = db.query(Authorization).filter(Authorization.id == auth_id).first() assert auth.takeover_enabled is True assert auth.takeover_mode == "delayed" assert auth.takeover_delay_seconds == 60 finally: db.close() def test_update_takeover_invalid_mode(): db, auth_id = setup_test_db() try: client = TestClient(app) response = client.put( f"/api/avatar/test/authorizations/takeover", json={ "authorization_id": auth_id, "takeover_mode": "invalid_mode", }, ) assert response.status_code == 200 data = response.json() assert data["code"] == 400 finally: db.close() def test_update_takeover_invalid_delay(): db, auth_id = setup_test_db() try: client = TestClient(app) response = client.put( f"/api/avatar/test/authorizations/takeover", json={ "authorization_id": auth_id, "takeover_delay_seconds": 2, }, ) assert response.status_code == 200 data = response.json() assert data["code"] == 400 finally: db.close() def test_update_takeover_missing_auth_id(): client = TestClient(app) response = client.put( f"/api/avatar/test/authorizations/takeover", json={"takeover_enabled": True}, ) assert response.status_code == 200 data = response.json() assert data["code"] == 400 def test_update_takeover_not_found(): client = TestClient(app) response = client.put( f"/api/avatar/test/authorizations/takeover", json={"authorization_id": "nonexistent"}, ) assert response.status_code == 200 data = response.json() assert data["code"] == 404