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) @pytest.fixture(autouse=True) 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