| from datetime import datetime | |
| from typing import List | |
| import pytest | |
| from fastapi import HTTPException | |
| from fastapi.testclient import TestClient | |
| from app.main import app, _resolve_transactions | |
| from app.schemas import InsightRequest, Transaction | |
| def _txn() -> Transaction: | |
| return Transaction( | |
| timestamp=datetime.utcnow(), | |
| category="Travel", | |
| amount=100.0, | |
| currency="INR", | |
| ) | |
| def test_resolve_transactions_handles_payload_list(monkeypatch): | |
| payload = InsightRequest(user_id="abc", transactions=[_txn()]) | |
| result = _resolve_transactions(payload) | |
| assert len(result) == 1 | |
| def test_resolve_transactions_requires_user_id_when_no_transactions(): | |
| payload = InsightRequest(user_id=None, transactions=[]) | |
| with pytest.raises(HTTPException): | |
| _resolve_transactions(payload) | |
| def test_resolve_transactions_fetches_from_db(monkeypatch): | |
| payload = InsightRequest(user_id="6686280844fc8cbae596aa51", transactions=[]) | |
| def fake_fetch(user_id: str) -> List[Transaction]: | |
| assert user_id == payload.user_id | |
| return [_txn()] | |
| monkeypatch.setattr("app.main.fetch_recent_transactions", fake_fetch) | |
| result = _resolve_transactions(payload) | |
| assert len(result) == 1 | |
| def test_insights_endpoint_requires_payload_when_empty(monkeypatch): | |
| client = TestClient(app) | |
| response = client.post("/insights", json={"user_id": None, "transactions": []}) | |
| assert response.status_code == 400 | |