def test_search_returns_the_right_number_of_docs_even_if_more_exist( self) -> None: elastic_search_services.add_documents_to_index([{ 'id': 'doc_id1', 'title': 'hello world' }, { 'id': 'doc_id2', 'title': 'hello me' }], 'index') results, new_offset = elastic_search_services.search('hello', 'index', [], [], size=1) self.assertEqual(len(results), 1) # Letting mypy know that results[0] is a dict. assert isinstance(results[0], dict) self.assertEqual(results[0]['id'], 'doc_id1') self.assertEqual(new_offset, '1') results, new_offset = elastic_search_services.search('hello', 'index', [], [], offset='1', size=1) self.assertEqual(len(results), 1) # Letting mypy know that results[0] is a dict. assert isinstance(results[0], dict) self.assertEqual(results[0]['id'], 'doc_id2') self.assertIsNone(new_offset)
def test_delete_succeeds_when_document_exists(self) -> None: elastic_search_services.add_documents_to_index([{ 'id': 'doc_id', 'title': 'hello' }], 'index1') results, _ = elastic_search_services.search('hello', 'index1', [], []) self.assertEqual(len(results), 1) # Successful deletion. elastic_search_services.delete_documents_from_index(['doc_id'], 'index1') results, _ = elastic_search_services.search('hello', 'index1', [], []) self.assertEqual(len(results), 0)
def test_search_returns_none_when_response_is_empty(self): correct_index_name = 'index1' offset = 30 size = 50 def mock_search(body, index, params): self.assertEqual( body, { 'query': { 'bool': { 'filter': [], 'must': [{ 'multi_match': { 'query': '' } }] } } }) self.assertEqual(index, correct_index_name) self.assertEqual(params['size'], size) self.assertEqual(params['from'], offset) return {'hits': {'hits': []}} swap_search = self.swap(elastic_search_services.ES, 'search', mock_search) with swap_search: result, new_offset = (elastic_search_services.search( '', correct_index_name, [], [], offset=offset, size=size, ids_only=False)) self.assertEqual(new_offset, None) self.assertEqual(result, [])
def test_search_returns_without_error_when_index_does_not_exist( self ) -> None: result, new_offset = elastic_search_services.search( 'query', 'nonexistent_index', [], []) self.assertEqual(result, []) self.assertEqual(new_offset, None)
def test_search_returns_full_response(self) -> None: correct_index_name = 'index1' elastic_search_services.add_documents_to_index([{ 'id': 1, 'source': { 'param1': 1, 'param2': 2 } }, { 'id': 12, 'source': { 'param1': 3, 'param2': 4 } }], correct_index_name) result, new_offset = elastic_search_services.search( '', correct_index_name, [], [], offset='0', size=50, ids_only=False) self.assertEqual(result, [{ 'id': 1, 'source': { 'param1': 1, 'param2': 2 } }, { 'id': 12, 'source': { 'param1': 3, 'param2': 4 } }]) self.assertIsNone(new_offset)
def test_search_returns_none_when_response_is_empty(self): query = {'match_all': {}} correct_index_name = 'index1' json_str = json.dumps(query) offset = 30 size = 50 def mock_search(body, index, params): self.assertEqual(body, query) self.assertEqual(index, correct_index_name) self.assertEqual(params['size'], size) self.assertEqual(params['from'], offset) return {'hits': {'hits': []}} swap_search = self.swap(elastic_search_services.ES, 'search', mock_search) with swap_search: result, new_offset = (elastic_search_services.search( json_str, correct_index_name, offset=offset, size=size, ids_only=False)) self.assertEqual(new_offset, None) self.assertEqual(result, [])
def test_search_constructs_query_with_categories_and_languages(self): correct_index_name = 'index1' def mock_search(body, index, params): self.assertEqual( body, { 'query': { 'bool': { 'filter': [{ 'match': { 'category': '"my_category"', } }, { 'match': { 'language_code': '"en" "es"' } }], 'must': [], } } }) self.assertEqual(index, correct_index_name) self.assertEqual(params, {'from': 0, 'size': 21}) return {'hits': {'hits': []}} swap_search = self.swap(elastic_search_services.ES, 'search', mock_search) with swap_search: result, new_offset = (elastic_search_services.search( '', correct_index_name, ['my_category'], ['en', 'es'])) self.assertEqual(result, []) self.assertIsNone(new_offset)
def test_search_returns_none_when_response_is_empty(self) -> None: result, new_offset = elastic_search_services.search('', 'index', [], [], offset='0', size=50, ids_only=False) self.assertEqual(new_offset, None) self.assertEqual(result, [])
def test_search_constructs_nonempty_query_with_categories_and_langs( self ) -> None: correct_index_name = 'index1' # In the type annotation below Dict[str, Any] is used for body # because this mocks the behavior of elastic_search_services.ES.search # and in the type stubs the type is Any. def mock_search( body: Dict[str, Any], index: str, params: Dict[str, int] ) -> Dict[str, Dict[str, List[str]]]: self.assertEqual(body, { 'query': { 'bool': { 'must': [{ 'multi_match': { 'query': 'query' } }], 'filter': [{ 'match': { 'category': '"my_category"', } }, { 'match': { 'language_code': '"en" "es"' } }] } }, 'sort': [{ 'rank': { 'order': 'desc', 'missing': '_last', 'unmapped_type': 'float' } }] }) self.assertEqual(index, correct_index_name) self.assertEqual(params, { 'from': 0, 'size': 21 }) return { 'hits': { 'hits': [] } } swap_search = self.swap( elastic_search_services.ES, 'search', mock_search) with swap_search: result, new_offset = ( elastic_search_services.search( 'query', correct_index_name, ['my_category'], ['en', 'es'])) self.assertEqual(result, []) self.assertIsNone(new_offset)
def test_search_returns_full_response(self): correct_index_name = 'index1' offset = 30 size = 50 documents = [{ '_id': 1, '_source': { 'param1': 1, 'param2': 2 } }, { '_id': 12, '_source': { 'param1': 3, 'param2': 4 } }] def mock_search(body, index, params): self.assertEqual( body, { 'query': { 'bool': { 'filter': [], 'must': [{ 'multi_match': { 'query': '' } }] } } }) self.assertEqual(index, correct_index_name) self.assertEqual(params['size'], size) self.assertEqual(params['from'], offset) return {'hits': {'hits': documents}} swap_search = self.swap(elastic_search_services.ES, 'search', mock_search) with swap_search: result, new_offset = (elastic_search_services.search( '', correct_index_name, [], [], offset=offset, size=size, ids_only=False)) self.assertEqual(new_offset, offset + size) self.assertEqual(result, [document['_source'] for document in documents])
def test_search_returns_full_response(self): query = {'match_all': {}} correct_index_name = 'index1' json_str = json.dumps(query) offset = 30 size = 50 documents = [{ '_id': 1, '_source': { 'param1': 1, 'param2': 2 } }, { '_id': 12, '_source': { 'param1': 3, 'param2': 4 } }] def mock_search(body, index, params): self.assertEqual(body, query) self.assertEqual(index, correct_index_name) self.assertEqual(params['size'], size) self.assertEqual(params['from'], offset) return {'hits': {'hits': documents}} swap_search = self.swap(elastic_search_services.ES, 'search', mock_search) with swap_search: result, new_offset = (elastic_search_services.search( json_str, correct_index_name, offset=offset, size=size, ids_only=False)) self.assertEqual(new_offset, offset + size) self.assertEqual(result, [document['_source'] for document in documents])