Add tests for load_trades
This commit is contained in:
parent
c7643e142b
commit
1c53aa5687
@ -1,8 +1,11 @@
|
|||||||
import pytest
|
import pytest
|
||||||
|
from unittest.mock import MagicMock
|
||||||
from pandas import DataFrame
|
from pandas import DataFrame
|
||||||
|
|
||||||
from freqtrade.data.btanalysis import BT_DATA_COLUMNS, load_backtest_data
|
from freqtrade.data.btanalysis import BT_DATA_COLUMNS, load_backtest_data, load_trades
|
||||||
from freqtrade.data.history import make_testdata_path
|
from freqtrade.data.history import make_testdata_path
|
||||||
|
from freqtrade.persistence import init, Trade
|
||||||
|
from freqtrade.tests.test_persistence import init_persistence, create_mock_trades
|
||||||
|
|
||||||
|
|
||||||
def test_load_backtest_data():
|
def test_load_backtest_data():
|
||||||
@ -19,3 +22,26 @@ def test_load_backtest_data():
|
|||||||
|
|
||||||
with pytest.raises(ValueError, match=r"File .* does not exist\."):
|
with pytest.raises(ValueError, match=r"File .* does not exist\."):
|
||||||
load_backtest_data(str("filename") + "nofile")
|
load_backtest_data(str("filename") + "nofile")
|
||||||
|
|
||||||
|
|
||||||
|
def test_load_trades_file(default_conf, fee, mocker):
|
||||||
|
# Real testing of load_backtest_data is done in test_load_backtest_data
|
||||||
|
lbt = mocker.patch("freqtrade.data.btanalysis.load_backtest_data", MagicMock())
|
||||||
|
filename = make_testdata_path(None) / "backtest-result_test.json"
|
||||||
|
load_trades(db_url=None, exportfilename=filename)
|
||||||
|
assert lbt.call_count == 1
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.usefixtures("init_persistence")
|
||||||
|
def test_load_trades_db(default_conf, fee, mocker):
|
||||||
|
|
||||||
|
create_mock_trades(fee)
|
||||||
|
# remove init so it does not init again
|
||||||
|
init_mock = mocker.patch('freqtrade.persistence.init', MagicMock())
|
||||||
|
|
||||||
|
trades = load_trades(db_url=default_conf['db_url'], exportfilename=None)
|
||||||
|
assert init_mock.call_count == 1
|
||||||
|
assert len(trades) == 3
|
||||||
|
assert isinstance(trades, DataFrame)
|
||||||
|
assert "pair" in trades.columns
|
||||||
|
assert "open_time" in trades.columns
|
||||||
|
@ -16,6 +16,50 @@ def init_persistence(default_conf):
|
|||||||
init(default_conf['db_url'], default_conf['dry_run'])
|
init(default_conf['db_url'], default_conf['dry_run'])
|
||||||
|
|
||||||
|
|
||||||
|
def create_mock_trades(fee):
|
||||||
|
"""
|
||||||
|
Create some fake trades ...
|
||||||
|
"""
|
||||||
|
# Simulate dry_run entries
|
||||||
|
trade = Trade(
|
||||||
|
pair='ETH/BTC',
|
||||||
|
stake_amount=0.001,
|
||||||
|
amount=123.0,
|
||||||
|
fee_open=fee.return_value,
|
||||||
|
fee_close=fee.return_value,
|
||||||
|
open_rate=0.123,
|
||||||
|
exchange='bittrex',
|
||||||
|
open_order_id='dry_run_buy_12345'
|
||||||
|
)
|
||||||
|
Trade.session.add(trade)
|
||||||
|
|
||||||
|
trade = Trade(
|
||||||
|
pair='ETC/BTC',
|
||||||
|
stake_amount=0.001,
|
||||||
|
amount=123.0,
|
||||||
|
fee_open=fee.return_value,
|
||||||
|
fee_close=fee.return_value,
|
||||||
|
open_rate=0.123,
|
||||||
|
exchange='bittrex',
|
||||||
|
is_open=False,
|
||||||
|
open_order_id='dry_run_sell_12345'
|
||||||
|
)
|
||||||
|
Trade.session.add(trade)
|
||||||
|
|
||||||
|
# Simulate prod entry
|
||||||
|
trade = Trade(
|
||||||
|
pair='ETC/BTC',
|
||||||
|
stake_amount=0.001,
|
||||||
|
amount=123.0,
|
||||||
|
fee_open=fee.return_value,
|
||||||
|
fee_close=fee.return_value,
|
||||||
|
open_rate=0.123,
|
||||||
|
exchange='bittrex',
|
||||||
|
open_order_id='prod_buy_12345'
|
||||||
|
)
|
||||||
|
Trade.session.add(trade)
|
||||||
|
|
||||||
|
|
||||||
def test_init_create_session(default_conf):
|
def test_init_create_session(default_conf):
|
||||||
# Check if init create a session
|
# Check if init create a session
|
||||||
init(default_conf['db_url'], default_conf['dry_run'])
|
init(default_conf['db_url'], default_conf['dry_run'])
|
||||||
@ -671,45 +715,7 @@ def test_adjust_min_max_rates(fee):
|
|||||||
@pytest.mark.usefixtures("init_persistence")
|
@pytest.mark.usefixtures("init_persistence")
|
||||||
def test_get_open(default_conf, fee):
|
def test_get_open(default_conf, fee):
|
||||||
|
|
||||||
# Simulate dry_run entries
|
create_mock_trades(fee)
|
||||||
trade = Trade(
|
|
||||||
pair='ETH/BTC',
|
|
||||||
stake_amount=0.001,
|
|
||||||
amount=123.0,
|
|
||||||
fee_open=fee.return_value,
|
|
||||||
fee_close=fee.return_value,
|
|
||||||
open_rate=0.123,
|
|
||||||
exchange='bittrex',
|
|
||||||
open_order_id='dry_run_buy_12345'
|
|
||||||
)
|
|
||||||
Trade.session.add(trade)
|
|
||||||
|
|
||||||
trade = Trade(
|
|
||||||
pair='ETC/BTC',
|
|
||||||
stake_amount=0.001,
|
|
||||||
amount=123.0,
|
|
||||||
fee_open=fee.return_value,
|
|
||||||
fee_close=fee.return_value,
|
|
||||||
open_rate=0.123,
|
|
||||||
exchange='bittrex',
|
|
||||||
is_open=False,
|
|
||||||
open_order_id='dry_run_sell_12345'
|
|
||||||
)
|
|
||||||
Trade.session.add(trade)
|
|
||||||
|
|
||||||
# Simulate prod entry
|
|
||||||
trade = Trade(
|
|
||||||
pair='ETC/BTC',
|
|
||||||
stake_amount=0.001,
|
|
||||||
amount=123.0,
|
|
||||||
fee_open=fee.return_value,
|
|
||||||
fee_close=fee.return_value,
|
|
||||||
open_rate=0.123,
|
|
||||||
exchange='bittrex',
|
|
||||||
open_order_id='prod_buy_12345'
|
|
||||||
)
|
|
||||||
Trade.session.add(trade)
|
|
||||||
|
|
||||||
assert len(Trade.get_open_trades()) == 2
|
assert len(Trade.get_open_trades()) == 2
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user