-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathtest_segments_api.py
More file actions
133 lines (117 loc) · 6.45 KB
/
Copy pathtest_segments_api.py
File metadata and controls
133 lines (117 loc) · 6.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
"""Segment API tests module."""
import pytest
import unittest.mock as mock
from splitio.api import segments, client, APIException
from splitio.api.commons import FetchOptions
from splitio.client.util import SdkMetadata
class SegmentAPITests(object):
"""Segment API test cases."""
def test_fetch_segment_changes(self, mocker):
"""Test segment changes fetching API call."""
httpclient = mocker.Mock(spec=client.HttpClient)
httpclient.get.return_value = client.HttpResponse(200, '{"prop1": "value1"}', {})
segment_api = segments.SegmentsAPI(httpclient, 'some_api_key', SdkMetadata('1.0', 'some', '1.2.3.4'), mocker.Mock())
response = segment_api.fetch_segment('some_segment', 123, FetchOptions(None, None, None, None, None))
assert response['prop1'] == 'value1'
assert httpclient.get.mock_calls == [mocker.call('sdk', 'segmentChanges/some_segment', 'some_api_key',
extra_headers={
'SplitSDKVersion': '1.0',
'SplitSDKMachineIP': '1.2.3.4',
'SplitSDKMachineName': 'some'
},
query={'since': 123})]
httpclient.reset_mock()
response = segment_api.fetch_segment('some_segment', 123, FetchOptions(True, None, None, None, None))
assert response['prop1'] == 'value1'
assert httpclient.get.mock_calls == [mocker.call('sdk', 'segmentChanges/some_segment', 'some_api_key',
extra_headers={
'SplitSDKVersion': '1.0',
'SplitSDKMachineIP': '1.2.3.4',
'SplitSDKMachineName': 'some',
'Cache-Control': 'no-cache'
},
query={'since': 123})]
httpclient.reset_mock()
response = segment_api.fetch_segment('some_segment', 123, FetchOptions(True, 123, None, None, None))
assert response['prop1'] == 'value1'
assert httpclient.get.mock_calls == [mocker.call('sdk', 'segmentChanges/some_segment', 'some_api_key',
extra_headers={
'SplitSDKVersion': '1.0',
'SplitSDKMachineIP': '1.2.3.4',
'SplitSDKMachineName': 'some',
'Cache-Control': 'no-cache'
},
query={'since': 123, 'till': 123})]
httpclient.reset_mock()
def raise_exception(*args, **kwargs):
raise client.HttpClientException('some_message')
httpclient.get.side_effect = raise_exception
with pytest.raises(APIException) as exc_info:
response = segment_api.fetch_segment('some_segment', 123, FetchOptions())
assert exc_info.type == APIException
assert exc_info.value.message == 'some_message'
class SegmentAPIAsyncTests(object):
"""Segment async API test cases."""
@pytest.mark.asyncio
async def test_fetch_segment_changes(self, mocker):
"""Test segment changes fetching API call."""
httpclient = mocker.Mock(spec=client.HttpClientAsync)
segment_api = segments.SegmentsAPIAsync(httpclient, 'some_api_key', SdkMetadata('1.0', 'some', '1.2.3.4'), mocker.Mock())
self.verb = None
self.url = None
self.key = None
self.headers = None
self.query = None
async def get(verb, url, key, query, extra_headers):
self.url = url
self.verb = verb
self.key = key
self.headers = extra_headers
self.query = query
return client.HttpResponse(200, '{"prop1": "value1"}', {})
httpclient.get = get
response = await segment_api.fetch_segment('some_segment', 123, FetchOptions(None, None, None, None, None))
assert response['prop1'] == 'value1'
assert self.verb == 'sdk'
assert self.url == 'segmentChanges/some_segment'
assert self.key == 'some_api_key'
assert self.headers == {
'SplitSDKVersion': '1.0',
'SplitSDKMachineIP': '1.2.3.4',
'SplitSDKMachineName': 'some'
}
assert self.query == {'since': 123}
httpclient.reset_mock()
response = await segment_api.fetch_segment('some_segment', 123, FetchOptions(True, None, None, None, None))
assert response['prop1'] == 'value1'
assert self.verb == 'sdk'
assert self.url == 'segmentChanges/some_segment'
assert self.key == 'some_api_key'
assert self.headers == {
'SplitSDKVersion': '1.0',
'SplitSDKMachineIP': '1.2.3.4',
'SplitSDKMachineName': 'some',
'Cache-Control': 'no-cache'
}
assert self.query == {'since': 123}
httpclient.reset_mock()
response = await segment_api.fetch_segment('some_segment', 123, FetchOptions(True, 123, None, None, None))
assert response['prop1'] == 'value1'
assert self.verb == 'sdk'
assert self.url == 'segmentChanges/some_segment'
assert self.key == 'some_api_key'
assert self.headers == {
'SplitSDKVersion': '1.0',
'SplitSDKMachineIP': '1.2.3.4',
'SplitSDKMachineName': 'some',
'Cache-Control': 'no-cache'
}
assert self.query == {'since': 123, 'till': 123}
httpclient.reset_mock()
def raise_exception(*args, **kwargs):
raise client.HttpClientException('some_message')
httpclient.get = raise_exception
with pytest.raises(APIException) as exc_info:
response = await segment_api.fetch_segment('some_segment', 123, FetchOptions(None, None, None, None, None))
assert exc_info.type == APIException
assert exc_info.value.message == 'some_message'