freqtrade_origin/tests/persistence/test_key_value_store.py

70 lines
2.9 KiB
Python
Raw Permalink Normal View History

2023-04-08 08:07:21 +00:00
from datetime import datetime, timedelta, timezone
import pytest
2023-04-08 12:30:27 +00:00
from freqtrade.persistence.key_value_store import KeyValueStore, set_startup_time
from tests.conftest import create_mock_trades_usdt
2023-04-08 08:07:21 +00:00
@pytest.mark.usefixtures("init_persistence")
def test_key_value_store(time_machine):
start = datetime(2023, 1, 1, 4, tzinfo=timezone.utc)
time_machine.move_to(start, tick=False)
KeyValueStore.store_value("test", "testStringValue")
KeyValueStore.store_value("test_dt", datetime.now(timezone.utc))
KeyValueStore.store_value("test_float", 22.51)
KeyValueStore.store_value("test_int", 15)
assert KeyValueStore.get_value("test") == "testStringValue"
2023-04-08 14:23:55 +00:00
assert KeyValueStore.get_value("test") == "testStringValue"
assert KeyValueStore.get_string_value("test") == "testStringValue"
2023-04-08 08:07:21 +00:00
assert KeyValueStore.get_value("test_dt") == datetime.now(timezone.utc)
2023-04-08 14:23:55 +00:00
assert KeyValueStore.get_datetime_value("test_dt") == datetime.now(timezone.utc)
assert KeyValueStore.get_string_value("test_dt") is None
assert KeyValueStore.get_float_value("test_dt") is None
assert KeyValueStore.get_int_value("test_dt") is None
2023-04-08 08:07:21 +00:00
assert KeyValueStore.get_value("test_float") == 22.51
2023-04-08 14:23:55 +00:00
assert KeyValueStore.get_float_value("test_float") == 22.51
2023-04-08 08:07:21 +00:00
assert KeyValueStore.get_value("test_int") == 15
2023-04-08 14:23:55 +00:00
assert KeyValueStore.get_int_value("test_int") == 15
assert KeyValueStore.get_datetime_value("test_int") is None
2023-04-08 08:07:21 +00:00
time_machine.move_to(start + timedelta(days=20, hours=5), tick=False)
assert KeyValueStore.get_value("test_dt") != datetime.now(timezone.utc)
assert KeyValueStore.get_value("test_dt") == start
# Test update works
KeyValueStore.store_value("test_dt", datetime.now(timezone.utc))
assert KeyValueStore.get_value("test_dt") == datetime.now(timezone.utc)
KeyValueStore.store_value("test_float", 23.51)
assert KeyValueStore.get_value("test_float") == 23.51
# test deleting
KeyValueStore.delete_value("test_float")
assert KeyValueStore.get_value("test_float") is None
2023-04-08 08:09:31 +00:00
# Delete same value again (should not fail)
KeyValueStore.delete_value("test_float")
2023-04-08 08:07:21 +00:00
with pytest.raises(ValueError, match=r"Unknown value type"):
2024-05-12 13:59:04 +00:00
KeyValueStore.store_value("test_float", {"some": "dict"})
2023-04-08 12:30:27 +00:00
@pytest.mark.usefixtures("init_persistence")
def test_set_startup_time(fee, time_machine):
create_mock_trades_usdt(fee)
start = datetime.now(timezone.utc)
time_machine.move_to(start, tick=False)
set_startup_time()
assert KeyValueStore.get_value("startup_time") == start
initial_time = KeyValueStore.get_value("bot_start_time")
assert initial_time <= start
# Simulate bot restart
new_start = start + timedelta(days=5)
time_machine.move_to(new_start, tick=False)
set_startup_time()
assert KeyValueStore.get_value("startup_time") == new_start
assert KeyValueStore.get_value("bot_start_time") == initial_time