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.py51
1 files changed, 51 insertions, 0 deletions
diff --git a/backend/tests/test_api.py b/backend/tests/test_api.py
index d898ee2..1ea4003 100644
--- a/backend/tests/test_api.py
+++ b/backend/tests/test_api.py
@@ -112,6 +112,8 @@ def test_service_overview_prefers_info_fields(monkeypatch) -> None:
overview = data_service.get_ticker_overview("AAPL")
assert overview is not None
+ assert overview["currency"] == "USD"
+ assert overview["currency_warning"] is None
assert overview["profile"]["name"] == "Apple Inc."
assert overview["profile"]["exchange"] == "NASDAQ"
assert overview["quote"]["price"] == 190.0
@@ -290,6 +292,8 @@ def test_compute_ttm_ratios_populates_overlapping_stats(monkeypatch) -> None:
)
ratios = data_service.compute_ttm_ratios("AAPL")
+ assert ratios["currency"] == "USD"
+ assert ratios["currency_warning"] is None
assert ratios["market_cap"] == 5_000.0
assert ratios["trailing_eps"] == 4.0
assert ratios["trailing_pe"] == 12.5
@@ -366,6 +370,8 @@ def test_financials_schema_structure() -> None:
cash_flow=FinancialStatement(columns=[], rows=[]),
)
assert resp.period == "annual"
+ assert resp.currency == "USD"
+ assert resp.currency_warning is None
def test_overview_uses_computed_sources_and_ratios(monkeypatch) -> None:
@@ -410,6 +416,8 @@ def test_overview_uses_computed_sources_and_ratios(monkeypatch) -> None:
overview = data_service.get_ticker_overview("AAPL")
assert overview is not None
+ assert overview["currency"] == "USD"
+ assert overview["currency_warning"] is None
assert overview["stats"]["trailing_pe"] == 24.5
assert overview["stats"]["market_cap"] == 1_500_000_000.0
assert overview["ratios"]["price_to_book"] == 8.0
@@ -448,6 +456,8 @@ def test_build_income_annual_columns_and_ttm(monkeypatch) -> None:
result = data_service.get_financials("AAPL", "annual")
income = result["income"]
+ assert result["currency"] == "USD"
+ assert result["currency_warning"] is None
assert income["columns"] == ["FY 2024", "FY 2023", "FY 2022", "FY 2021", "TTM"]
rev_row = next(r for r in income["rows"] if r["label"] == "Total Revenue")
assert rev_row["is_total"] is True
@@ -457,6 +467,47 @@ def test_build_income_annual_columns_and_ttm(monkeypatch) -> None:
assert margin_row["values"][0] is not None # FY 2024 gross margin computed
+def test_financials_currency_warning_for_foreign_ticker(monkeypatch) -> None:
+ data_service.STATEMENT_CACHE.clear()
+ data_service.INCOME_CACHE.clear()
+ data_service.BALANCE_CACHE.clear()
+ data_service.CF_CACHE.clear()
+ data_service.FINANCIALS_CACHE.clear()
+
+ monkeypatch.setattr(
+ data_service,
+ "get_company_info",
+ lambda symbol: {"financialCurrency": "CAD", "currency": "USD"},
+ )
+ monkeypatch.setattr(data_service, "get_fast_info", lambda symbol: {"currency": "USD"})
+ monkeypatch.setattr(data_service, "get_income_statement", lambda sym, quarterly=False: pd.DataFrame())
+ monkeypatch.setattr(data_service, "get_balance_sheet", lambda sym, quarterly=False: pd.DataFrame())
+ monkeypatch.setattr(data_service, "get_cash_flow", lambda sym, quarterly=False: pd.DataFrame())
+
+ result = data_service.get_financials("RY", "annual")
+
+ assert result["currency"] == "CAD"
+ assert isinstance(result["currency_warning"], str)
+ assert result["currency_warning"]
+ assert "USD" in result["currency_warning"]
+ assert "CAD" in result["currency_warning"]
+
+
+def test_overview_currency_uses_trading_currency(monkeypatch) -> None:
+ clear_service_caches()
+ monkeypatch.setattr(data_service, "get_company_info", lambda symbol: {"currency": "USD", "currentPrice": 120.0})
+ monkeypatch.setattr(data_service, "get_fast_info", lambda symbol: {"currency": "CAD"})
+ monkeypatch.setattr(data_service, "get_price_history", lambda symbol, period="1m": [])
+ monkeypatch.setattr(data_service, "_pick_search_match", lambda symbol: {"symbol": "CCJ", "name": "Cameco Corp.", "exchange": "TSX"})
+ monkeypatch.setattr(data_service, "get_profile_enrichment", lambda symbol: {})
+ monkeypatch.setattr(data_service, "compute_ttm_ratios", lambda symbol: {"market_cap": 1_000.0})
+
+ overview = data_service.get_ticker_overview("CCJ")
+
+ assert overview is not None
+ assert overview["currency"] == "CAD"
+
+
def test_build_income_quarterly_eight_columns(monkeypatch) -> None:
data_service.STATEMENT_CACHE.clear()
data_service.INCOME_CACHE.clear()