Spaces:
Running
Running
| import pytest | |
| from fastapi.testclient import TestClient | |
| from src.models.api import app, COMMODITY_MAP | |
| import src.models.api as api | |
| from unittest.mock import MagicMock | |
| client = TestClient(app) | |
| def mock_model(): | |
| # Mock the global model variable in src.models.api | |
| api.model = MagicMock() | |
| yield | |
| api.model = None | |
| def test_health_check(): | |
| response = client.get("/") | |
| assert response.status_code == 200 | |
| assert response.json()["service"] == "MLOps Forecasting API" | |
| def test_predict_invalid_commodity(): | |
| payload = { | |
| "commodity": "Invalid", | |
| "lag_prices": [200.0] * 7 | |
| } | |
| response = client.post("/predict", json=payload) | |
| assert response.status_code == 400 | |
| assert "Unknown commodity" in response.json()["detail"] | |
| def test_predict_wrong_lag_count(): | |
| payload = { | |
| "commodity": "Samba", | |
| "lag_prices": [200.0] * 5 # Should be 7 | |
| } | |
| response = client.post("/predict", json=payload) | |
| assert response.status_code == 400 | |
| assert "Exactly 7 lag prices" in response.json()["detail"] | |
| def test_predict_success(): | |
| api.model.predict.return_value = [250.0] | |
| payload = { | |
| "commodity": "Samba", | |
| "lag_prices": [200.0] * 7 | |
| } | |
| response = client.post("/predict", json=payload) | |
| assert response.status_code == 200 | |
| assert response.json()["predicted_price_lkr"] == 250.0 | |