Files
TradeBot/tests/test_bybit.py
T
2026-06-21 09:15:38 +03:00

66 lines
2.1 KiB
Python

from __future__ import annotations
from crypto_spot_bot.bybit import BybitClient, websocket_subscribe_message, _looks_like_leveraged_token, _looks_like_stablecoin
def test_leveraged_token_filter() -> None:
assert _looks_like_leveraged_token("BTC3L")
assert _looks_like_leveraged_token("ETHDOWN")
assert not _looks_like_leveraged_token("BTC")
def test_stablecoin_filter() -> None:
assert _looks_like_stablecoin("USDC")
assert _looks_like_stablecoin("FDUSD")
assert not _looks_like_stablecoin("BTC")
def test_spot_instrument_uses_min_order_amt_and_base_precision(make_settings, tmp_path) -> None:
client = BybitClient(make_settings(tmp_path))
client.public_get = lambda *_args, **_kwargs: {
"list": [
{
"symbol": "BTCUSDT",
"baseCoin": "BTC",
"quoteCoin": "USDT",
"status": "Trading",
"priceFilter": {"tickSize": "0.01"},
"lotSizeFilter": {
"basePrecision": "0.000001",
"minOrderQty": "0.000001",
"minOrderAmt": "5",
},
}
]
}
instrument = client.instruments()["BTCUSDT"]
assert instrument.qty_step == 0.000001
assert instrument.min_notional_value == 5.0
def test_live_spot_order_explicitly_disables_leverage(make_settings, tmp_path) -> None:
client = BybitClient(make_settings(tmp_path))
captured = {}
def fake_private_post(path, payload):
captured["path"] = path
captured["payload"] = payload
return {"orderId": "test"}
client.private_post = fake_private_post
client.place_spot_market_order("BTCUSDT", "Buy", 10, "quoteCoin", "order-1")
assert captured["path"] == "/v5/order/create"
assert captured["payload"]["category"] == "spot"
assert captured["payload"]["isLeverage"] == 0
assert captured["payload"]["orderFilter"] == "Order"
def test_websocket_subscribe_uses_configured_kline_interval() -> None:
payload = websocket_subscribe_message(["BTCUSDT"], interval="60")
assert "kline.60.BTCUSDT" in payload
assert "kline.1.BTCUSDT" not in payload