|
|
|
|
@ -442,96 +442,6 @@ def test_clean_dry_run_db(default_conf, fee):
|
|
|
|
|
assert len(Trade.query.filter(Trade.open_order_id.isnot(None)).all()) == 1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_migrate_old(mocker, default_conf, fee):
|
|
|
|
|
"""
|
|
|
|
|
Test Database migration(starting with old pairformat)
|
|
|
|
|
"""
|
|
|
|
|
amount = 103.223
|
|
|
|
|
create_table_old = """CREATE TABLE IF NOT EXISTS "trades" (
|
|
|
|
|
id INTEGER NOT NULL,
|
|
|
|
|
exchange VARCHAR NOT NULL,
|
|
|
|
|
pair VARCHAR NOT NULL,
|
|
|
|
|
is_open BOOLEAN NOT NULL,
|
|
|
|
|
fee FLOAT NOT NULL,
|
|
|
|
|
open_rate FLOAT,
|
|
|
|
|
close_rate FLOAT,
|
|
|
|
|
close_profit FLOAT,
|
|
|
|
|
stake_amount FLOAT NOT NULL,
|
|
|
|
|
amount FLOAT,
|
|
|
|
|
open_date DATETIME NOT NULL,
|
|
|
|
|
close_date DATETIME,
|
|
|
|
|
open_order_id VARCHAR,
|
|
|
|
|
PRIMARY KEY (id),
|
|
|
|
|
CHECK (is_open IN (0, 1))
|
|
|
|
|
);"""
|
|
|
|
|
insert_table_old = """INSERT INTO trades (exchange, pair, is_open, open_order_id, fee,
|
|
|
|
|
open_rate, stake_amount, amount, open_date)
|
|
|
|
|
VALUES ('binance', 'BTC_ETC', 1, '123123', {fee},
|
|
|
|
|
0.00258580, {stake}, {amount},
|
|
|
|
|
'2017-11-28 12:44:24.000000')
|
|
|
|
|
""".format(fee=fee.return_value,
|
|
|
|
|
stake=default_conf.get("stake_amount"),
|
|
|
|
|
amount=amount
|
|
|
|
|
)
|
|
|
|
|
insert_table_old2 = """INSERT INTO trades (exchange, pair, is_open, fee,
|
|
|
|
|
open_rate, close_rate, stake_amount, amount, open_date)
|
|
|
|
|
VALUES ('binance', 'BTC_ETC', 0, {fee},
|
|
|
|
|
0.00258580, 0.00268580, {stake}, {amount},
|
|
|
|
|
'2017-11-28 12:44:24.000000')
|
|
|
|
|
""".format(fee=fee.return_value,
|
|
|
|
|
stake=default_conf.get("stake_amount"),
|
|
|
|
|
amount=amount
|
|
|
|
|
)
|
|
|
|
|
engine = create_engine('sqlite://')
|
|
|
|
|
mocker.patch('freqtrade.persistence.models.create_engine', lambda *args, **kwargs: engine)
|
|
|
|
|
|
|
|
|
|
# Create table using the old format
|
|
|
|
|
with engine.begin() as connection:
|
|
|
|
|
connection.execute(text(create_table_old))
|
|
|
|
|
connection.execute(text(insert_table_old))
|
|
|
|
|
connection.execute(text(insert_table_old2))
|
|
|
|
|
# Run init to test migration
|
|
|
|
|
init_db(default_conf['db_url'], default_conf['dry_run'])
|
|
|
|
|
|
|
|
|
|
assert len(Trade.query.filter(Trade.id == 1).all()) == 1
|
|
|
|
|
trade = Trade.query.filter(Trade.id == 1).first()
|
|
|
|
|
assert trade.fee_open == fee.return_value
|
|
|
|
|
assert trade.fee_close == fee.return_value
|
|
|
|
|
assert trade.open_rate_requested is None
|
|
|
|
|
assert trade.close_rate_requested is None
|
|
|
|
|
assert trade.is_open == 1
|
|
|
|
|
assert trade.amount == amount
|
|
|
|
|
assert trade.amount_requested == amount
|
|
|
|
|
assert trade.stake_amount == default_conf.get("stake_amount")
|
|
|
|
|
assert trade.pair == "ETC/BTC"
|
|
|
|
|
assert trade.exchange == "binance"
|
|
|
|
|
assert trade.max_rate == 0.0
|
|
|
|
|
assert trade.stop_loss == 0.0
|
|
|
|
|
assert trade.initial_stop_loss == 0.0
|
|
|
|
|
assert trade.open_trade_value == trade._calc_open_trade_value()
|
|
|
|
|
assert trade.close_profit_abs is None
|
|
|
|
|
assert trade.fee_open_cost is None
|
|
|
|
|
assert trade.fee_open_currency is None
|
|
|
|
|
assert trade.fee_close_cost is None
|
|
|
|
|
assert trade.fee_close_currency is None
|
|
|
|
|
assert trade.timeframe is None
|
|
|
|
|
|
|
|
|
|
trade = Trade.query.filter(Trade.id == 2).first()
|
|
|
|
|
assert trade.close_rate is not None
|
|
|
|
|
assert trade.is_open == 0
|
|
|
|
|
assert trade.open_rate_requested is None
|
|
|
|
|
assert trade.close_rate_requested is None
|
|
|
|
|
assert trade.close_rate is not None
|
|
|
|
|
assert pytest.approx(trade.close_profit_abs) == trade.calc_profit()
|
|
|
|
|
assert trade.sell_order_status is None
|
|
|
|
|
|
|
|
|
|
# Should've created one order
|
|
|
|
|
assert len(Order.query.all()) == 1
|
|
|
|
|
order = Order.query.first()
|
|
|
|
|
assert order.order_id == '123123'
|
|
|
|
|
assert order.ft_order_side == 'buy'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_migrate_new(mocker, default_conf, fee, caplog):
|
|
|
|
|
"""
|
|
|
|
|
Test Database migration (starting with new pairformat)
|
|
|
|
|
|