def test_execute_sell_up(default_conf, ticker, ticker_sell_up, mocker) -> None:
    """
    Test execute_sell() method with a ticker going UP
    """
    patch_get_signal(mocker)
    rpc_mock = patch_RPCManager(mocker)
    patch_coinmarketcap(mocker)
    mocker.patch.multiple('freqtrade.freqtradebot.exchange',
                          validate_pairs=MagicMock(),
                          get_ticker=ticker)
    mocker.patch('freqtrade.fiat_convert.CryptoToFiatConverter._find_price',
                 return_value=15000.0)
    freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))

    # Create some test data
    freqtrade.create_trade()

    trade = Trade.query.first()
    assert trade

    # Increase the price and sell it
    mocker.patch.multiple('freqtrade.freqtradebot.exchange',
                          validate_pairs=MagicMock(),
                          get_ticker=ticker_sell_up)

    freqtrade.execute_sell(trade=trade, limit=ticker_sell_up()['bid'])

    assert rpc_mock.call_count == 2
    assert 'Selling' in rpc_mock.call_args_list[-1][0][0]
    assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0]
    assert 'Amount' in rpc_mock.call_args_list[-1][0][0]
    assert 'Profit' in rpc_mock.call_args_list[-1][0][0]
    assert '0.00001172' in rpc_mock.call_args_list[-1][0][0]
    assert 'profit: 6.11%, 0.00006126' in rpc_mock.call_args_list[-1][0][0]
    assert '0.919 USD' in rpc_mock.call_args_list[-1][0][0]
def test_execute_sell_without_conf_sell_down(default_conf, ticker,
                                             ticker_sell_down, mocker) -> None:
    """
    Test execute_sell() method with a ticker going DOWN and with a bot config empty
    """
    patch_get_signal(mocker)
    rpc_mock = patch_RPCManager(mocker)
    patch_coinmarketcap(mocker, value={'price_usd': 12345.0})
    mocker.patch.multiple('freqtrade.freqtradebot.exchange',
                          validate_pairs=MagicMock(),
                          get_ticker=ticker)
    freqtrade = FreqtradeBot(default_conf, create_engine('sqlite://'))

    # Create some test data
    freqtrade.create_trade()

    trade = Trade.query.first()
    assert trade

    # Decrease the price and sell it
    mocker.patch.multiple('freqtrade.freqtradebot.exchange',
                          validate_pairs=MagicMock(),
                          get_ticker=ticker_sell_down)

    freqtrade.config = {}
    freqtrade.execute_sell(trade=trade, limit=ticker_sell_down()['bid'])

    assert rpc_mock.call_count == 2
    assert 'Selling' in rpc_mock.call_args_list[-1][0][0]
    assert '[BTC_ETH]' in rpc_mock.call_args_list[-1][0][0]
    assert '0.00001044' in rpc_mock.call_args_list[-1][0][0]
    assert 'loss: -5.48%, -0.00005492' in rpc_mock.call_args_list[-1][0][0]