lucky-loster's picture
Upload folder using huggingface_hub
590a501 verified
Raw
History Blame Contribute Delete
4 kB
import pytest
from httpx import ASGITransport, AsyncClient
from app.main import app
@pytest.fixture
async def client():
transport = ASGITransport(app=app)
async with AsyncClient(transport=transport, base_url="http://test") as ac:
yield ac
@pytest.mark.asyncio
async def test_root(client):
resp = await client.get("/")
assert resp.status_code == 200
data = resp.json()
assert data["name"] == "Personal Trading System V1"
@pytest.mark.asyncio
async def test_get_quotes(client):
resp = await client.get("/api/market/quotes")
assert resp.status_code == 200
quotes = resp.json()
assert len(quotes) > 10
assert "symbol" in quotes[0]
assert "name" in quotes[0]
assert "exchange" in quotes[0]
assert "category" in quotes[0]
assert "change_pct" in quotes[0]
@pytest.mark.asyncio
async def test_get_quotes_by_category(client):
resp = await client.get("/api/market/quotes?category=ferrous")
assert resp.status_code == 200
quotes = resp.json()
assert len(quotes) > 0
assert all(q["category"] == "ferrous" for q in quotes)
@pytest.mark.asyncio
async def test_get_contracts(client):
resp = await client.get("/api/market/contracts")
assert resp.status_code == 200
contracts = resp.json()
assert len(contracts) > 50
@pytest.mark.asyncio
async def test_get_contracts_by_category(client):
resp = await client.get("/api/market/contracts?category=precious_metal")
assert resp.status_code == 200
contracts = resp.json()
assert len(contracts) >= 2
assert all(c["category"] == "precious_metal" for c in contracts)
@pytest.mark.asyncio
async def test_get_exchanges(client):
resp = await client.get("/api/market/exchanges")
assert resp.status_code == 200
data = resp.json()
assert "SHFE" in data
assert "DCE" in data
assert "CZCE" in data
assert "CFFEX" in data
@pytest.mark.asyncio
async def test_get_categories(client):
resp = await client.get("/api/market/categories")
assert resp.status_code == 200
data = resp.json()
assert "financial" in data
assert "precious_metal" in data
assert "energy" in data
assert "agriculture" in data
@pytest.mark.asyncio
async def test_get_klines(client):
resp = await client.get("/api/market/klines/%E8%9E%BA%E7%BA%B9%E9%92%A2?limit=50")
assert resp.status_code == 200
klines = resp.json()
assert len(klines) <= 50
@pytest.mark.asyncio
async def test_get_account(client):
resp = await client.get("/api/account")
assert resp.status_code == 200
data = resp.json()
assert "total_balance" in data
assert data["total_balance"] == 1_000_000.0
@pytest.mark.asyncio
async def test_place_order(client):
resp = await client.post("/api/orders", json={
"symbol": "螺纹钢",
"side": "BUY",
"order_type": "MARKET",
"quantity": 1,
})
assert resp.status_code == 200
data = resp.json()
assert data["status"] == "FILLED"
assert data["symbol"] == "螺纹钢"
@pytest.mark.asyncio
async def test_get_available_strategies(client):
resp = await client.get("/api/strategies/available")
assert resp.status_code == 200
strategies = resp.json()
assert len(strategies) >= 3
types = [s["type"] for s in strategies]
assert "ma_crossover" in types
assert "bollinger_bands" in types
assert "dual_thrust" in types
@pytest.mark.asyncio
async def test_risk_metrics(client):
resp = await client.get("/api/risk")
assert resp.status_code == 200
data = resp.json()
assert "total_balance" in data
assert "risk_usage_percent" in data
@pytest.mark.asyncio
async def test_market_mode(client):
resp = await client.get("/api/market/mode")
assert resp.status_code == 200
assert resp.json()["mode"] in ("simulated", "realtime")
@pytest.mark.asyncio
async def test_get_trades(client):
resp = await client.get("/api/trades")
assert resp.status_code == 200