Passed
Pull Request — main (#43)
by Switcheolytics
01:26
created

tests.test_ws_get_recent_trades   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 68
Duplicated Lines 85.29 %

Importance

Changes 0
Metric Value
eloc 47
dl 58
loc 68
rs 10
c 0
b 0
f 0
wmc 3

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
import asyncio
2
from typing import Optional
3
4
from tests import APITestCase, MAINNET_WS_URI, WEBSOCKET_TIMEOUT_GET_REQUEST
5
from tradehub.websocket_client import DemexWebsocket
6
7
8
class TestWSGetRecentTrades(APITestCase):
9
10
    def test_get_recent_trades_structure(self):
11
        """
12
        Check if response match expected dict structure.
13
        :return:
14
        """
15
        expect: dict = {
16
            "id": str,
17
            "sequence_number": int,
18
            "result": [
19
                {
20
                    "id": str,
21
                    "block_created_at": str,
22
                    "taker_id": str,
23
                    "taker_address": str,
24
                    "taker_fee_amount": str,
25
                    "taker_fee_denom": str,
26
                    "taker_side": str,
27
                    "maker_id": str,
28
                    "maker_address": str,
29
                    "maker_fee_amount": str,
30
                    "maker_fee_denom": str,
31
                    "maker_side": str,
32
                    "market": str,
33
                    "price": str,
34
                    "quantity": str,
35
                    "liquidation": str,
36
                    "taker_username": str,
37
                    "maker_username": str,
38
                    "block_height": str
39
                },
40
            ]
41
        }
42
43
        # connect to websocket
44
        client = DemexWebsocket(uri=MAINNET_WS_URI)
45
        # little work around to save the response
46
        self.response: Optional[dict] = None
47
48
        async def on_connect():
49
            await client.get_recent_trades("recent_trades", "swth_eth1")
50
51
        async def on_message(message: dict):
52
            # save response into self
53
            self.response = message
54
            await client.disconnect()
55
56
        try:
57
            loop = asyncio.get_event_loop()
58
            loop.run_until_complete(asyncio.wait_for(client.connect(on_connect_callback=on_connect,
59
                                                                    on_receive_message_callback=on_message),
60
                                                     WEBSOCKET_TIMEOUT_GET_REQUEST))
61
        except asyncio.TimeoutError:
62
            raise TimeoutError("Test did not complete in time.")
63
64
        if not self.response:
65
            raise RuntimeError("Did not receive a response.")
66
67
        self.assertDictStructure(expect, self.response)
68