Skip to content

Commit ac2723c

Browse files
committed
test: add explicit test for dry stoploss order filling
1 parent 1536c09 commit ac2723c

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed

tests/exchange/test_exchange.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1231,6 +1231,70 @@ def test_check_dry_limit_order_filled(
12311231
assert fee_mock.call_count == expected_calls
12321232

12331233

1234+
@pytest.mark.parametrize(
1235+
"immediate,crossed,expected_status,expected_fee_type",
1236+
[
1237+
(True, True, "closed", "taker"),
1238+
(False, True, "closed", "maker"),
1239+
(True, False, "open", None),
1240+
],
1241+
)
1242+
def test_check_dry_limit_order_filled_stoploss(
1243+
default_conf, mocker, immediate, crossed, expected_status, expected_fee_type, order_book_l2_usd
1244+
):
1245+
exchange = get_patched_exchange(mocker, default_conf)
1246+
mocker.patch.multiple(
1247+
EXMS,
1248+
exchange_has=MagicMock(return_value=True),
1249+
_dry_is_price_crossed=MagicMock(return_value=crossed),
1250+
fetch_l2_order_book=order_book_l2_usd,
1251+
)
1252+
average_mock = mocker.patch(f"{EXMS}.get_dry_market_fill_price", return_value=24.25)
1253+
fee_mock = mocker.patch(
1254+
f"{EXMS}.add_dry_order_fee",
1255+
autospec=True,
1256+
side_effect=lambda self, pair, dry_order, taker_or_maker: dry_order,
1257+
)
1258+
1259+
amount = 1.75
1260+
order = {
1261+
"symbol": "LTC/USDT",
1262+
"status": "open",
1263+
"type": "limit",
1264+
"side": "sell",
1265+
"amount": amount,
1266+
"filled": 0.0,
1267+
"remaining": amount,
1268+
"price": 25.0,
1269+
"average": 0.0,
1270+
"cost": 0.0,
1271+
"fee": None,
1272+
"ft_order_type": "stoploss",
1273+
"stopLossPrice": 24.5,
1274+
}
1275+
1276+
result = exchange.check_dry_limit_order_filled(order, immediate=immediate)
1277+
1278+
assert result["status"] == expected_status
1279+
assert order_book_l2_usd.call_count == 1
1280+
if crossed:
1281+
assert result["filled"] == amount
1282+
assert result["remaining"] == 0
1283+
assert result["average"] == 24.25
1284+
assert result["cost"] == pytest.approx(amount * 24.25)
1285+
assert average_mock.call_count == 1
1286+
assert fee_mock.call_count == 1
1287+
assert fee_mock.call_args[0][1] == "LTC/USDT"
1288+
assert fee_mock.call_args[0][3] == expected_fee_type
1289+
else:
1290+
assert result["filled"] == 0.0
1291+
assert result["remaining"] == amount
1292+
assert result["average"] == 0.0
1293+
1294+
assert average_mock.call_count == 0
1295+
assert fee_mock.call_count == 0
1296+
1297+
12341298
@pytest.mark.parametrize(
12351299
"side,price,filled,converted",
12361300
[

0 commit comments

Comments
 (0)