""" Test OHLCV endpoints """ import pytest from fastapi.testclient import TestClient def test_get_ohlcv_data_post(client: TestClient, sample_ohlcv_data): """Test POST OHLCV endpoint""" response = client.post("/api/v1/market/ohlcv", json=sample_ohlcv_data) # Should return 501 (not implemented) or 200/404 assert response.status_code in [200, 404, 501] if response.status_code == 501: data = response.json() assert "detail" in data assert "error_type" in data["detail"] assert data["detail"]["error_type"] == "DATA_NOT_FOUND" assert "not yet implemented" in data["detail"]["message"] def test_get_ohlcv_data_get(client: TestClient): """Test GET OHLCV endpoint""" params = { "start_date": "2023-01-01T00:00:00", "end_date": "2023-12-31T23:59:59", "interval": "1d" } response = client.get("/api/v1/market/ohlcv/AAPL", params=params) # Should return 501 (not implemented) or 200/404 assert response.status_code in [200, 404, 501] def test_ohlcv_invalid_dates(client: TestClient): """Test OHLCV with invalid dates""" invalid_data = { "ticker": "AAPL", "start_date": "2023-12-31T00:00:00", "end_date": "2023-01-01T00:00:00", # End before start "interval": "1d" } response = client.post("/api/v1/market/ohlcv", json=invalid_data) assert response.status_code == 400 data = response.json() assert "detail" in data assert "error_type" in data["detail"] assert data["detail"]["error_type"] == "VALIDATION_ERROR" def test_ohlcv_invalid_interval(client: TestClient): """Test OHLCV with invalid interval""" invalid_data = { "ticker": "AAPL", "start_date": "2023-01-01T00:00:00", "end_date": "2023-12-31T00:00:00", "interval": "5min" # Invalid interval } response = client.post("/api/v1/market/ohlcv", json=invalid_data) assert response.status_code == 422 # Validation error def test_ohlcv_valid_intervals(client: TestClient): """Test OHLCV with all valid intervals""" valid_intervals = ["1d", "1w", "1m"] for interval in valid_intervals: data = { "ticker": "AAPL", "start_date": "2023-01-01T00:00:00", "end_date": "2023-12-31T00:00:00", "interval": interval } response = client.post("/api/v1/market/ohlcv", json=data) # Should not fail on validation assert response.status_code != 422 def test_ohlcv_request_validation(client: TestClient): """Test OHLCV request validation""" # Empty ticker invalid_requests = [ { "ticker": "", "start_date": "2023-01-01T00:00:00", "end_date": "2023-12-31T00:00:00", "interval": "1d" }, { "ticker": "A" * 20, # Too long "start_date": "2023-01-01T00:00:00", "end_date": "2023-12-31T00:00:00", "interval": "1d" }, { # Missing required fields "ticker": "AAPL", "interval": "1d" } ] for invalid_request in invalid_requests: response = client.post("/api/v1/market/ohlcv", json=invalid_request) assert response.status_code == 422 def test_ohlcv_get_missing_params(client: TestClient): """Test GET OHLCV endpoint with missing parameters""" # Missing required parameters response = client.get("/api/v1/market/ohlcv/AAPL") assert response.status_code == 422 def test_ohlcv_get_invalid_interval_param(client: TestClient): """Test GET OHLCV endpoint with invalid interval parameter""" params = { "start_date": "2023-01-01T00:00:00", "end_date": "2023-12-31T00:00:00", "interval": "invalid" } response = client.get("/api/v1/market/ohlcv/AAPL", params=params) assert response.status_code == 422