Skip to content

Commit 5233c97

Browse files
authored
Merge pull request #87 from meilisearch/fix_search_params_can_be_lists
Fix bug: Search optional params are not applied when they are a list of strings
2 parents a816019 + 841c275 commit 5233c97

7 files changed

+36
-18
lines changed

meilisearch/index.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,6 +246,9 @@ def search(self, query, opt_params=None):
246246
if opt_params is None:
247247
opt_params = {}
248248
search_param = {'q': query}
249+
for key in opt_params:
250+
if isinstance(opt_params[key], list):
251+
opt_params[key] = ','.join(opt_params[key])
249252
params = {**search_param, **opt_params}
250253
return self.http.get(
251254
'{}/{}/{}?{}'.format(

meilisearch/tests/index/test_index_document_meilisearch.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class TestDocument:
1414

1515
def setup_class(self):
1616
self.index = self.client.create_index(uid='indexUID')
17-
self.dataset_file = open("./datasets/small_movies.json", "r")
17+
self.dataset_file = open('./datasets/small_movies.json', 'r')
1818
self.dataset_json = json.loads(self.dataset_file.read())
1919
self.dataset_file.close()
2020

@@ -38,15 +38,15 @@ def test_add_documents(self):
3838

3939
def test_get_document(self):
4040
"""Tests getting one document on a populated index"""
41-
response = self.index.get_document("500682")
41+
response = self.index.get_document('500682')
4242
assert isinstance(response, object)
4343
assert 'title' in response
4444
assert response['title'] == 'The Highwaymen'
4545

4646
def test_get_document_inexistent(self):
4747
"""Tests getting one INEXISTENT document on a populated index"""
4848
with pytest.raises(Exception):
49-
self.index.get_document("123")
49+
self.index.get_document('123')
5050

5151
def test_get_documents_populated(self):
5252
"""Tests getting documents on a populated index"""
@@ -70,30 +70,30 @@ def test_get_documents_offset_optional_params(self):
7070
def test_update_documents(self):
7171
"""Tests updating a single document and a set of documents """
7272
response = self.index.get_documents()
73-
response[0]['title'] = "Some title"
73+
response[0]['title'] = 'Some title'
7474
update = self.index.update_documents([response[0]])
7575
assert isinstance(update, object)
7676
assert 'updateId' in update
7777
self.index.wait_for_pending_update(update['updateId'])
7878
response = self.index.get_documents()
79-
assert response[0]['title'] == "Some title"
79+
assert response[0]['title'] == 'Some title'
8080
update = self.index.update_documents(self.dataset_json)
8181
self.index.wait_for_pending_update(update['updateId'])
8282
response = self.index.get_documents()
83-
assert response[0]['title'] != "Some title"
83+
assert response[0]['title'] != 'Some title'
8484

8585
def test_delete_document(self):
8686
"""Tests deleting a single document"""
87-
response = self.index.delete_document("500682")
87+
response = self.index.delete_document('500682')
8888
assert isinstance(response, object)
8989
assert 'updateId' in response
9090
self.index.wait_for_pending_update(response['updateId'])
9191
with pytest.raises(Exception):
92-
self.index.get_document("500682")
92+
self.index.get_document('500682')
9393

9494
def test_delete_documents(self):
9595
"""Tests deleting a set of documents """
96-
to_delete = ["522681", "450465", "329996"]
96+
to_delete = ['522681', '450465', '329996']
9797
response = self.index.delete_documents(to_delete)
9898
assert isinstance(response, object)
9999
assert 'updateId' in response

meilisearch/tests/index/test_index_search_meilisearch.py

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class TestSearch:
1313

1414
def setup_class(self):
1515
self.index = self.client.create_index(uid='indexUID')
16-
self.dataset_file = open("./datasets/small_movies.json", "r")
16+
self.dataset_file = open('./datasets/small_movies.json', 'r')
1717
self.dataset_json = json.loads(self.dataset_file.read())
1818
self.dataset_file.close()
1919
response = self.index.add_documents(self.dataset_json, primary_key='id')
@@ -83,8 +83,23 @@ def test_basic_search_params_with_simple_string(self):
8383
assert isinstance(response, object)
8484
assert len(response['hits']) == 5
8585
assert '_formatted' in response['hits'][0]
86-
assert "title" in response['hits'][0]['_formatted']
87-
assert not "release_date" in response['hits'][0]['_formatted']
86+
assert 'title' in response['hits'][0]['_formatted']
87+
assert not 'release_date' in response['hits'][0]['_formatted']
8888

89-
# Add def test_basic_search_params_with_string_list(self):
90-
# when bug (issue #85) is fixed
89+
def test_basic_search_params_with_string_list(self):
90+
"""Tests search with string list in query params"""
91+
response = self.index.search(
92+
'a',
93+
{
94+
'limit': 5,
95+
'attributesToRetrieve': ['title', 'overview'],
96+
'attributesToHighlight': ['title'],
97+
}
98+
)
99+
assert isinstance(response, object)
100+
assert len(response['hits']) == 5
101+
assert 'title' in response['hits'][0]
102+
assert 'overview' in response['hits'][0]
103+
assert not 'release_date' in response['hits'][0]
104+
assert 'title' in response['hits'][0]['_formatted']
105+
assert not 'overview' in response['hits'][0]['_formatted']

meilisearch/tests/index/test_index_update_meilisearch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class TestUpdate:
1414

1515
def setup_class(self):
1616
self.index = self.client.create_index(uid='indexUID')
17-
self.dataset_file = open("./datasets/small_movies.json", "r")
17+
self.dataset_file = open('./datasets/small_movies.json', 'r')
1818
self.dataset_json = json.loads(self.dataset_file.read())
1919
self.dataset_file.close()
2020

meilisearch/tests/index/test_index_wait_for_pending_update.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class TestUpdate:
1515

1616
def setup_class(self):
1717
self.index = self.client.create_index(uid='indexUID')
18-
self.dataset_file = open("./datasets/small_movies.json", "r")
18+
self.dataset_file = open('./datasets/small_movies.json', 'r')
1919
self.dataset_json = json.loads(self.dataset_file.read())
2020
self.dataset_file.close()
2121

meilisearch/tests/settings/test_settings_displayed_attributes_meilisearch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class TestDisplayedAttributes:
1414

1515
def setup_class(self):
1616
self.index = self.client.create_index(uid='indexUID')
17-
self.dataset_file = open("./datasets/small_movies.json", "r")
17+
self.dataset_file = open('./datasets/small_movies.json', 'r')
1818
self.dataset_json = json.loads(self.dataset_file.read())
1919
self.dataset_file.close()
2020

meilisearch/tests/settings/test_settings_searchable_attributes_meilisearch.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class TestSearchableAttributes:
1515

1616
def setup_class(self):
1717
self.index = self.client.create_index(uid='indexUID')
18-
self.dataset_file = open("./datasets/small_movies.json", "r")
18+
self.dataset_file = open('./datasets/small_movies.json', 'r')
1919
self.dataset_json = json.loads(self.dataset_file.read())
2020
self.dataset_file.close()
2121

0 commit comments

Comments
 (0)