""" E2E tests for backtest flow. """ import pytest from fastapi.testclient import TestClient def test_create_backtest(client: TestClient, auth_headers): """Test creating a backtest.""" response = client.post( "/api/backtest", json={ "strategy_type": "multi_factor", "strategy_params": { "weights": {"value": 0.3, "quality": 0.3, "momentum": 0.2, "f_score": 0.2} }, "start_date": "2023-01-01", "end_date": "2023-12-31", "rebalance_period": "quarterly", "initial_capital": 100000000, "commission_rate": 0.00015, "slippage_rate": 0.001, "benchmark": "KODEX200", "top_n": 20, }, headers=auth_headers, ) assert response.status_code == 200 data = response.json() assert "id" in data assert data["status"] == "pending" def test_list_backtests(client: TestClient, auth_headers): """Test listing backtests.""" # Create a backtest first client.post( "/api/backtest", json={ "strategy_type": "quality", "strategy_params": {"min_f_score": 6}, "start_date": "2023-01-01", "end_date": "2023-06-30", "rebalance_period": "monthly", "initial_capital": 50000000, "commission_rate": 0.00015, "slippage_rate": 0.001, "benchmark": "KODEX200", "top_n": 10, }, headers=auth_headers, ) # List backtests response = client.get("/api/backtest", headers=auth_headers) assert response.status_code == 200 backtests = response.json() assert len(backtests) >= 1 def test_get_backtest(client: TestClient, auth_headers): """Test getting backtest details.""" # Create a backtest create_response = client.post( "/api/backtest", json={ "strategy_type": "value_momentum", "strategy_params": {"value_weight": 0.6, "momentum_weight": 0.4}, "start_date": "2023-01-01", "end_date": "2023-03-31", "rebalance_period": "monthly", "initial_capital": 10000000, "commission_rate": 0.00015, "slippage_rate": 0.001, "benchmark": "KODEX200", "top_n": 5, }, headers=auth_headers, ) backtest_id = create_response.json()["id"] # Get backtest response = client.get(f"/api/backtest/{backtest_id}", headers=auth_headers) assert response.status_code == 200 data = response.json() assert data["id"] == backtest_id assert data["strategy_type"] == "value_momentum" def test_delete_backtest(client: TestClient, auth_headers): """Test deleting a backtest.""" # Create a backtest create_response = client.post( "/api/backtest", json={ "strategy_type": "multi_factor", "strategy_params": {}, "start_date": "2023-01-01", "end_date": "2023-01-31", "rebalance_period": "monthly", "initial_capital": 1000000, "commission_rate": 0.00015, "slippage_rate": 0.001, "benchmark": "KODEX200", "top_n": 3, }, headers=auth_headers, ) backtest_id = create_response.json()["id"] # Delete backtest response = client.delete(f"/api/backtest/{backtest_id}", headers=auth_headers) assert response.status_code == 200 # Verify deleted response = client.get(f"/api/backtest/{backtest_id}", headers=auth_headers) assert response.status_code == 404 def test_backtest_requires_auth(client: TestClient): """Test that backtest endpoints require authentication.""" response = client.get("/api/backtest") assert response.status_code == 401 response = client.post( "/api/backtest", json={ "strategy_type": "multi_factor", "strategy_params": {}, "start_date": "2023-01-01", "end_date": "2023-12-31", "rebalance_period": "quarterly", "initial_capital": 100000000, "commission_rate": 0.00015, "slippage_rate": 0.001, "benchmark": "KODEX200", "top_n": 20, }, ) assert response.status_code == 401