Skip to content

Commit a816019

Browse files
authored
Merge pull request #80 from meilisearch/improve_tests
Improve tests
2 parents 3cc9be3 + 9810fc1 commit a816019

33 files changed

+675
-364
lines changed

meilisearch/index.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from time import sleep
44
from meilisearch._httprequests import HttpRequests
55

6-
# pylint: disable=R0904
6+
# pylint: disable=too-many-public-methods
77
class Index():
88
"""
99
Indexes routes wrapper

meilisearch/tests/client/__init__.py

Whitespace-only changes.
+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import pytest
2+
import meilisearch
3+
from meilisearch.tests import BASE_URL, MASTER_KEY
4+
5+
class TestClient:
6+
7+
""" TESTS: Client class """
8+
9+
@staticmethod
10+
def test_get_client():
11+
"""Tests getting a client instance"""
12+
client = meilisearch.Client(BASE_URL, MASTER_KEY)
13+
assert client.config
14+
response = client.health()
15+
assert response.status_code == 200
16+
17+
@staticmethod
18+
def test_get_client_without_master_key():
19+
"""Tests getting a client instance without MASTER KEY"""
20+
client = meilisearch.Client(BASE_URL)
21+
with pytest.raises(Exception):
22+
client.get_version()
23+
24+
@staticmethod
25+
def test_get_client_with_wrong_master_key():
26+
"""Tests getting a client instance with an invalid MASTER KEY"""
27+
client = meilisearch.Client(BASE_URL, MASTER_KEY + "123")
28+
with pytest.raises(Exception):
29+
client.get_version()

meilisearch/tests/test_health_meilisearch.py renamed to meilisearch/tests/client/test_client_health_meilisearch.py

+4-2
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
from meilisearch.tests import BASE_URL, MASTER_KEY
33

44
class TestHealth:
5+
6+
""" TESTS: health route """
7+
58
client = meilisearch.Client(BASE_URL, MASTER_KEY)
69

7-
""" health route """
810
def test_health(self):
9-
"""Tests an API call to check the health of MeiliSearch"""
11+
"""Tests checking the health of MeiliSearch instance"""
1012
response = self.client.health()
1113
assert response.status_code == 200

meilisearch/tests/test_key_meilisearch.py renamed to meilisearch/tests/client/test_client_key_meilisearch.py

+6
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,16 @@
22
from meilisearch.tests import BASE_URL, MASTER_KEY
33

44
class TestKey:
5+
6+
""" TESTS: key route """
7+
58
client = meilisearch.Client(BASE_URL, MASTER_KEY)
69

710
def test_get_keys(self):
11+
"""Tests if public and private keys are generated and retrieved"""
812
response = self.client.get_keys()
913
assert isinstance(response, dict)
1014
assert 'public' in response
1115
assert 'private' in response
16+
assert response['public'] is not None
17+
assert response['private'] is not None
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import meilisearch
2+
from meilisearch.tests import BASE_URL, MASTER_KEY
3+
4+
class TestStats:
5+
6+
""" TESTS: client stats route """
7+
8+
client = meilisearch.Client(BASE_URL, MASTER_KEY)
9+
index = None
10+
index2 = None
11+
12+
def setup_class(self):
13+
self.index = self.client.create_index(uid='indexUID')
14+
self.index_2 = self.client.create_index(uid='indexUID2')
15+
16+
def teardown_class(self):
17+
self.index.delete()
18+
self.index_2.delete()
19+
20+
def test_get_all_stats(self):
21+
"""Tests getting all stats after creating two indexes"""
22+
response = self.client.get_all_stats()
23+
assert isinstance(response, object)
24+
assert 'databaseSize' in response
25+
assert isinstance(response['databaseSize'], int)
26+
assert 'lastUpdate' in response
27+
assert 'indexes' in response
28+
assert 'indexUID' in response['indexes']
29+
assert 'indexUID2' in response['indexes']

meilisearch/tests/test_sys_info_meilisearch.py renamed to meilisearch/tests/client/test_client_sysinfo_meilisearch.py

+11-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,20 @@
22
from meilisearch.tests import BASE_URL, MASTER_KEY
33

44
class TestSysInfo:
5+
6+
""" TESTS: sysinfo route """
7+
58
client = meilisearch.Client(BASE_URL, MASTER_KEY)
9+
index = None
10+
11+
def setup_class(self):
12+
self.index = self.client.create_index(uid='indexUID')
13+
14+
def teardown_class(self):
15+
self.index.delete()
616

7-
""" sys-info route """
817
def test_get_sys_info(self):
9-
"""Tests an API call to check the system information of MeiliSearch"""
18+
"""Tests getting the system information of the MeiliSearch instance"""
1019
response = self.client.get_sys_info()
1120
assert 'memoryUsage' in response
1221
assert 'processorUsage' in response

meilisearch/tests/test_version_meilisearch.py renamed to meilisearch/tests/client/test_client_version_meilisearch.py

+10-2
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,19 @@
22
from meilisearch.tests import BASE_URL, MASTER_KEY
33

44
class TestVersion:
5+
""" TESTS: version route """
6+
57
client = meilisearch.Client(BASE_URL, MASTER_KEY)
8+
index = None
9+
10+
def setup_class(self):
11+
self.index = self.client.create_index(uid='indexUID')
12+
13+
def teardown_class(self):
14+
self.index.delete()
615

7-
""" version route """
816
def test_get_version(self):
9-
"""Tests an API call to get the version of MeiliSearch"""
17+
"""Tests getting the version of the MeiliSearch instance"""
1018
response = self.client.get_version()
1119
assert 'pkgVersion' in response
1220
assert 'commitSha' in response

meilisearch/tests/index/__init__.py

Whitespace-only changes.

meilisearch/tests/test_index_meilisearch.py renamed to meilisearch/tests/index/test_index.py

+25-20
Original file line numberDiff line numberDiff line change
@@ -3,61 +3,66 @@
33
from meilisearch.tests import BASE_URL, MASTER_KEY
44

55
class TestIndex:
6+
7+
""" TESTS: all index routes """
8+
69
client = meilisearch.Client(BASE_URL, MASTER_KEY)
10+
index_uid = 'indexUID'
711

8-
""" index route """
9-
@pytest.mark.run(order=1)
1012
def test_create_index(self):
11-
"""Tests an API call to create an index in MeiliSearch"""
12-
index = self.client.create_index(uid='movies_uid')
13+
"""Tests creating an index"""
14+
index = self.client.create_index(uid=self.index_uid)
1315
assert isinstance(index, object)
14-
assert index.uid == 'movies_uid'
16+
assert index.uid == self.index_uid
1517

1618
def test_get_indexes(self):
17-
"""Tests an API call to get all indexes in MeiliSearch"""
19+
"""Tests getting all indexes"""
1820
response = self.client.get_indexes()
1921
assert isinstance(response, list)
22+
assert response[0]['uid'] == self.index_uid
2023

2124
def test_get_index_with_uid(self):
22-
"""Tests an API call to get one index with uid in MeiliSearch"""
23-
response = self.client.get_index(uid='movies_uid')
25+
"""Tests getting one index with uid"""
26+
response = self.client.get_index(uid=self.index_uid)
2427
assert isinstance(response, object)
28+
assert response.uid == self.index_uid
2529

2630
def test_get_index_with_none_uid(self):
27-
"""Raises an exception if the index UID si None"""
31+
"""Test raising an exception if the index UID is None"""
2832
with pytest.raises(Exception):
2933
self.client.get_index(uid=None)
3034

3135
def test_index_info(self):
32-
"""Tests an API call to get an index's info in MeiliSearch"""
33-
index = self.client.get_index(uid='movies_uid')
36+
"""Tests getting an index's info"""
37+
index = self.client.get_index(uid=self.index_uid)
3438
response = index.info()
3539
assert isinstance(response, object)
36-
assert response['uid'] == 'movies_uid'
40+
assert response['uid'] == self.index_uid
3741
assert response['primaryKey'] is None
3842

3943
def test_index_info_with_wrong_uid(self):
40-
"""Tests an API call to get an index's info in MeiliSearch with a wrong UID"""
44+
"""Tests getting an index's info in MeiliSearch with a wrong UID"""
4145
with pytest.raises(Exception):
4246
self.client.get_index(uid='wrongUID').info()
4347

4448
def test_get_primary_key(self):
45-
"""Tests an API call to get primary-key of an index in MeiliSearch"""
46-
index = self.client.get_index(uid='movies_uid')
49+
"""Tests getting the primary-key of an index"""
50+
index = self.client.get_index(uid=self.index_uid)
4751
response = index.get_primary_key()
4852
assert response is None
4953

5054
def test_update_index(self):
51-
"""Tests an API call to update an index in MeiliSearch"""
52-
index = self.client.get_index(uid='movies_uid')
55+
"""Tests updating an index"""
56+
index = self.client.get_index(uid=self.index_uid)
5357
response = index.update(primaryKey='objectID')
5458
assert isinstance(response, object)
5559
assert index.get_primary_key() == 'objectID'
5660

57-
@pytest.mark.run(order=-1)
5861
def test_delete_index(self):
59-
"""Tests an API call to delete an index in MeiliSearch"""
60-
index = self.client.get_index(uid="movies_uid")
62+
"""Tests deleting an index"""
63+
index = self.client.get_index(uid=self.index_uid)
6164
response = index.delete()
6265
assert isinstance(response, object)
6366
assert response.status_code == 204
67+
with pytest.raises(Exception):
68+
self.client.get_index(uid=self.index_uid).info()
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
import json
2+
import pytest
3+
import meilisearch
4+
from meilisearch.tests import BASE_URL, MASTER_KEY
5+
6+
class TestDocument:
7+
8+
""" TESTS: all documents routes and optional params """
9+
10+
client = meilisearch.Client(BASE_URL, MASTER_KEY)
11+
index = None
12+
dataset_file = None
13+
dataset_json = None
14+
15+
def setup_class(self):
16+
self.index = self.client.create_index(uid='indexUID')
17+
self.dataset_file = open("./datasets/small_movies.json", "r")
18+
self.dataset_json = json.loads(self.dataset_file.read())
19+
self.dataset_file.close()
20+
21+
def teardown_class(self):
22+
self.index.delete()
23+
24+
def test_get_documents_default(self):
25+
"""Tests getting documents on a clean index"""
26+
response = self.index.get_documents()
27+
assert isinstance(response, list)
28+
assert response == []
29+
30+
def test_add_documents(self):
31+
"""Tests adding new documents to a clean index"""
32+
response = self.index.add_documents(self.dataset_json)
33+
assert isinstance(response, object)
34+
assert 'updateId' in response
35+
assert self.index.get_primary_key() == 'id'
36+
update = self.index.wait_for_pending_update(response['updateId'])
37+
assert update['status'] == 'processed'
38+
39+
def test_get_document(self):
40+
"""Tests getting one document on a populated index"""
41+
response = self.index.get_document("500682")
42+
assert isinstance(response, object)
43+
assert 'title' in response
44+
assert response['title'] == 'The Highwaymen'
45+
46+
def test_get_document_inexistent(self):
47+
"""Tests getting one INEXISTENT document on a populated index"""
48+
with pytest.raises(Exception):
49+
self.index.get_document("123")
50+
51+
def test_get_documents_populated(self):
52+
"""Tests getting documents on a populated index"""
53+
response = self.index.get_documents()
54+
assert isinstance(response, list)
55+
assert len(response) == 20
56+
57+
def test_get_documents_offset_optional_params(self):
58+
"""Tests getting documents on a populated index with optional parameters"""
59+
response = self.index.get_documents()
60+
assert isinstance(response, list)
61+
assert len(response) == 20
62+
response_offset_limit = self.index.get_documents({
63+
'limit': 3,
64+
'offset': 1,
65+
'attributesToRetrieve': 'title'
66+
})
67+
assert len(response_offset_limit) == 3
68+
assert response_offset_limit[0]['title'] == response[1]['title']
69+
70+
def test_update_documents(self):
71+
"""Tests updating a single document and a set of documents """
72+
response = self.index.get_documents()
73+
response[0]['title'] = "Some title"
74+
update = self.index.update_documents([response[0]])
75+
assert isinstance(update, object)
76+
assert 'updateId' in update
77+
self.index.wait_for_pending_update(update['updateId'])
78+
response = self.index.get_documents()
79+
assert response[0]['title'] == "Some title"
80+
update = self.index.update_documents(self.dataset_json)
81+
self.index.wait_for_pending_update(update['updateId'])
82+
response = self.index.get_documents()
83+
assert response[0]['title'] != "Some title"
84+
85+
def test_delete_document(self):
86+
"""Tests deleting a single document"""
87+
response = self.index.delete_document("500682")
88+
assert isinstance(response, object)
89+
assert 'updateId' in response
90+
self.index.wait_for_pending_update(response['updateId'])
91+
with pytest.raises(Exception):
92+
self.index.get_document("500682")
93+
94+
def test_delete_documents(self):
95+
"""Tests deleting a set of documents """
96+
to_delete = ["522681", "450465", "329996"]
97+
response = self.index.delete_documents(to_delete)
98+
assert isinstance(response, object)
99+
assert 'updateId' in response
100+
self.index.wait_for_pending_update(response['updateId'])
101+
for document in to_delete:
102+
with pytest.raises(Exception):
103+
self.index.get_document(document)
104+
105+
def test_delete_all_documents(self):
106+
"""Tests updating all the documents in the index"""
107+
response = self.index.delete_all_documents()
108+
assert isinstance(response, object)
109+
assert 'updateId' in response
110+
self.index.wait_for_pending_update(response['updateId'])
111+
response = self.index.get_documents()
112+
assert isinstance(response, list)
113+
assert response == []

0 commit comments

Comments
 (0)