Files
crypto_monitor/tests/test_okx_spot_swap.py

61 lines
2.2 KiB
Python

"""OKX USDT/USDC 现货市价兑换参数."""
from __future__ import annotations
import unittest
from unittest.mock import MagicMock
from lib.exchange.okx_options_lib import spot_market_swap_usdt_usdc
class TestOkxSpotSwap(unittest.TestCase):
def test_usdt_to_usdc_uses_quote_ccy(self):
ex = MagicMock()
ex.private_post_trade_order.return_value = {
"data": [{"sCode": "0", "ordId": "1"}],
}
result = spot_market_swap_usdt_usdc(ex, direction="usdt_to_usdc", amount=10)
self.assertTrue(result["ok"])
body = ex.private_post_trade_order.call_args[0][0]
self.assertEqual(body["tgtCcy"], "quote_ccy")
self.assertEqual(body["side"], "buy")
def test_usdc_to_usdt_uses_base_ccy(self):
ex = MagicMock()
ex.private_post_trade_order.return_value = {
"data": [{"sCode": "0", "ordId": "2"}],
}
result = spot_market_swap_usdt_usdc(ex, direction="usdc_to_usdt", amount=5)
self.assertTrue(result["ok"])
body = ex.private_post_trade_order.call_args[0][0]
self.assertEqual(body["tgtCcy"], "base_ccy")
self.assertEqual(body["side"], "sell")
def test_insufficient_balance_returns_chinese_message(self):
ex = MagicMock()
ex.private_post_trade_order.side_effect = Exception(
'okx {"code":"1","data":[{"sCode":"51008","sMsg":"Order failed. Your available USDT balance is insufficient."}]}'
)
result = spot_market_swap_usdt_usdc(ex, direction="usdt_to_usdc", amount=20)
self.assertFalse(result["ok"])
self.assertEqual(result["msg"], "USDT 可用余额不足(期权请先兑成 USDC 并划入交易账户)")
self.assertNotIn("{", result["msg"])
def test_insufficient_usdc_message(self):
from lib.exchange.okx_options_lib import _okx_trade_error_message
msg = _okx_trade_error_message(
resp={
"data": [
{
"sCode": "51008",
"sMsg": "Order failed. Insufficient USDC balance in account.",
}
]
}
)
self.assertEqual(msg, "交易账户 USDC 可用余额不足")
if __name__ == "__main__":
unittest.main()