Backend (pytest): - Auth flow tests (login, token, protected routes) - Portfolio CRUD and transaction tests - Strategy endpoint tests - Backtest flow tests - Snapshot and returns tests Frontend (Playwright): - Auth page tests - Portfolio navigation tests - Strategy page tests - Backtest page tests - Playwright configuration Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
87 lines
2.4 KiB
Python
87 lines
2.4 KiB
Python
"""
|
|
E2E tests for quant strategy flow.
|
|
"""
|
|
import pytest
|
|
from fastapi.testclient import TestClient
|
|
|
|
|
|
def test_multi_factor_strategy(client: TestClient, auth_headers):
|
|
"""Test multi-factor strategy endpoint."""
|
|
response = client.post(
|
|
"/api/strategy/multi-factor",
|
|
json={
|
|
"market": "KOSPI",
|
|
"min_market_cap": 100000000000,
|
|
"top_n": 20,
|
|
"weights": {
|
|
"value": 0.3,
|
|
"quality": 0.3,
|
|
"momentum": 0.2,
|
|
"f_score": 0.2,
|
|
},
|
|
},
|
|
headers=auth_headers,
|
|
)
|
|
# May fail if no stock data, just check it returns a proper response
|
|
assert response.status_code in [200, 400, 500]
|
|
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
assert "stocks" in data
|
|
assert "strategy_type" in data
|
|
assert data["strategy_type"] == "multi_factor"
|
|
|
|
|
|
def test_quality_strategy(client: TestClient, auth_headers):
|
|
"""Test quality strategy endpoint."""
|
|
response = client.post(
|
|
"/api/strategy/quality",
|
|
json={
|
|
"market": "KOSPI",
|
|
"min_market_cap": 100000000000,
|
|
"top_n": 20,
|
|
"min_f_score": 6,
|
|
},
|
|
headers=auth_headers,
|
|
)
|
|
assert response.status_code in [200, 400, 500]
|
|
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
assert "stocks" in data
|
|
assert data["strategy_type"] == "quality"
|
|
|
|
|
|
def test_value_momentum_strategy(client: TestClient, auth_headers):
|
|
"""Test value-momentum strategy endpoint."""
|
|
response = client.post(
|
|
"/api/strategy/value-momentum",
|
|
json={
|
|
"market": "KOSPI",
|
|
"min_market_cap": 100000000000,
|
|
"top_n": 20,
|
|
"value_weight": 0.5,
|
|
"momentum_weight": 0.5,
|
|
},
|
|
headers=auth_headers,
|
|
)
|
|
assert response.status_code in [200, 400, 500]
|
|
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
assert "stocks" in data
|
|
assert data["strategy_type"] == "value_momentum"
|
|
|
|
|
|
def test_strategy_requires_auth(client: TestClient):
|
|
"""Test that strategy endpoints require authentication."""
|
|
response = client.post(
|
|
"/api/strategy/multi-factor",
|
|
json={
|
|
"market": "KOSPI",
|
|
"min_market_cap": 100000000000,
|
|
"top_n": 20,
|
|
},
|
|
)
|
|
assert response.status_code == 401
|