1
0
fin-depo/test/test_kucoin.py

125 lines
3.3 KiB
Python
Raw Permalink Normal View History

2024-07-27 01:14:12 +00:00
import datetime
from decimal import Decimal
import fin_defs
2024-07-20 18:19:52 +00:00
import pytest
2024-07-21 09:09:49 +00:00
import fin_depo
2024-07-20 18:19:52 +00:00
from . import secrets
TEST_MARKET_ORDERS = True
2024-07-20 18:19:52 +00:00
needs_secrets = pytest.mark.skipif(
not secrets.KUCOIN_KEY,
reason='Secret kucoin_USERNAME required',
)
2024-07-21 09:09:49 +00:00
fin_depo.defi_kucoin.logger.setLevel('INFO')
NOW = datetime.datetime.now(tz=datetime.UTC)
2024-07-20 18:21:50 +00:00
2024-07-27 01:14:12 +00:00
2024-07-20 18:19:52 +00:00
@needs_secrets
def test_get_depo():
"""Can inspect kucoin depository."""
2024-07-21 09:09:49 +00:00
fetcher = fin_depo.defi_kucoin.KucoinDepoFetcher(
2024-07-20 18:19:52 +00:00
secrets.KUCOIN_KEY,
secrets.KUCOIN_SECRET,
secrets.KUCOIN_PASS,
)
depo = fetcher.get_depo()
2024-07-21 09:09:49 +00:00
assert isinstance(depo, fin_depo.data.DepoGroup)
for nested_depo in depo.nested:
assert isinstance(nested_depo, fin_depo.data.DepoSingle)
@needs_secrets
def test_place_market_order_requires_allow_trades():
"""Client fails if allow_trades is not enabled when doing market orders."""
2024-07-21 09:09:49 +00:00
fetcher = fin_depo.defi_kucoin.KucoinDepoFetcher(
secrets.KUCOIN_KEY,
secrets.KUCOIN_SECRET,
secrets.KUCOIN_PASS,
allow_trades=False,
)
with pytest.raises(PermissionError) as m:
fetcher.place_market_order(fin_defs.MPC, Decimal(1), fin_defs.USDT)
assert 'KucoinDepoFetcher.allow_trades is not enabled: Cannot make trades' in str(m)
@needs_secrets
def test_place_buy_side_order():
"""Client can place buy side market orders."""
2024-07-21 09:09:49 +00:00
fetcher = fin_depo.defi_kucoin.KucoinDepoFetcher(
secrets.KUCOIN_KEY,
secrets.KUCOIN_SECRET,
secrets.KUCOIN_PASS,
allow_trades=TEST_MARKET_ORDERS,
)
input_amount = Decimal('0.1')
order_details = fetcher.place_market_order(
2024-07-20 20:03:50 +00:00
fin_defs.USDT,
input_amount,
fin_defs.MPC,
)
assert order_details is not None
assert order_details.order_id is not None
assert order_details.raw_order_details is not None
assert order_details.input_asset == fin_defs.USDT
assert order_details.output_asset == fin_defs.MPC
assert order_details.input_amount <= input_amount
assert order_details.output_amount >= 0
assert order_details.input_amount != order_details.output_amount
assert order_details.fee_asset == fin_defs.USDT
assert order_details.fee_amount <= Decimal('0.0002')
assert NOW <= order_details.executed_time <= NOW + datetime.timedelta(minutes=10)
2024-07-27 01:14:12 +00:00
@needs_secrets
def test_place_sell_side_order():
"""Client can place sell side market orders."""
2024-07-21 09:09:49 +00:00
fetcher = fin_depo.defi_kucoin.KucoinDepoFetcher(
secrets.KUCOIN_KEY,
secrets.KUCOIN_SECRET,
secrets.KUCOIN_PASS,
allow_trades=TEST_MARKET_ORDERS,
)
input_amount = Decimal('1')
order_details = fetcher.place_market_order(
2024-07-20 20:03:50 +00:00
fin_defs.MPC,
input_amount,
fin_defs.USDT,
)
assert order_details is not None
assert order_details.order_id is not None
assert order_details.raw_order_details is not None
assert order_details.input_asset == fin_defs.MPC
assert order_details.output_asset == fin_defs.USDT
assert order_details.input_amount <= input_amount
assert order_details.output_amount >= 0
assert order_details.input_amount != order_details.output_amount
assert order_details.fee_asset == fin_defs.USDT
assert order_details.fee_amount is not None
assert NOW <= order_details.executed_time <= NOW + datetime.timedelta(minutes=10)