125 lines
4.5 KiB
Python
125 lines
4.5 KiB
Python
from DataCache import DataCache
|
|
from exchangeinterface import ExchangeInterface
|
|
import unittest
|
|
import pandas as pd
|
|
import datetime as dt
|
|
|
|
|
|
class TestDataCache(unittest.TestCase):
|
|
def setUp(self):
|
|
# Setup the database connection here
|
|
self.exchanges = ExchangeInterface()
|
|
self.exchanges.connect_exchange(exchange_name='binance', user_name='test_guy', api_keys=None)
|
|
# This object maintains all the cached data. Pass it connection to the exchanges.
|
|
self.data = DataCache(self.exchanges)
|
|
|
|
asset, timeframe, exchange = 'BTC/USD', '2h', 'binance'
|
|
self.key1 = f'{asset}_{timeframe}_{exchange}'
|
|
|
|
asset, timeframe, exchange = 'ETH/USD', '2h', 'binance'
|
|
self.key2 = f'{asset}_{timeframe}_{exchange}'
|
|
|
|
def test_set_cache(self):
|
|
# Tests
|
|
print('Testing set_cache flag not set:')
|
|
self.data.set_cache(data='data', key=self.key1)
|
|
attr = self.data.__getattribute__('cached_data')
|
|
self.assertEqual(attr[self.key1], 'data')
|
|
|
|
self.data.set_cache(data='more_data', key=self.key1)
|
|
attr = self.data.__getattribute__('cached_data')
|
|
self.assertEqual(attr[self.key1], 'more_data')
|
|
|
|
print('Testing set_cache no-overwrite flag set:')
|
|
self.data.set_cache(data='even_more_data', key=self.key1, do_not_overwrite=True)
|
|
attr = self.data.__getattribute__('cached_data')
|
|
self.assertEqual(attr[self.key1], 'more_data')
|
|
|
|
def test_cache_exists(self):
|
|
# Tests
|
|
print('Testing cache_exists() method:')
|
|
self.assertFalse(self.data.cache_exists(key=self.key2))
|
|
self.data.set_cache(data='data', key=self.key1)
|
|
self.assertTrue(self.data.cache_exists(key=self.key1))
|
|
|
|
def test_update_candle_cache(self):
|
|
print('Testing update_candle_cache() method:')
|
|
# Initial data
|
|
df_initial = pd.DataFrame({
|
|
'open_time': [1, 2, 3],
|
|
'open': [100, 101, 102],
|
|
'high': [110, 111, 112],
|
|
'low': [90, 91, 92],
|
|
'close': [105, 106, 107],
|
|
'volume': [1000, 1001, 1002]
|
|
})
|
|
|
|
# Data to be added
|
|
df_new = pd.DataFrame({
|
|
'open_time': [3, 4, 5],
|
|
'open': [102, 103, 104],
|
|
'high': [112, 113, 114],
|
|
'low': [92, 93, 94],
|
|
'close': [107, 108, 109],
|
|
'volume': [1002, 1003, 1004]
|
|
})
|
|
|
|
self.data.set_cache(data=df_initial, key=self.key1)
|
|
self.data.update_candle_cache(more_records=df_new, key=self.key1)
|
|
|
|
result = self.data.get_cache(key=self.key1)
|
|
expected = pd.DataFrame({
|
|
'open_time': [1, 2, 3, 4, 5],
|
|
'open': [100, 101, 102, 103, 104],
|
|
'high': [110, 111, 112, 113, 114],
|
|
'low': [90, 91, 92, 93, 94],
|
|
'close': [105, 106, 107, 108, 109],
|
|
'volume': [1000, 1001, 1002, 1003, 1004]
|
|
})
|
|
|
|
pd.testing.assert_frame_equal(result, expected)
|
|
|
|
def test_update_cached_dict(self):
|
|
print('Testing update_cached_dict() method:')
|
|
self.data.set_cache(data={}, key=self.key1)
|
|
self.data.update_cached_dict(cache_key=self.key1, dict_key='sub_key', data='value')
|
|
|
|
cache = self.data.get_cache(key=self.key1)
|
|
self.assertEqual(cache['sub_key'], 'value')
|
|
|
|
def test_get_cache(self):
|
|
print('Testing get_cache() method:')
|
|
self.data.set_cache(data='data', key=self.key1)
|
|
result = self.data.get_cache(key=self.key1)
|
|
self.assertEqual(result, 'data')
|
|
|
|
def test_get_records_since(self):
|
|
print('Testing get_records_since() method:')
|
|
df_initial = pd.DataFrame({
|
|
'open_time': [1, 2, 3],
|
|
'open': [100, 101, 102],
|
|
'high': [110, 111, 112],
|
|
'low': [90, 91, 92],
|
|
'close': [105, 106, 107],
|
|
'volume': [1000, 1001, 1002]
|
|
})
|
|
|
|
self.data.set_cache(data=df_initial, key=self.key1)
|
|
start_datetime = dt.datetime.utcfromtimestamp(2)
|
|
result = self.data.get_records_since(key=self.key1, start_datetime=start_datetime, record_length=60, ex_details=[]).sort_values(by='open_time').reset_index(drop=True)
|
|
|
|
expected = pd.DataFrame({
|
|
'open_time': [2, 3],
|
|
'open': [101, 102],
|
|
'high': [111, 112],
|
|
'low': [91, 92],
|
|
'close': [106, 107],
|
|
'volume': [1001, 1002]
|
|
})
|
|
|
|
pd.testing.assert_frame_equal(result, expected)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|