66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
# -*- coding: utf-8 -*-
|
|
from unittest.mock import patch
|
|
|
|
import pandas as pd
|
|
|
|
from backend.data.historical_price_manager import HistoricalPriceManager
|
|
|
|
|
|
def test_preload_data_prefers_market_db():
|
|
manager = HistoricalPriceManager()
|
|
manager.subscribe(["AAPL"])
|
|
|
|
market_rows = [
|
|
{
|
|
"symbol": "AAPL",
|
|
"date": "2026-03-09",
|
|
"open": 100.0,
|
|
"high": 103.0,
|
|
"low": 99.0,
|
|
"close": 102.0,
|
|
"volume": 10_000,
|
|
"vwap": 101.0,
|
|
"transactions": 500,
|
|
"source": "polygon",
|
|
}
|
|
]
|
|
|
|
with (
|
|
patch.object(manager._market_store, "get_ohlc", return_value=market_rows),
|
|
patch.object(manager._router, "load_local_price_frame") as load_csv,
|
|
):
|
|
manager.preload_data("2026-03-01", "2026-03-10")
|
|
|
|
load_csv.assert_not_called()
|
|
assert "AAPL" in manager._price_cache
|
|
assert float(manager._price_cache["AAPL"].iloc[0]["close"]) == 102.0
|
|
|
|
|
|
def test_preload_data_falls_back_to_csv():
|
|
manager = HistoricalPriceManager()
|
|
manager.subscribe(["MSFT"])
|
|
|
|
csv_df = pd.DataFrame(
|
|
{
|
|
"time": ["2026-03-09"],
|
|
"open": [200.0],
|
|
"high": [205.0],
|
|
"low": [198.0],
|
|
"close": [204.0],
|
|
"volume": [20_000],
|
|
}
|
|
)
|
|
csv_df["time"] = pd.to_datetime(csv_df["time"])
|
|
csv_df["Date"] = csv_df["time"]
|
|
csv_df.set_index("Date", inplace=True)
|
|
|
|
with (
|
|
patch.object(manager._market_store, "get_ohlc", return_value=[]),
|
|
patch.object(manager._router, "load_local_price_frame", return_value=csv_df) as load_csv,
|
|
):
|
|
manager.preload_data("2026-03-01", "2026-03-10")
|
|
|
|
load_csv.assert_called_once_with("MSFT")
|
|
assert "MSFT" in manager._price_cache
|
|
assert float(manager._price_cache["MSFT"].iloc[0]["close"]) == 204.0
|