"""市场行情接口测试""" import pytest from httpx import AsyncClient from app.models import Project, Competitor, CompetitorPrice from tests.conftest import assert_response_success class TestMarketAPI: """市场行情 API 测试""" @pytest.mark.api @pytest.mark.asyncio async def test_create_competitor(self, client: AsyncClient): """测试创建竞品机构""" response = await client.post( "/api/v1/competitors", json={ "competitor_name": "测试竞品", "address": "测试地址", "distance_km": 3.5, "positioning": "medium", "is_key_competitor": True } ) data = assert_response_success(response) assert data["competitor_name"] == "测试竞品" assert float(data["distance_km"]) == 3.5 @pytest.mark.api @pytest.mark.asyncio async def test_get_competitors_list( self, client: AsyncClient, sample_competitor: Competitor ): """测试获取竞品列表""" response = await client.get("/api/v1/competitors") data = assert_response_success(response) assert "items" in data assert data["total"] >= 1 @pytest.mark.api @pytest.mark.asyncio async def test_add_competitor_price( self, client: AsyncClient, sample_competitor: Competitor, sample_project: Project ): """测试添加竞品价格""" response = await client.post( f"/api/v1/competitors/{sample_competitor.id}/prices", json={ "project_id": sample_project.id, "project_name": "光子嫩肤", "original_price": 800.00, "promo_price": 600.00, "price_source": "meituan", "collected_at": "2026-01-20" } ) data = assert_response_success(response) assert float(data["original_price"]) == 800.00 assert float(data["promo_price"]) == 600.00 @pytest.mark.api @pytest.mark.asyncio async def test_market_analysis( self, client: AsyncClient, sample_project: Project, sample_competitor_price: CompetitorPrice ): """测试市场分析""" response = await client.post( f"/api/v1/projects/{sample_project.id}/market-analysis", json={ "include_benchmark": False } ) data = assert_response_success(response) assert data["project_id"] == sample_project.id assert "price_statistics" in data assert "suggested_range" in data @pytest.mark.api @pytest.mark.asyncio async def test_get_market_analysis( self, client: AsyncClient, sample_project: Project, sample_competitor_price: CompetitorPrice ): """测试获取市场分析结果""" # 先执行分析 await client.post( f"/api/v1/projects/{sample_project.id}/market-analysis", json={"include_benchmark": False} ) # 获取结果 response = await client.get( f"/api/v1/projects/{sample_project.id}/market-analysis" ) data = assert_response_success(response) assert data["project_id"] == sample_project.id