Path: blob/master/ invest-robot-contest_tinkoff-invest-volume-analysis-robot-master/tests/test_merge_two_frames.py
5931 views
import unittest12import pandas as pd3from pandas.util.testing import assert_frame_equal45from utils.strategy_util import merge_two_frames678class TestMergeTwoFrames(unittest.TestCase):9def setUp(self):10source = [11{"figi": "BBG0013HGFT4", "direction": 1, "price": 67.06, "quantity": 15,12"time": "2022-05-06 06:59:44.000144+00:00"},13{"figi": "BBG0013HGFT4", "direction": 2, "price": 67.06, "quantity": 1,14"time": "2022-05-06 06:59:44.000144+00:00"},15{"figi": "BBG0013HGFT4", "direction": 2, "price": 67.06, "quantity": 4,16"time": "2022-05-06 06:59:44.000144+00:00"},17{"figi": "BBG0013HGFT4", "direction": 1, "price": 67.07, "quantity": 18,18"time": "2022-05-06 07:00:00.084909+00:00"},19{"figi": "BBG0013HGFT4", "direction": 1, "price": 67.075, "quantity": 15,20"time": "2022-05-06 07:00:00.084909+00:00"},21{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.9, "quantity": 2,22"time": "2022-05-06 07:00:01.119835+00:00"},23{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.81, "quantity": 15,24"time": "2022-05-06 07:00:05.408809+00:00"},25{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.81, "quantity": 3,26"time": "2022-05-06 07:00:15.605217+00:00"},27{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.745, "quantity": 10,28"time": "2022-05-06 07:00:46.862681+00:00"},29{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,30"time": "2022-05-06 07:00:55.531078+00:00"},31{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,32"time": "2022-05-06 07:01:01.531078+00:00"},3334# условно потерял данные с 07:01:01 по 07:02:083536{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.795, "quantity": 50,37"time": "2022-05-06 07:02:08.652788+00:00"},38{"figi": "BBG0013HGFT4", "direction": 1, "price": 66.79, "quantity": 5,39"time": "2022-05-06 07:02:09.338233+00:00"},40{"figi": "BBG0013HGFT4", "direction": 1, "price": 66.88, "quantity": 25,41"time": "2022-05-06 07:02:30.858362+00:00"},42{"figi": "BBG0013HGFT4", "direction": 1, "price": 66.88, "quantity": 1,43"time": "2022-05-06 07:02:31.232032+00:00"},44{"figi": "BBG0013HGFT4", "direction": 1, "price": 66.9525, "quantity": 1,45"time": "2022-05-06 07:02:58.749556+00:00"},46{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.9, "quantity": 1,47"time": "2022-05-06 07:03:01.484374+00:00"},48{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.895, "quantity": 30,49"time": "2022-05-06 07:03:55.090231+00:00"}50]51self.source_df = pd.DataFrame(source, columns=["figi", "direction", "price", "quantity", "time"])5253# запрос данных с 07:01:01 по 07:02:0854# api вернет с 07:01:00 по 07:02:5955response = [56{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,57"time": "2022-05-06 07:01:01.531078+00:00"},58# region новые данные59{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,60"time": "2022-05-06 07:01:05.531078+00:00"},61{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,62"time": "2022-05-06 07:01:20.531078+00:00"},63{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,64"time": "2022-05-06 07:01:45.531078+00:00"},65{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,66"time": "2022-05-06 07:01:59.531078+00:00"},67# endregion новые данные68{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.795, "quantity": 50,69"time": "2022-05-06 07:02:08.652788+00:00"},70{"figi": "BBG0013HGFT4", "direction": 1, "price": 66.79, "quantity": 5,71"time": "2022-05-06 07:02:09.338233+00:00"},72{"figi": "BBG0013HGFT4", "direction": 1, "price": 66.88, "quantity": 25,73"time": "2022-05-06 07:02:30.858362+00:00"},74{"figi": "BBG0013HGFT4", "direction": 1, "price": 66.88, "quantity": 1,75"time": "2022-05-06 07:02:31.232032+00:00"},76{"figi": "BBG0013HGFT4", "direction": 1, "price": 66.9525, "quantity": 1,77"time": "2022-05-06 07:02:58.749556+00:00"},78]79self.response_df = pd.DataFrame(response, columns=["figi", "direction", "price", "quantity", "time"])8081self.empty_df = pd.DataFrame([], columns=["figi", "direction", "price", "quantity", "time"])8283def test_merge_two_frames(self):84expected = [85{"figi": "BBG0013HGFT4", "direction": 1, "price": 67.06, "quantity": 15,86"time": "2022-05-06 06:59:44.000144+00:00"},87{"figi": "BBG0013HGFT4", "direction": 2, "price": 67.06, "quantity": 1,88"time": "2022-05-06 06:59:44.000144+00:00"},89{"figi": "BBG0013HGFT4", "direction": 2, "price": 67.06, "quantity": 4,90"time": "2022-05-06 06:59:44.000144+00:00"},91{"figi": "BBG0013HGFT4", "direction": 1, "price": 67.07, "quantity": 18,92"time": "2022-05-06 07:00:00.084909+00:00"},93{"figi": "BBG0013HGFT4", "direction": 1, "price": 67.075, "quantity": 15,94"time": "2022-05-06 07:00:00.084909+00:00"},95{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.9, "quantity": 2,96"time": "2022-05-06 07:00:01.119835+00:00"},97{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.81, "quantity": 15,98"time": "2022-05-06 07:00:05.408809+00:00"},99{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.81, "quantity": 3,100"time": "2022-05-06 07:00:15.605217+00:00"},101{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.745, "quantity": 10,102"time": "2022-05-06 07:00:46.862681+00:00"},103{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,104"time": "2022-05-06 07:00:55.531078+00:00"},105{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,106"time": "2022-05-06 07:01:01.531078+00:00"},107{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,108"time": "2022-05-06 07:01:05.531078+00:00"},109{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,110"time": "2022-05-06 07:01:20.531078+00:00"},111{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,112"time": "2022-05-06 07:01:45.531078+00:00"},113{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.6775, "quantity": 7,114"time": "2022-05-06 07:01:59.531078+00:00"},115{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.795, "quantity": 50,116"time": "2022-05-06 07:02:08.652788+00:00"},117{"figi": "BBG0013HGFT4", "direction": 1, "price": 66.79, "quantity": 5,118"time": "2022-05-06 07:02:09.338233+00:00"},119{"figi": "BBG0013HGFT4", "direction": 1, "price": 66.88, "quantity": 25,120"time": "2022-05-06 07:02:30.858362+00:00"},121{"figi": "BBG0013HGFT4", "direction": 1, "price": 66.88, "quantity": 1,122"time": "2022-05-06 07:02:31.232032+00:00"},123{"figi": "BBG0013HGFT4", "direction": 1, "price": 66.9525, "quantity": 1,124"time": "2022-05-06 07:02:58.749556+00:00"},125{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.9, "quantity": 1,126"time": "2022-05-06 07:03:01.484374+00:00"},127{"figi": "BBG0013HGFT4", "direction": 2, "price": 66.895, "quantity": 30,128"time": "2022-05-06 07:03:55.090231+00:00"}129]130expected_df = pd.DataFrame(expected, columns=["figi", "direction", "price", "quantity", "time"])131assert_frame_equal(merge_two_frames(self.source_df, self.response_df), expected_df)132133def test_boundary(self):134assert_frame_equal(merge_two_frames(self.source_df, self.empty_df), self.source_df)135assert_frame_equal(merge_two_frames(self.empty_df, self.response_df), self.response_df)136assert_frame_equal(merge_two_frames(self.empty_df, self.empty_df), self.empty_df)137138139if __name__ == "__main__":140unittest.main()141142143