Skip to content

Commit b57a7f2

Browse files
committed
test: simplify ccxt_order_parse test (but improve it at the same time)
1 parent b283cab commit b57a7f2

2 files changed

Lines changed: 46 additions & 48 deletions

File tree

tests/exchange_online/conftest.py

Lines changed: 38 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ class TestExchangeOnlineSetup(TypedDict):
2626
trades_lookback_hours: int
2727
private_methods: list[str] | None
2828
sample_order: list[dict[str, Any]] | None
29+
sample_order_futures: list[dict[str, Any]] | None
2930
sample_my_trades: list[dict[str, Any]] | None
3031
skip_ws_tests: bool | None
3132

@@ -77,11 +78,12 @@ class TestExchangeOnlineSetup(TypedDict):
7778
"pair": "SOL/USDT",
7879
"expected": {
7980
"symbol": "SOL/USDT",
80-
"orderId": "3551312894",
81+
"id": "3551312894",
8182
"timestamp": 1674493798550,
82-
"datetime": "2023-03-25T15:49:58.550Z",
83+
"datetime": "2023-01-23T17:09:58.550Z",
8384
"price": 15.5,
8485
"status": "open",
86+
"side": "buy",
8587
"amount": 1.1,
8688
},
8789
},
@@ -107,11 +109,12 @@ class TestExchangeOnlineSetup(TypedDict):
107109
"pair": "SOL/USDT",
108110
"expected": {
109111
"symbol": "SOL/USDT",
110-
"orderId": "3551312894",
112+
"id": "3551312894",
111113
"timestamp": 1674493798550,
112-
"datetime": "2023-03-25T15:49:58.550Z",
114+
"datetime": "2023-01-23T17:09:58.550Z",
113115
"price": 15.5,
114-
"status": "open",
116+
"side": "buy",
117+
"status": "closed",
115118
"amount": 1.1,
116119
},
117120
},
@@ -148,9 +151,9 @@ class TestExchangeOnlineSetup(TypedDict):
148151
"pair": "SOL/USDT",
149152
"expected": {
150153
"symbol": "SOL/USDT",
151-
"orderId": "3551312894",
154+
"id": "3551312894",
152155
"timestamp": 1674493798550,
153-
"datetime": "2023-03-25T15:49:58.550Z",
156+
"datetime": "2023-01-23T17:09:58.550Z",
154157
"price": 15.5,
155158
"status": "open",
156159
"amount": 1.1,
@@ -203,12 +206,12 @@ class TestExchangeOnlineSetup(TypedDict):
203206
"pair": "SOL/USDT",
204207
"expected": {
205208
"symbol": "SOL/USDT",
206-
"orderId": "3551312894",
207-
"timestamp": 1674493798550,
208-
"datetime": "2023-03-25T15:49:58.550Z",
209-
"price": 15.5,
210-
"status": "open",
211-
"amount": 1.1,
209+
"id": "63d6742d0adc5570001d2bbf7",
210+
"timestamp": None,
211+
"datetime": None,
212+
"price": None,
213+
"status": None,
214+
"amount": None,
212215
},
213216
}, # create order
214217
{
@@ -247,11 +250,11 @@ class TestExchangeOnlineSetup(TypedDict):
247250
"pair": "SOL/USDT",
248251
"expected": {
249252
"symbol": "SOL/USDT",
250-
"orderId": "3551312894",
253+
"id": "63d6742d0adc5570001d2bbf7",
251254
"timestamp": 1674493798550,
252-
"datetime": "2023-03-25T15:49:58.550Z",
255+
"datetime": "2023-01-23T17:09:58.550Z",
253256
"price": 15.5,
254-
"status": "open",
257+
"status": "closed",
255258
"amount": 1.1,
256259
},
257260
},
@@ -304,11 +307,12 @@ class TestExchangeOnlineSetup(TypedDict):
304307
"pair": "SOL/USDT",
305308
"expected": {
306309
"symbol": "SOL/USDT",
307-
"orderId": "3551312894",
310+
"id": "276266139423",
308311
"timestamp": 1674493798550,
309-
"datetime": "2023-03-25T15:49:58.550Z",
312+
"datetime": "2023-01-23T17:09:58.550Z",
310313
"price": 15.5,
311-
"status": "open",
314+
"average": 15.5,
315+
"status": "closed",
312316
"amount": 1.1,
313317
},
314318
},
@@ -347,11 +351,11 @@ class TestExchangeOnlineSetup(TypedDict):
347351
"pair": "SOL/USDT",
348352
"expected": {
349353
"symbol": "SOL/USDT",
350-
"orderId": "3551312894",
354+
"id": "276401180529",
351355
"timestamp": 1674493798550,
352-
"datetime": "2023-03-25T15:49:58.550Z",
356+
"datetime": "2023-01-23T17:09:58.550Z",
353357
"price": 15.5,
354-
"status": "open",
358+
"status": "canceled",
355359
"amount": 1.1,
356360
},
357361
},
@@ -420,10 +424,11 @@ class TestExchangeOnlineSetup(TypedDict):
420424
"pair": "SOL/USDT",
421425
"expected": {
422426
"symbol": "SOL/USDT",
423-
"orderId": "3551312894",
427+
"id": "1274754916287346280",
424428
"timestamp": 1674493798550,
425-
"datetime": "2023-03-25T15:49:58.550Z",
429+
"datetime": "2023-01-23T17:09:58.550Z",
426430
"price": 15.5,
431+
"side": "buy",
427432
"status": "open",
428433
"amount": 1.1,
429434
},
@@ -499,18 +504,19 @@ class TestExchangeOnlineSetup(TypedDict):
499504
"pair": "SOL/USDT",
500505
"expected": {
501506
"symbol": "SOL/USDT",
502-
"orderId": "3551312894",
507+
"id": "1762393630149869568",
503508
"timestamp": 1674493798550,
504-
"datetime": "2023-03-25T15:49:58.550Z",
509+
"datetime": "2023-01-23T17:09:58.550Z",
505510
"price": 15.5,
506-
"status": "open",
511+
"average": 15.5,
512+
"status": "closed",
507513
"amount": 1.1,
508514
},
509515
},
510516
{
511517
"exchange_response": {
512518
"symbol": "SOL-USDT",
513-
"orderId": "1762393630149869568",
519+
"orderId": "1762393630149869567",
514520
"transactTime": "1674493798550",
515521
"price": "15.5",
516522
"stopPrice": "0",
@@ -525,11 +531,12 @@ class TestExchangeOnlineSetup(TypedDict):
525531
"pair": "SOL/USDT",
526532
"expected": {
527533
"symbol": "SOL/USDT",
528-
"orderId": "3551312894",
534+
"id": "1762393630149869567",
529535
"timestamp": 1674493798550,
530-
"datetime": "2023-03-25T15:49:58.550Z",
536+
"datetime": "2023-01-23T17:09:58.550Z",
531537
"price": 15.5,
532-
"status": "open",
538+
"average": 15.5,
539+
"status": "closed",
533540
"amount": 1.1,
534541
},
535542
},

tests/exchange_online/test_ccxt_compat.py

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -90,23 +90,14 @@ def test_ccxt_order_parse(self, exchange: EXCHANGE_FIXTURE_TYPE):
9090
expected = order["expected"]
9191
assert isinstance(po["id"], str)
9292
assert po["id"] is not None
93-
if len(exchange_response.keys()) < 5:
94-
# Kucoin case
95-
assert po["status"] is None
96-
continue
97-
assert po["timestamp"] == expected["timestamp"]
98-
assert isinstance(po["datetime"], str)
99-
assert isinstance(po["timestamp"], int)
100-
assert isinstance(po["price"], float)
101-
assert po["price"] == expected["price"]
102-
if po["status"] == "closed":
103-
# Filled orders should have average assigned.
104-
assert isinstance(po["average"], float)
105-
assert po["average"] == 15.5
106-
assert po["symbol"] == pair
107-
assert isinstance(po["amount"], float)
108-
assert po["amount"] == expected["amount"]
109-
assert isinstance(po["status"], str)
93+
94+
# Generic comparison which works for all fields
95+
for key, value in expected.items():
96+
assert key in po, f"Expected key {key} not found in parsed order"
97+
assert po[key] == value, f"Expected {key} to be {value}, got {po[key]}"
98+
assert isinstance(po[key], type(value)), (
99+
f"Expected {key} to be of type {type(value)}, got {type(po[key])}"
100+
)
110101
else:
111102
pytest.skip(f"No sample order available for exchange {exchangename}")
112103

0 commit comments

Comments
 (0)