75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
"""
|
|
E2E tests for KJB strategy flow.
|
|
"""
|
|
from fastapi.testclient import TestClient
|
|
|
|
|
|
def test_kjb_strategy_endpoint(client: TestClient, auth_headers):
|
|
"""Test KJB strategy ranking endpoint."""
|
|
response = client.post(
|
|
"/api/strategy/kjb",
|
|
json={
|
|
"universe": {"markets": ["KOSPI"]},
|
|
"top_n": 10,
|
|
},
|
|
headers=auth_headers,
|
|
)
|
|
assert response.status_code in [200, 400, 500]
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
assert data["strategy_name"] == "kjb"
|
|
assert "stocks" in data
|
|
|
|
|
|
def test_kjb_backtest_creation(client: TestClient, auth_headers):
|
|
"""Test creating a KJB backtest."""
|
|
response = client.post(
|
|
"/api/backtest",
|
|
json={
|
|
"strategy_type": "kjb",
|
|
"strategy_params": {
|
|
"max_positions": 10,
|
|
"cash_reserve_ratio": 0.3,
|
|
"stop_loss_pct": 0.03,
|
|
"target1_pct": 0.05,
|
|
"target2_pct": 0.10,
|
|
},
|
|
"start_date": "2023-01-01",
|
|
"end_date": "2023-12-31",
|
|
"initial_capital": 10000000,
|
|
"commission_rate": 0.00015,
|
|
"slippage_rate": 0.001,
|
|
"benchmark": "KOSPI",
|
|
"top_n": 30,
|
|
},
|
|
headers=auth_headers,
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert "id" in data
|
|
assert data["status"] == "pending"
|
|
|
|
|
|
def test_signal_today_endpoint(client: TestClient, auth_headers):
|
|
"""Test today's signals endpoint."""
|
|
response = client.get("/api/signal/kjb/today", headers=auth_headers)
|
|
assert response.status_code == 200
|
|
assert isinstance(response.json(), list)
|
|
|
|
|
|
def test_signal_history_endpoint(client: TestClient, auth_headers):
|
|
"""Test signal history endpoint."""
|
|
response = client.get(
|
|
"/api/signal/kjb/history",
|
|
params={"limit": 10},
|
|
headers=auth_headers,
|
|
)
|
|
assert response.status_code == 200
|
|
assert isinstance(response.json(), list)
|
|
|
|
|
|
def test_signal_requires_auth(client: TestClient):
|
|
"""Test that signal endpoints require authentication."""
|
|
response = client.get("/api/signal/kjb/today")
|
|
assert response.status_code == 401
|