import os import pytest from fastapi.testclient import TestClient from unittest.mock import MagicMock # 1. Set Auth Bypass and Test Config os.environ["DB_NAME"] = "bot_db_test_integration" # We keep MONGO_HOST as is (it works in verified script) # 2. Import app AFTER setting env from main import app from api.endpoints.auth import get_current_user # 3. Override Auth MOCK_USER_ID = "507f1f77bcf86cd799439011" MOCK_USER = { "_id": MOCK_USER_ID, "username": "testuser", "is_admin": False, "status": "allowed", "project_ids": [] } def mock_get_current_user(): return MOCK_USER app.dependency_overrides[get_current_user] = mock_get_current_user client = TestClient(app) def test_character_crud_lifecycle(): # 1. Create create_payload = { "name": "Integration Test Char", "character_bio": "Testing with real app structure", "character_image_doc_tg_id": "doc_123", "avatar_image": "http://example.com/img.jpg" } response = client.post("/api/characters/", json=create_payload) assert response.status_code == 200, response.text char_data = response.json() assert char_data["name"] == create_payload["name"] char_id = char_data["id"] # 2. Get response = client.get(f"/api/characters/{char_id}") assert response.status_code == 200 assert response.json()["id"] == char_id # 3. Update update_payload = {"name": "Updated Int Name"} response = client.put(f"/api/characters/{char_id}", json=update_payload) assert response.status_code == 200 assert response.json()["name"] == "Updated Int Name" # 4. Delete response = client.delete(f"/api/characters/{char_id}") assert response.status_code == 204 # 5. Verify Delete response = client.get(f"/api/characters/{char_id}") assert response.status_code == 404