Skip to content

Commit 14fadbc

Browse files
committed
Added test_agg_trades.py
1 parent 8ac28f4 commit 14fadbc

1 file changed

Lines changed: 119 additions & 0 deletions

File tree

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
from datetime import datetime, timedelta
2+
import pytest
3+
import sys
4+
5+
6+
class TestAggTrades:
7+
date_values = [
8+
datetime(1970, 1, 3),
9+
datetime(1970, 1, 3, 0, 1),
10+
datetime(2019, 1, 1),
11+
datetime.now() - timedelta(minutes=1),
12+
datetime.now()
13+
]
14+
15+
def test_response_corresponds_swagger_schema(self, client):
16+
resp_keys = ['T', 'a', 'm', 'p', 'q']
17+
agg_trades = client.get_agg_trades(symbol='EUR/USD_LEVERAGE')
18+
assert len(agg_trades) > 0
19+
assert type(agg_trades) is list
20+
assert all(type(i) is dict for i in agg_trades)
21+
assert all((trade[key] is not None for key in trade.keys())
22+
for trade in agg_trades)
23+
assert all((key in resp_keys for key in dct.keys())
24+
for dct in agg_trades)
25+
26+
@pytest.mark.parametrize('dttm', date_values)
27+
def test_start_time(self, client, dttm):
28+
dttm_ago_ts = dttm.timestamp()
29+
agg_trades = client.get_agg_trades(
30+
symbol='EUR/USD_LEVERAGE',
31+
start_time=dttm
32+
)
33+
assert all(dct["T"] / 1000 >= dttm_ago_ts for dct in agg_trades)
34+
35+
@pytest.mark.parametrize('dttm', date_values)
36+
def test_end_time(self, client, dttm):
37+
dttm_ts = dttm.timestamp()
38+
agg_trades = client.get_agg_trades(
39+
symbol='EUR/USD_LEVERAGE',
40+
end_time=dttm
41+
)
42+
assert all(dct["T"] / 1000 <= dttm_ts for dct in agg_trades)
43+
44+
@pytest.mark.parametrize('minutes', [0, 1, 30, 59, 60])
45+
def test_start_and_end_time(self, client, minutes):
46+
dttm_start = datetime.now() - timedelta(days=1)
47+
dttm_start_ts = dttm_start.timestamp()
48+
dttm_end = dttm_start + timedelta(minutes=minutes)
49+
dttm_end_ts = dttm_end.timestamp()
50+
agg_trades = client.get_agg_trades(
51+
symbol='EUR/USD_LEVERAGE',
52+
start_time=dttm_start,
53+
end_time=dttm_end
54+
)
55+
assert all(dttm_start_ts <= dct["T"] / 1000 <= dttm_end_ts
56+
for dct in agg_trades)
57+
58+
@pytest.mark.parametrize('limit', [1, 500, 999, 1000])
59+
def test_limit(self, client, limit):
60+
agg_trades = client.get_agg_trades(
61+
symbol='EUR/USD_LEVERAGE',
62+
limit=limit
63+
)
64+
assert len(agg_trades) == limit
65+
66+
def test_wrong_symbol(self, client):
67+
agg_trades = client.get_agg_trades(symbol="TEST123")
68+
assert agg_trades['code'] == -1128 and 'Invalid symbol: ' \
69+
in agg_trades['msg']
70+
71+
@pytest.mark.parametrize('seconds', [1, 214748379, 214748380])
72+
def test_end_time_less_then_start_time(self, client, seconds):
73+
dttm_start = datetime.now() - timedelta(days=1)
74+
dttm_end = dttm_start - timedelta(seconds=seconds)
75+
agg_trades = client.get_agg_trades(
76+
symbol='EUR/USD_LEVERAGE',
77+
start_time=dttm_start,
78+
end_time=dttm_end
79+
)
80+
assert agg_trades['code'] == -1128 and \
81+
agg_trades['msg'] == 'startTime should be less than endTime'
82+
83+
@pytest.mark.parametrize('dttm', [datetime.now() + timedelta(minutes=1),
84+
datetime(3001, 1, 3)])
85+
def test_start_time_in_future(self, client, dttm):
86+
agg_trades = client.get_agg_trades(
87+
symbol='EUR/USD_LEVERAGE',
88+
start_time=dttm)
89+
assert len(agg_trades) == 0
90+
91+
@pytest.mark.parametrize('old_date', [datetime(1970, 1, 3),
92+
datetime(1970, 1, 3, 0, 0, 1)]
93+
)
94+
def test_end_time_long_time_ago(self, client, old_date):
95+
agg_trades = client.get_agg_trades(symbol='EUR/USD_LEVERAGE',
96+
end_time=old_date)
97+
assert len(agg_trades) == 0
98+
99+
@pytest.mark.parametrize('over_limit_value', [1001, 5000, sys.maxsize])
100+
def test_limit_is_more_then_maximum(self, client, over_limit_value):
101+
with pytest.raises(ValueError):
102+
client.get_agg_trades(symbol='EUR/USD_LEVERAGE',
103+
limit=over_limit_value)
104+
105+
@pytest.mark.parametrize('wrong_value', [-sys.maxsize, -1, 0, 15.3])
106+
def test_invalid_limit(self, client, wrong_value):
107+
agg_trades = client.get_agg_trades(symbol='EUR/USD_LEVERAGE',
108+
limit=wrong_value)
109+
assert agg_trades['code'] == -1128 and \
110+
'invalid' in agg_trades['msg'].lower()
111+
112+
@pytest.mark.parametrize('seconds', [3601, 2147483646, 2147483647])
113+
def test_start_and_end_time_diff_more_then_an_hour(self, client, seconds):
114+
with pytest.raises(ValueError):
115+
dttm_start = datetime.now() - timedelta(days=1)
116+
dttm_end = dttm_start + timedelta(seconds=seconds)
117+
client.get_agg_trades(symbol='EUR/USD_LEVERAGE',
118+
start_time=dttm_start,
119+
end_time=dttm_end)

0 commit comments

Comments
 (0)