73 lines
2.1 KiB
Python
73 lines
2.1 KiB
Python
from datetime import datetime
|
|
from unittest.mock import ANY, call
|
|
|
|
import pytest
|
|
import pytest_asyncio
|
|
|
|
from t_tech.invest import CandleInterval, GetCandlesResponse
|
|
from t_tech.invest.async_services import AsyncServices, MarketDataService
|
|
|
|
|
|
@pytest_asyncio.fixture
|
|
async def marketdata_service(mocker) -> MarketDataService:
|
|
return mocker.create_autospec(MarketDataService)
|
|
|
|
|
|
@pytest_asyncio.fixture
|
|
async def async_services(
|
|
mocker, marketdata_service: MarketDataService
|
|
) -> AsyncServices:
|
|
async_services = mocker.create_autospec(AsyncServices)
|
|
async_services.market_data = marketdata_service
|
|
return async_services
|
|
|
|
|
|
class TestAsyncMarketData:
|
|
@pytest.mark.asyncio
|
|
@pytest.mark.parametrize(
|
|
"candle_interval,from_,to,expected",
|
|
[
|
|
(
|
|
CandleInterval.CANDLE_INTERVAL_DAY,
|
|
datetime(2020, 1, 1),
|
|
datetime(2020, 1, 2),
|
|
1,
|
|
),
|
|
(
|
|
CandleInterval.CANDLE_INTERVAL_DAY,
|
|
datetime(2020, 1, 1),
|
|
datetime(2021, 3, 3),
|
|
2,
|
|
),
|
|
],
|
|
)
|
|
async def test_get_candles(
|
|
self,
|
|
async_services: AsyncServices,
|
|
marketdata_service: MarketDataService,
|
|
candle_interval: CandleInterval,
|
|
from_: datetime,
|
|
to: datetime,
|
|
expected: int,
|
|
):
|
|
marketdata_service.get_candles.return_value = GetCandlesResponse(candles=[])
|
|
[
|
|
candle
|
|
async for candle in AsyncServices.get_all_candles(
|
|
async_services, interval=candle_interval, from_=from_, to=to
|
|
)
|
|
]
|
|
marketdata_service.get_candles.assert_has_calls(
|
|
[
|
|
call(
|
|
from_=ANY,
|
|
to=ANY,
|
|
interval=candle_interval,
|
|
candle_source_type=None,
|
|
figi="",
|
|
instrument_id="",
|
|
)
|
|
for _ in range(expected)
|
|
]
|
|
)
|