mirror of
https://github.com/freqtrade/freqtrade.git
synced 2024-11-16 05:03:55 +00:00
151 lines
4.5 KiB
Python
151 lines
4.5 KiB
Python
import re
|
|
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
from requests.exceptions import ConnectionError
|
|
|
|
from freqtrade_client import FtRestClient
|
|
from freqtrade_client.ft_client import add_arguments, main_exec
|
|
|
|
|
|
def log_has_re(line, logs):
|
|
"""Check if line matches some caplog's message."""
|
|
return any(re.match(line, message) for message in logs.messages)
|
|
|
|
|
|
def get_rest_client():
|
|
client = FtRestClient("http://localhost:8080", "freqtrader", "password")
|
|
client._session = MagicMock()
|
|
request_mock = MagicMock()
|
|
client._session.request = request_mock
|
|
return client, request_mock
|
|
|
|
|
|
def test_FtRestClient_init():
|
|
client = FtRestClient("http://localhost:8080", "freqtrader", "password")
|
|
assert client is not None
|
|
assert client._serverurl == "http://localhost:8080"
|
|
assert client._session is not None
|
|
assert client._session.auth is not None
|
|
assert client._session.auth == ("freqtrader", "password")
|
|
|
|
|
|
@pytest.mark.parametrize("method", ["GET", "POST", "DELETE"])
|
|
def test_FtRestClient_call(method):
|
|
client, mock = get_rest_client()
|
|
client._call(method, "/dummytest")
|
|
assert mock.call_count == 1
|
|
|
|
getattr(client, f"_{method.lower()}")("/dummytest")
|
|
assert mock.call_count == 2
|
|
|
|
|
|
def test_FtRestClient_call_invalid(caplog):
|
|
client, _ = get_rest_client()
|
|
with pytest.raises(ValueError):
|
|
client._call("PUTTY", "/dummytest")
|
|
|
|
client._session.request = MagicMock(side_effect=ConnectionError())
|
|
client._call("GET", "/dummytest")
|
|
|
|
assert log_has_re("Connection error", caplog)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"method,args",
|
|
[
|
|
("start", []),
|
|
("stop", []),
|
|
("stopbuy", []),
|
|
("reload_config", []),
|
|
("balance", []),
|
|
("count", []),
|
|
("entries", []),
|
|
("exits", []),
|
|
("mix_tags", []),
|
|
("locks", []),
|
|
("lock_add", ["XRP/USDT", "2024-01-01 20:00:00Z", "*", "rand"]),
|
|
("delete_lock", [2]),
|
|
("daily", []),
|
|
("daily", [15]),
|
|
("weekly", []),
|
|
("weekly", [15]),
|
|
("monthly", []),
|
|
("monthly", [12]),
|
|
("edge", []),
|
|
("profit", []),
|
|
("stats", []),
|
|
("performance", []),
|
|
("status", []),
|
|
("version", []),
|
|
("show_config", []),
|
|
("ping", []),
|
|
("logs", []),
|
|
("logs", [55]),
|
|
("trades", []),
|
|
("trades", [5]),
|
|
("trades", [5, 5]), # With offset
|
|
("trade", [1]),
|
|
("delete_trade", [1]),
|
|
("cancel_open_order", [1]),
|
|
("whitelist", []),
|
|
("blacklist", []),
|
|
("blacklist", ["XRP/USDT"]),
|
|
("blacklist", ["XRP/USDT", "BTC/USDT"]),
|
|
("forcebuy", ["XRP/USDT"]),
|
|
("forcebuy", ["XRP/USDT", 1.5]),
|
|
("forceenter", ["XRP/USDT", "short"]),
|
|
("forceenter", ["XRP/USDT", "short", 1.5]),
|
|
("forceexit", [1]),
|
|
("forceexit", [1, "limit"]),
|
|
("forceexit", [1, "limit", 100]),
|
|
("strategies", []),
|
|
("strategy", ["sampleStrategy"]),
|
|
("pairlists_available", []),
|
|
("plot_config", []),
|
|
("available_pairs", []),
|
|
("available_pairs", ["5m"]),
|
|
("pair_candles", ["XRP/USDT", "5m"]),
|
|
("pair_candles", ["XRP/USDT", "5m", 500]),
|
|
("pair_history", ["XRP/USDT", "5m", "SampleStrategy"]),
|
|
("sysinfo", []),
|
|
("health", []),
|
|
],
|
|
)
|
|
def test_FtRestClient_call_explicit_methods(method, args):
|
|
client, mock = get_rest_client()
|
|
exec = getattr(client, method)
|
|
exec(*args)
|
|
assert mock.call_count == 1
|
|
|
|
|
|
def test_ft_client(mocker, capsys, caplog):
|
|
with pytest.raises(SystemExit):
|
|
args = add_arguments(["-V"])
|
|
|
|
args = add_arguments(["--show"])
|
|
assert isinstance(args, dict)
|
|
assert args["show"] is True
|
|
with pytest.raises(SystemExit):
|
|
main_exec(args)
|
|
captured = capsys.readouterr()
|
|
assert "Possible commands" in captured.out
|
|
|
|
mock = mocker.patch("freqtrade_client.ft_client.FtRestClient._call")
|
|
args = add_arguments(["--config", "tests/testdata/testconfigs/main_test_config.json", "ping"])
|
|
main_exec(args)
|
|
captured = capsys.readouterr()
|
|
assert mock.call_count == 1
|
|
|
|
with pytest.raises(SystemExit):
|
|
args = add_arguments(["--config", "tests/testdata/testconfigs/nonexisting.json"])
|
|
main_exec(args)
|
|
|
|
assert log_has_re(r"Could not load config file .*nonexisting\.json\.", caplog)
|
|
|
|
args = add_arguments(
|
|
["--config", "tests/testdata/testconfigs/main_test_config.json", "whatever"]
|
|
)
|
|
main_exec(args)
|
|
assert log_has_re("Command whatever not defined", caplog)
|