"""平台API路由测试 - 验证不存在双重前缀问题"""
import pytest
import pytest_asyncio
from httpx import AsyncClient, ASGITransport

from app.main import app


class TestPlatformsRoutePrefix:
    """平台路由前缀测试"""

    @pytest.mark.asyncio
    async def test_platforms_endpoint_not_double_prefixed(self):
        """
        验证platforms端点路径不是 /api/v1/api/*

        预期：
        - /api/v1/api/platforms/health 应该返回404（不存在）
        - /api/v1/platforms/health 应该返回200（正确路径）
        """
        transport = ASGITransport(app=app)
        async with AsyncClient(transport=transport, base_url="http://test") as client:
            wrong_path_response = await client.get("/api/v1/api/platforms/health")
            correct_path_response = await client.get("/api/v1/platforms/health")

            assert wrong_path_response.status_code == 404, \
                f"错误：/api/v1/api/platforms/health 返回 {wrong_path_response.status_code}，应该是404（说明存在双重前缀问题）"

            assert correct_path_response.status_code == 200, \
                f"错误：/api/v1/platforms/health 返回 {correct_path_response.status_code}，应该是200（端点不可用）"

    @pytest.mark.asyncio
    async def test_platforms_health_endpoint_accessible(self):
        """验证platforms健康检查端点可通过正确路径访问"""
        transport = ASGITransport(app=app)
        async with AsyncClient(transport=transport, base_url="http://test") as client:
            response = await client.get("/api/v1/platforms/health")

            assert response.status_code == 200, \
                f"平台健康检查端点无法访问，状态码: {response.status_code}"

            data = response.json()
            assert "platforms" in data
            assert "total" in data
            assert "configured_count" in data

    @pytest.mark.asyncio
    async def test_platforms_health_by_name_endpoint(self):
        """验证platforms按名称健康检查端点可通过正确路径访问"""
        transport = ASGITransport(app=app)
        async with AsyncClient(transport=transport, base_url="http://test") as client:
            response = await client.get("/api/v1/platforms/health/kimi")

            assert response.status_code == 200, \
                f"平台按名称健康检查端点无法访问，状态码: {response.status_code}"

            data = response.json()
            assert "name" in data
            assert data["name"] == "kimi"
