示例#1
0
async def test_prepare_df_div_ext(div_ext_table, mocker):
    """Проверка агрегации данных."""
    event = events.UpdateDivCommand(
        ticker="GAZP",
        type_=col.ORDINARY,
        usd=pd.DataFrame(
            [2, 1],
            columns=[col.CLOSE],
            index=[datetime(2020, 12, 4), datetime(2020, 12, 5)],
        ),
    )
    fake_gateway = mocker.AsyncMock()
    fake_gateway.return_value = pd.DataFrame(
        [[3, col.RUR], [5, col.RUR]],
        columns=["GAZP", col.CURRENCY],
        index=[datetime(2020, 12, 4), datetime(2020, 12, 5)],
    )
    div_ext_table._gateways = (
        dividends.GateWayDesc("Dohod", col.ORDINARY, fake_gateway),
        dividends.GateWayDesc("NASDAQ", col.FOREIGN, fake_gateway),
    )

    df = await div_ext_table._prepare_df(event)

    pd.testing.assert_frame_equal(
        df,
        pd.DataFrame(
            [[3, 3], [5, 5]],
            columns=["Dohod", "MEDIAN"],
            index=[datetime(2020, 12, 4), datetime(2020, 12, 5)],
        ),
        check_dtype=False,
    )
示例#2
0
def dividends_validation(ticker: str) -> pd.DataFrame:
    """Проверяет корректности данных о дивидендах для тикера.

    Запускает принудительное обновление, сравнивает основные данные по дивидендам с альтернативными
    источниками и распечатывает результаты.
    """
    bootstrap.BUS.handle_event(events.UpdateDivCommand(ticker))

    df_local = div.dividends(ticker)
    df_local.columns = ["LOCAL"]

    div_ex = div.div_ext(ticker)

    df_comp = _compare(div_ex.iloc[:, -1:], df_local)
    df_comp = pd.concat(
        [div_ex.iloc[:, :-1], df_comp],
        axis=1,
    )

    first_quote = not_div.quotes((ticker, ))[0].index[0]
    df_comp = df_comp.loc[first_quote:]

    comp_str = f"\nСравнение интернет источников с локальными данными - {ticker}\n\n{df_comp}"
    LOGGER.info(comp_str)  # noqa: WPS421

    return df_comp
示例#3
0
async def test_update_div(mocker):
    """Требуется обновить таблицу с внутренними и внешними данными по дивидендам."""
    dispatcher = handlers.EventHandlersDispatcher()
    event = events.UpdateDivCommand("TICKER3")
    fake_repo = mocker.AsyncMock()
    mocker.patch.object(handlers,
                        "_load_by_id_and_handle_event",
                        side_effect=[["event1"], ["event2"]])

    new_events = await dispatcher.handle_event(event, fake_repo)

    assert new_events == ["event1", "event2"]
示例#4
0
def test_div_ext():
    """Информации о внешних дивидендах содержит медианное значение и корректно обрезается.

    Перед тестом подается команда загрузки, так как данные могут отсутствовать.
    """
    command = events.UpdateDivCommand("AKRN")
    bootstrap.BUS.handle_event(command)

    df = div.div_ext("AKRN")

    assert df.columns.tolist()[-1] == "MEDIAN"
    assert df.index[0] >= bootstrap.START_DATE
    assert df.loc["2015-06-02", "MEDIAN"] == pytest.approx(139)
    assert df.loc["2020-06-09", "MEDIAN"] == pytest.approx(275)
示例#5
0
def create_div_table():
    """Создает пустую таблицу дивидендов для тестов."""
    id_ = base.create_id(ports.DIVIDENDS)
    return dividends.Dividends(id_)


DIV_UPDATE_CASES = (
    (
        None,
        events.TickerTraded("TICKER", "ISIN", "M1", date(2020, 12, 17),
                            pd.DataFrame()),
        True,
    ),
    (
        pd.DataFrame(),
        events.UpdateDivCommand("TICKER"),
        True,
    ),
    (
        pd.DataFrame(),
        events.TickerTraded("TICKER", "ISIN", "M1", date(2020, 12, 17),
                            pd.DataFrame()),
        False,
    ),
)


@pytest.mark.parametrize("df, event, rez", DIV_UPDATE_CASES)
def test_update_cond(div_table, df, event, rez):
    """Если дивиденды отсутствуют и поступила команда обновления, то их надо загрузить."""
    div_table._df = df