-
Notifications
You must be signed in to change notification settings - Fork 25
/
Copy pathtest_index_api.py
97 lines (74 loc) · 2.85 KB
/
test_index_api.py
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
import pytest
import json
import msgpack
def test_head_index_not_found(client, index_name):
req = client.head(f'/{index_name}')
assert req.status_code == 404, req.content
assert req.content == b''
def test_head_index(client, index_name, create_index):
req = client.head(f'/{index_name}')
assert req.status_code == 200, req.content
assert req.content == b''
def test_get_index_not_found(client, index_name):
req = client.get(f'/{index_name}')
assert req.status_code == 404, req.content
assert json.loads(req.content) == {'error': 'IndexNotFound'}
@pytest.mark.parametrize('fmt', ['json', 'msgpack'])
def test_get_index(client, index_name, create_index, fmt):
req = client.post(f'/{index_name}/_update', json={
'changes': [
{'set_attribute': {'name': 'foo', 'value': 1234}},
],
})
assert req.status_code == 200, req.content
req = client.get(f'/{index_name}', headers=headers(fmt))
assert req.status_code == 200, req.content
if fmt == 'json':
expected = {'version': 1, 'attributes': {'foo': 1234}}
else:
expected = {'v': 1, 'a': {'foo': 1234}}
assert decode(fmt, req.content) == expected
def headers(fmt):
if fmt == 'json':
return {
'Content-Type': 'application/json',
'Accept': 'application/json',
}
elif fmt == 'msgpack':
return {
'Content-Type': 'application/vnd.msgpack',
'Accept': 'application/vnd.msgpack',
}
else:
return {}
def decode(fmt, content):
if fmt == 'json':
return json.loads(content)
elif fmt == 'msgpack':
return msgpack.loads(content)
else:
assert False
@pytest.mark.parametrize('fmt', ['json', 'msgpack'])
def test_create_index(client, index_name, fmt):
req = client.head(f'/{index_name}')
assert req.status_code == 404, req.content
req = client.put(f'/{index_name}', headers=headers(fmt))
assert req.status_code == 200, req.content
assert decode(fmt, req.content) == {}
req = client.put(f'/{index_name}', headers=headers(fmt))
assert req.status_code == 200, req.content
assert decode(fmt, req.content) == {}
req = client.head(f'/{index_name}')
assert req.status_code == 200, req.content
@pytest.mark.parametrize('fmt', ['json', 'msgpack'])
def test_delete_index(client, index_name, create_index, fmt):
req = client.head(f'/{index_name}')
assert req.status_code == 200, req.content
req = client.delete(f'/{index_name}', headers=headers(fmt))
assert req.status_code == 200, req.content
assert decode(fmt, req.content) == {}
req = client.delete(f'/{index_name}', headers=headers(fmt))
assert req.status_code == 200, req.content
assert decode(fmt, req.content) == {}
req = client.head(f'/{index_name}')
assert req.status_code == 404, req.content