import pytest
from unittest.mock import AsyncMock, MagicMock, patch
from fastapi.testclient import TestClient

import sys
sys.path.insert(0, '/home/jang/Projects/ai-researcher')

from src.main import app

client = TestClient(app)


@pytest.fixture
def mock_session_maker():
    """创建mock session maker用于集成测试"""
    mock_session = AsyncMock()
    mock_session.add = MagicMock()
    mock_session.flush = AsyncMock()
    mock_session.refresh = AsyncMock()
    mock_session.commit = AsyncMock()

    maker = MagicMock()
    maker.return_value.__aenter__ = AsyncMock(return_value=mock_session)
    maker.return_value.__aexit__ = AsyncMock(return_value=None)
    return maker


def test_chat_sync_response():
    response = client.post("/api/v1/chat", json={"message": "你好", "context": {}})
    assert response.status_code == 200
    assert "message_id" in response.json()


def test_chat_async_response(mock_session_maker):
    with patch('src.core.task_manager.get_session_maker', return_value=mock_session_maker):
        response = client.post("/api/v1/chat", json={
            "message": "对比技术部和产品部的员工数量",
            "context": {}
        })
        assert response.status_code == 202
        assert "task_id" in response.json()
