Spaces:
Running
Running
| """ | |
| Tests for DataSync - data synchronization. | |
| """ | |
| from unittest.mock import MagicMock, patch | |
| import pandas as pd | |
| import pytest | |
| class TestDataSync: | |
| """Tests for DataSync class.""" | |
| def data_sync(self): | |
| """Create DataSync instance with mocked provider.""" | |
| from core.data_sync import DataSync | |
| with ( | |
| patch("core.data_sync.AlpacaProvider") as mock_provider, | |
| patch("core.data_sync.ParallelExecutor") as mock_executor, | |
| patch("core.data_sync.ensure_dir"), | |
| ): | |
| mock_provider_instance = MagicMock() | |
| mock_provider.return_value = mock_provider_instance | |
| mock_executor_instance = MagicMock() | |
| mock_executor.return_value = mock_executor_instance | |
| ds = DataSync.__new__(DataSync) | |
| ds.provider = mock_provider_instance | |
| ds.executor = mock_executor_instance | |
| ds.batch_size = 200 | |
| return ds, mock_provider_instance, mock_executor_instance | |
| def test_init(self, data_sync): | |
| """Test DataSync initialization.""" | |
| ds, mock_provider, mock_executor = data_sync | |
| assert ds.provider is not None | |
| assert ds.batch_size == 200 | |
| def test_get_nasdaq_symbols(self, data_sync): | |
| """Test get_nasdaq_symbols calls provider.""" | |
| ds, mock_provider, _ = data_sync | |
| mock_provider.fetch_nasdaq_symbols.return_value = ["AAPL", "GOOGL"] | |
| result = ds.get_nasdaq_symbols() | |
| mock_provider.fetch_nasdaq_symbols.assert_called_once() | |
| assert result == ["AAPL", "GOOGL"] | |
| def test_sync_metadata(self, data_sync): | |
| """Test sync_metadata saves CSV.""" | |
| ds, mock_provider, _ = data_sync | |
| mock_df = pd.DataFrame( | |
| { | |
| "symbol": ["AAPL", "GOOGL"], | |
| "sector": ["Tech", "Tech"], | |
| } | |
| ) | |
| mock_provider.fetch_nasdaq_metadata.return_value = mock_df | |
| with patch("pandas.DataFrame.to_csv") as mock_to_csv: | |
| ds.sync_metadata() | |
| mock_to_csv.assert_called_once() | |
| def test_sync_calendar(self, data_sync): | |
| """Test sync_calendar saves calendar data.""" | |
| ds, mock_provider, _ = data_sync | |
| mock_calendar = pd.DataFrame( | |
| { | |
| "date": ["2026-04-15"], | |
| "is_open": [True], | |
| } | |
| ) | |
| mock_provider.fetch_calendar.return_value = mock_calendar | |
| with patch("pandas.DataFrame.to_csv") as mock_to_csv: | |
| ds.sync_calendar() | |
| mock_to_csv.assert_called_once() | |
| class TestAlpacaProvider: | |
| """Tests for AlpacaProvider.""" | |
| def test_alpaca_provider_init(self): | |
| """Test AlpacaProvider initialization.""" | |
| from core.data_provider import AlpacaProvider | |
| provider = AlpacaProvider() | |
| assert provider is not None | |
| class TestYahooProvider: | |
| """Tests for YahooProvider.""" | |
| def test_yahoo_provider_init(self): | |
| """Test YahooProvider initialization.""" | |
| from core.yahoo_provider import YahooProvider | |
| provider = YahooProvider() | |
| assert provider is not None | |
| class TestWebullProvider: | |
| """Tests for WebullProvider.""" | |
| def test_webull_provider_init(self): | |
| """Test WebullProvider initialization.""" | |
| from core.webull_provider import WebullProvider | |
| provider = WebullProvider() | |
| assert provider is not None | |