Skip to content

Commit 0c4b500

Browse files
committedDec 4, 2024
Add test for the single-fingerprint APIs
1 parent 3bcafdd commit 0c4b500

File tree

2 files changed

+82
-11
lines changed

2 files changed

+82
-11
lines changed
 

‎src/common.zig

+4-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub const SearchResult = struct {
2020
version: u64,
2121

2222
pub fn cmp(_: void, a: SearchResult, b: SearchResult) bool {
23-
return a.score > b.score or (a.score == b.score and a.id > b.id);
23+
return a.score > b.score or (a.score == b.score and b.id > a.id);
2424
}
2525
};
2626

@@ -91,13 +91,16 @@ test "sort search results" {
9191
defer results.deinit();
9292

9393
try results.incr(1, 1);
94+
try results.incr(3, 1);
95+
try results.incr(3, 1);
9496
try results.incr(2, 1);
9597
try results.incr(2, 1);
9698

9799
results.sort();
98100

99101
try testing.expectEqualSlices(SearchResult, &[_]SearchResult{
100102
SearchResult{ .id = 2, .score = 2, .version = 1 },
103+
SearchResult{ .id = 3, .score = 2, .version = 1 },
101104
SearchResult{ .id = 1, .score = 1, .version = 1 },
102105
}, results.values());
103106
}

‎tests/test_fingerprint_api.py

+78-10
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,65 @@
11
import json
22

33

4-
def test_insert(client, index_name, create_index):
4+
def test_insert_single(client, index_name, create_index):
5+
# insert fingerprint
6+
req = client.put(f'/{index_name}/1', json={'hashes': [101, 201, 301]})
7+
assert req.status_code == 200, req.content
8+
assert json.loads(req.content) == {}
9+
10+
# verify we can find it
11+
req = client.post(f'/{index_name}/_search', json={
12+
'query': [101, 201, 301]
13+
})
14+
assert req.status_code == 200, req.content
15+
assert json.loads(req.content) == {
16+
'results': [
17+
{'id': 1, 'score': 3},
18+
],
19+
}
20+
21+
req = client.get(f'/{index_name}/1')
22+
assert req.status_code == 200, req.content
23+
assert json.loads(req.content) == {
24+
'version': 1,
25+
}
26+
27+
28+
def test_insert_multi(client, index_name, create_index):
529
# insert fingerprint
630
req = client.post(f'/{index_name}/_update', json={
731
'changes': [
8-
{'insert': {'id': 1, 'hashes': [100, 200, 300]}}
32+
{'insert': {'id': 1, 'hashes': [101, 201, 301]}},
33+
{'insert': {'id': 2, 'hashes': [102, 202, 302]}},
934
],
1035
})
1136
assert req.status_code == 200, req.content
1237
assert json.loads(req.content) == {}
1338

1439
# verify we can find it
1540
req = client.post(f'/{index_name}/_search', json={
16-
'query': [100, 200, 300]
41+
'query': [101, 201, 301, 102, 202, 302]
1742
})
1843
assert req.status_code == 200, req.content
1944
assert json.loads(req.content) == {
20-
'results': [{'id': 1, 'score': 3}]
45+
'results': [
46+
{'id': 1, 'score': 3},
47+
{'id': 2, 'score': 3},
48+
],
2149
}
2250

23-
# verify we can get id
2451
req = client.get(f'/{index_name}/1')
2552
assert req.status_code == 200, req.content
2653
assert json.loads(req.content) == {
2754
'version': 1,
2855
}
2956

57+
req = client.get(f'/{index_name}/2')
58+
assert req.status_code == 200, req.content
59+
assert json.loads(req.content) == {
60+
'version': 1,
61+
}
62+
3063

3164
def test_update_full(client, index_name, create_index):
3265
# insert fingerprint
@@ -118,25 +151,60 @@ def test_update_partial(client, index_name, create_index):
118151
}
119152

120153

121-
def test_delete(client, index_name, create_index):
122-
# insert fingerprint
154+
def test_delete_multi(client, index_name, create_index):
155+
# insert fingerprints
123156
req = client.post(f'/{index_name}/_update', json={
124157
'changes': [
125-
{'insert': {'id': 1, 'hashes': [100, 200, 300]}}
158+
{'insert': {'id': 1, 'hashes': [101, 201, 301]}},
159+
{'insert': {'id': 2, 'hashes': [102, 202, 302]}},
126160
],
127161
})
128162
assert req.status_code == 200, req.content
129163
assert json.loads(req.content) == {}
130164

131-
# delete fingerprint
165+
# delete fingerprints
132166
req = client.post(f'/{index_name}/_update', json={
133167
'changes': [
134-
{'delete': {'id': 1}}
168+
{'delete': {'id': 1}},
169+
{'delete': {'id': 2}},
135170
],
136171
})
137172
assert req.status_code == 200, req.content
138173
assert json.loads(req.content) == {}
139174

175+
# verify we can't find it
176+
req = client.post(f'/{index_name}/_search', json={
177+
'query': [101, 201, 301, 102, 202, 302]
178+
})
179+
assert req.status_code == 200, req.content
180+
assert json.loads(req.content) == {
181+
'results': []
182+
}
183+
184+
req = client.get(f'/{index_name}/1')
185+
assert req.status_code == 404, req.content
186+
assert json.loads(req.content) == {
187+
'error': 'FingerprintNotFound',
188+
}
189+
190+
req = client.get(f'/{index_name}/2')
191+
assert req.status_code == 404, req.content
192+
assert json.loads(req.content) == {
193+
'error': 'FingerprintNotFound',
194+
}
195+
196+
197+
def test_delete_single(client, index_name, create_index):
198+
# insert fingerprint
199+
req = client.put(f'/{index_name}/1', json={'hashes': [100, 200, 300]})
200+
assert req.status_code == 200, req.content
201+
assert json.loads(req.content) == {}
202+
203+
# delete fingerprint
204+
req = client.delete(f'/{index_name}/1')
205+
assert req.status_code == 200, req.content
206+
assert json.loads(req.content) == {}
207+
140208
# verify we can't find it
141209
req = client.post(f'/{index_name}/_search', json={
142210
'query': [100, 200, 300]

0 commit comments

Comments
 (0)
Failed to load comments.