summaryrefslogtreecommitdiff
path: root/backend/tests/test_api.py
diff options
context:
space:
mode:
Diffstat (limited to 'backend/tests/test_api.py')
-rw-r--r--backend/tests/test_api.py27
1 files changed, 27 insertions, 0 deletions
diff --git a/backend/tests/test_api.py b/backend/tests/test_api.py
index d0aafa4..2ec4a08 100644
--- a/backend/tests/test_api.py
+++ b/backend/tests/test_api.py
@@ -1168,3 +1168,30 @@ def test_get_ratios_interest_coverage(monkeypatch) -> None:
assert result["interest_coverage"]["value"] == 8.5
assert result["interest_coverage"]["spark"] == []
+
+
+def test_ticker_ratios_route(monkeypatch) -> None:
+ """GET /api/tickers/{symbol}/ratios returns a valid RatiosResponse shape."""
+ clear_service_caches()
+
+ def _fake_ratios(sym: str) -> dict:
+ def _pt(v=None):
+ return {"value": v, "spark": [], "vs_sector": None}
+
+ return {
+ "pe_ttm": _pt(24.3), "ev_ebitda": _pt(16.1),
+ "gross_margin": _pt(0.46), "net_margin": _pt(0.14),
+ "price_to_book": _pt(5.8), "price_to_sales": _pt(6.2),
+ "ev_to_sales": _pt(6.5), "p_fcf": _pt(28.4), "forward_pe": _pt(22.0),
+ "operating_margin": _pt(0.19), "ebitda_margin": _pt(0.22), "fcf_margin": _pt(0.18),
+ "roe": _pt(0.38), "roa": _pt(0.12), "roic": _pt(0.22),
+ "debt_to_equity": _pt(1.4), "current_ratio": _pt(1.9),
+ "quick_ratio": _pt(1.5), "interest_coverage": _pt(8.5),
+ "dividend_yield": _pt(None), "dividend_payout": _pt(None),
+ }
+
+ monkeypatch.setattr(main.data_service, "get_ratios", _fake_ratios)
+ result = main.ticker_ratios("AAPL")
+ assert result["pe_ttm"]["value"] == pytest.approx(24.3)
+ assert result["gross_margin"]["spark"] == []
+ assert result["dividend_yield"]["vs_sector"] is None