Add configurable data providers and localize frontend UI

This commit is contained in:
2026-03-15 00:55:12 +08:00
parent 12de93aa30
commit d233a3f55d
38 changed files with 1936 additions and 1038 deletions

View File

@@ -157,6 +157,15 @@ class TestPollingPriceManager:
assert manager.api_key == "test_key"
assert manager.poll_interval == 30
assert manager.provider == "finnhub"
assert manager.running is False
def test_init_yfinance(self):
manager = PollingPriceManager(provider="yfinance", poll_interval=15)
assert manager.api_key is None
assert manager.poll_interval == 15
assert manager.provider == "yfinance"
assert manager.running is False
def test_subscribe(self):
@@ -182,7 +191,7 @@ class TestPollingPriceManager:
assert callback in manager.price_callbacks
@patch.object(PollingPriceManager, "_fetch_prices")
def test_start_stop(self):
def test_start_stop(self, _mock_fetch_prices):
manager = PollingPriceManager(api_key="test_key", poll_interval=1)
manager.subscribe(["AAPL"])
@@ -246,6 +255,20 @@ class TestMarketService:
assert service.mock_mode is False
assert service.api_key == "test_key"
@patch("backend.services.market.get_data_source", return_value="yfinance")
@patch.object(PollingPriceManager, "start")
def test_start_real_mode_with_yfinance(self, _mock_start, _mock_source):
service = MarketService(
tickers=["AAPL"],
poll_interval=10,
mock_mode=False,
)
service._start_real_mode()
assert isinstance(service._price_manager, PollingPriceManager)
assert service._price_manager.provider == "yfinance"
@pytest.mark.asyncio
async def test_start_mock_mode(self):
service = MarketService(
@@ -264,8 +287,9 @@ class TestMarketService:
service.stop()
@patch("backend.services.market.get_data_source", return_value="finnhub")
@pytest.mark.asyncio
async def test_start_real_mode_without_api_key(self):
async def test_start_real_mode_without_api_key(self, _mock_source):
service = MarketService(
tickers=["AAPL"],
mock_mode=False,