Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 131 additions & 0 deletions integration_tests/rest/test_klines.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
import functools
import itertools
import sys
import time
from datetime import datetime, timedelta
import pytest

from currencycom import constants
from currencycom.client import CandlesticksChartIntervals


class TestKlines:
date_values = [
datetime(1970, 1, 3),
datetime(1970, 1, 3, 0, 1),
datetime(2019, 1, 1),
datetime.now() - timedelta(minutes=1),
datetime.now()
]
values = [1, 59, 99, 101, 500, 999, 1000]

def test_base_check(self, client):
klines = client.get_klines(symbol='GOOGL.',
interval=CandlesticksChartIntervals
.MINUTE)
assert len(klines) > 0
assert all(len(i) == 6 for i in klines)

@pytest.mark.parametrize("interval, minutes", [
(CandlesticksChartIntervals.MINUTE, 1),
(CandlesticksChartIntervals.FIVE_MINUTES, 5),
(CandlesticksChartIntervals.FIFTEEN_MINUTES, 15),
(CandlesticksChartIntervals.THIRTY_MINUTES, 30),
(CandlesticksChartIntervals.HOUR, 60),
(CandlesticksChartIntervals.FOUR_HOURS, 240),
(CandlesticksChartIntervals.DAY, 1440),
(CandlesticksChartIntervals.WEEK, 10080),
])
def test_check_interval_and_accordance_between_get_klines(self, client,
interval,
minutes):
klines = client.get_klines(symbol='ETH/USD_LEVERAGE',
interval=interval)
assert all(val[0] % 60000 == 0 for val in klines)
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ничего не пропустил?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ну тут мы проверяем что первая свеча начинается четко с минуты 00, и вторая что разница(interval) между ними то количество минут которое указывали. И что-то еще?

assert (klines[i + 1][0] - klines[i][0] == (minutes * 60000) for i in
range(len(klines) - 1))

@pytest.mark.parametrize('limit', [1, 500, 999, 1000])
def test_check_valid_limits(self, client, limit):
"""
Positive test
Check get counts
Сравниваем что количество запрашиваемых и полученных значений лимита
равны.
"""
klines = client.get_klines(symbol='META.',
interval=CandlesticksChartIntervals.MINUTE,
limit=limit)
assert len(klines) == limit

@pytest.mark.parametrize('limit',
[1001, sys.maxsize])
def test_check_limits_more_max_limit(self, client, limit):
"""
Negative test.
Check values > max limit(1000)
"""
with pytest.raises(ValueError):
client.get_klines(symbol='META.',
interval=CandlesticksChartIntervals.
FIFTEEN_MINUTES,
limit=limit)

@pytest.mark.parametrize('limit',
[-1, 0, -sys.maxsize])
def test_check_limits_less_1(self, client, limit):
"""
Negative test
Check values < min limit(1)
"""
klines = client.get_klines(symbol='META.',
interval=CandlesticksChartIntervals.
FIFTEEN_MINUTES,
limit=limit)
assert klines['code'] == -1128

@pytest.mark.parametrize('date_val', date_values)
def test_start_time_valid(self, client, date_val):
klines = client.get_klines(symbol='GOOGL.',
interval=CandlesticksChartIntervals.HOUR,
start_time=date_val)
date_ago_timestamp = date_val.timestamp()
assert all(date[0] / 1000 >= date_ago_timestamp for date in klines)

@pytest.mark.parametrize('date_val', date_values)
def test_end_time_valid(self, client, date_val):
klines = client.get_klines(symbol='DBK.',
interval=CandlesticksChartIntervals.
FIFTEEN_MINUTES, end_time=date_val)
date_ago_timestamp = date_val.timestamp()
assert all(date[0] / 1000 <= date_ago_timestamp for date in klines)

def test_wrong_symbol(self, client):
klines = client.get_klines(symbol='TEST',
interval=CandlesticksChartIntervals.
THIRTY_MINUTES)
assert 'Invalid symbol' in klines['msg']
assert klines['code'] == -1128

@pytest.mark.parametrize('date_future',
[datetime.now() + timedelta(minutes=1),
datetime(3001, 1, 3)])
def test_start_time_future(self, client, date_future):
klines = client.get_klines(symbol='META.',
interval=CandlesticksChartIntervals.
FOUR_HOURS, start_time=date_future)
assert len(klines) == 0

@pytest.mark.parametrize('seconds',
[1, 214748379, 214748380])
def test_end_time_less_then_start_time(self, client, seconds):
dttm_start = datetime.now() - timedelta(days=1)
dttm_end = dttm_start - timedelta(seconds=seconds)
klines = client.get_klines(
symbol='EUR/USD_LEVERAGE',
interval=CandlesticksChartIntervals.FIVE_MINUTES,
start_time=dttm_start,
end_time=dttm_end
)
assert klines['msg'] == 'endTime should be greater than startTime.'
assert klines['code'] == -1128