Completed
Push — main ( 3e84ec...01939e )
by
unknown
13s queued 12s
created

TestAuthenticatedClient.setUp()   A

Complexity

Conditions 1

Size

Total Lines 28
Code Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 25
nop 1
dl 0
loc 28
rs 9.28
c 0
b 0
f 0
1
import random
2
import time
3
from tradehub.authenticated_client import AuthenticatedClient
4
from tests import APITestCase, TESTNET_VAL_IP, TRADING_TESTNET_WALLET_MNEMONIC
5
import tradehub.types as types
6
from tradehub.wallet import Wallet
7
8
9
class TestAuthenticatedClient(APITestCase):
10
11
    def setUp(self) -> None:
12
        self.validator_addresses = ['tswthvaloper1hn0spc9plh5ker8lrtzyz9uqfe3xk2yn0c6nyf', 'tswthvaloper10229tj7kh2mzwsn9cnfxuq3sqjuph860dlezpr']
13
        self.validator_address = self.validator_addresses[random.randint(a=0, b=len(self.validator_addresses)-1)]
14
        self.validator_dst_address = self.validator_addresses
15
        self.validator_dst_address.remove(self.validator_address)
16
        self.validator_dst_address = self.validator_dst_address[0]
17
        self._wallet: Wallet = Wallet(mnemonic=TRADING_TESTNET_WALLET_MNEMONIC, network="testnet")
18
        self.authenticated_client: AuthenticatedClient = AuthenticatedClient(wallet=self._wallet,
19
                                                                             node_ip=TESTNET_VAL_IP,
20
                                                                             node_port=5001,
21
                                                                             network="testnet")
22
        self.expect: dict = {
23
            'height': str,
24
            'txhash': str,
25
            'raw_log': str,
26
            'logs': [{
27
                'msg_index': int,
28
                'log': str,
29
                'events': [{
30
                    'type': str,
31
                    'attributes': [{
32
                        'key': str,
33
                        'value': str
34
                    }]
35
                }]
36
            }],
37
            'gas_wanted': str,
38
            'gas_used': str
39
        }
40
41
    def test_update_profile(self):
42
        txn_message: dict = types.UpdateProfileMessage(username='PythonCICD', twitter='PythonCICD')
43
        result: dict = self.authenticated_client.update_profile(message=txn_message)
44
45
        self.assertDictStructure(expect=self.expect, actual=result)
46
47
    def test_send_tokens(self):
48
        txn_message: dict = types.SendTokensMessage(to_address='tswth1rjr3nm2xcyr6psseksk8vhpc4n33htntuhmdfm',
49
                                                    amount=[types.SendTokensAmount(amount='5.1', denom='swth')])
50
        result: dict = self.authenticated_client.send_tokens(message=txn_message)
51
52
        self.assertDictStructure(expect=self.expect, actual=result)
53
54
    def test_create_order(self):
55
        txn_message: dict = types.CreateOrderMessage(market='swth_eth',
56
                                                     side="sell",
57
                                                     quantity="200",
58
                                                     type="market")
59
        result: dict = self.authenticated_client.create_order(message=txn_message)
60
61
        self.assertDictStructure(expect=self.expect, actual=result)
62
63
    def test_stake_switcheo(self):
64
        txn_message: dict = types.DelegateTokensMessage(delegator_address=self._wallet.address,
65
                                                        validator_address=self.validator_address,
66
                                                        amount=types.DelegateTokensAmount(amount='5.1', denom='swth'))
67
        result: dict = self.authenticated_client.stake_switcheo(message=txn_message)
68
69
        self.assertDictStructure(expect=self.expect, actual=result)
70
71
    def test_claim_staking_rewards(self):
72
        txn_message: dict = types.WithdrawDelegatorRewardsMessage(delegator_address=self._wallet.address,
73
                                                                  validator_address='tswthvaloper10229tj7kh2mzwsn9cnfxuq3sqjuph860dlezpr')
74
        result: dict = self.authenticated_client.claim_staking_rewards(message=txn_message)
75
76
        self.assertDictStructure(expect=self.expect, actual=result)
77
78
    def test_claim_all_staking_rewards(self):
79
        validator_addresses = []
80
        delegation_rewards: dict = self.authenticated_client.get_delegation_rewards(swth_address=self._wallet.address)
81
        for delegation_reward in delegation_rewards["result"]["rewards"]:
82
            validator_addresses.append(delegation_reward["validator_address"])
83
84
        txn_message: dict = types.WithdrawAllDelegatorRewardsParams(delegator_address=self._wallet.address,
85
                                                                    validator_addresses=validator_addresses)
86
        result: dict = self.authenticated_client.claim_all_staking_rewards(message=txn_message)
87
88
        self.assertDictStructure(expect=self.expect, actual=result)
89
90
    def test_unbond_tokens(self):
91
        expect: dict = self.expect
92
        expect['data'] = str
93
        txn_message: dict = types.BeginUnbondingTokensMessage(delegator_address=self._wallet.address,
94
                                                              validator_address=self.validator_address,
95
                                                              amount=types.AmountMessage(amount='0.1', denom='swth'))
96
        time.sleep(2)
97
        result: dict = self.authenticated_client.unbond_tokens(message=txn_message)
98
99
        if 'code' in result:
100
            self.assertEqual(first='too many unbonding delegation entries for (delegator, validator) tuple: failed to execute message; message index: 0',
101
                             second=result['raw_log'])
102
        else:
103
            self.assertDictStructure(expect=expect, actual=result)
104
105
    def test_redelegate_tokens(self):
106
        expect: dict = self.expect
107
        expect['data'] = str
108
        txn_message: dict = types.BeginRedelegatingTokensMessage(delegator_address=self._wallet.address,
109
                                                                 validator_src_address=self.validator_address,
110
                                                                 validator_dst_address=self.validator_dst_address,
111
                                                                 amount=types.AmountMessage(amount='0.1', denom='swth'))
112
113
        time.sleep(2)
114
        result: dict = self.authenticated_client.redelegate_tokens(message=txn_message)
115
116
        if 'code' in result:
117
            self.assertEqual(first='too many redelegation entries for (delegator, src-validator, dst-validator) tuple: failed to execute message; message index: 0',
118
                             second=result['raw_log'])
119
        else:
120
            self.assertDictStructure(expect=expect, actual=result)
121