VoiceLedger / tests /test_modal_deploy.py
Sagar Patel
Harden demo flow and surface Modal status
2103dc7
Raw
History Blame Contribute Delete
2.24 kB
import json
import pytest
pytest.importorskip("fastapi")
from fastapi.testclient import TestClient
from backend import modal_deploy
def _client() -> TestClient:
return TestClient(modal_deploy.api.get_raw_f()())
def test_modal_parse_route_accepts_json_body(monkeypatch) -> None:
response_payload = {
"transaction_type": "sale",
"item": "mangoes",
"quantity": 12,
"unit_price": 20,
"amount": 240,
"customer": None,
"payment_status": "paid",
"notes": "Sold 12 mangoes, 20 each",
"confidence": 0.94,
}
monkeypatch.setattr(modal_deploy, "_generate_nemotron_json", lambda text, prompt: json.dumps(response_payload))
response = _client().post("/parse", json={"text": "Sold 12 mangoes, 20 each"})
assert response.status_code == 200
transaction = response.json()["transaction"]
assert transaction["transaction_type"] == "sale"
assert transaction["amount"] == 240
def test_modal_parse_route_accepts_raw_text_body(monkeypatch) -> None:
def fail_model(text: str, prompt: str) -> str:
raise RuntimeError("model unavailable")
monkeypatch.setattr(modal_deploy, "_generate_nemotron_json", fail_model)
response = _client().post("/parse", content="Paid 500 for supplies")
assert response.status_code == 200
transaction = response.json()["transaction"]
assert transaction["transaction_type"] == "expense"
assert transaction["amount"] == 500
def test_modal_parse_route_handles_empty_body() -> None:
response = _client().post("/parse", content="")
assert response.status_code == 200
transaction = response.json()["transaction"]
assert transaction["transaction_type"] == "unknown"
assert transaction["confidence"] == 0
def test_modal_parse_route_falls_back_when_model_output_is_invalid(monkeypatch) -> None:
monkeypatch.setattr(modal_deploy, "_generate_nemotron_json", lambda text, prompt: "not json")
response = _client().post("/parse", json={"text": "Amit owes 100"})
assert response.status_code == 200
transaction = response.json()["transaction"]
assert transaction["transaction_type"] == "customer_credit"
assert transaction["customer"] == "Amit"