def test_delete_ignores_documents_that_do_not_exist(self) -> None:
     elastic_search_services.add_documents_to_index([{
         'id': 'doc_id'
     }], 'index1')
     # The doc does not exist, but no exception is thrown.
     elastic_search_services.delete_documents_from_index(['not_a_real_id'],
                                                         'index1')
    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_create_index_raises_exception_when_insertion_fails(self) -> None:
     correct_index_name = 'index1'
     correct_id = 'id'
     def mock_index(
             index: str, body: Dict[str, str], id: str # pylint: disable=redefined-builtin
     ) -> Dict[str, Dict[str, int]]:
         self.assertEqual(index, correct_index_name)
         self.assertEqual(id, correct_id)
         self.assertEqual(body, {
             'id': correct_id
         })
         return {
             '_shards': {
                 'failed': 2
             }
         }
     documents = [
         {
             'id': correct_id
         }
     ]
     assert_raises_ctx = self.assertRaisesRegexp( # type: ignore[no-untyped-call]
         Exception,
         'Failed to add document to index.')
     with assert_raises_ctx, self.swap(
         elastic_search_services.ES, 'index', mock_index):
         elastic_search_services.add_documents_to_index(
             documents, correct_index_name)
    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_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_create_index_with_correct_input(self):
        correct_index_name = 'index1'
        correct_id = 'id'

        def mock_index(index, body, id):  # pylint: disable=redefined-builtin
            self.assertEqual(index, correct_index_name)
            self.assertEqual(id, correct_id)
            self.assertEqual(body, {'id': correct_id})
            return {'_shards': {'failed': 0}}

        documents = [{'id': correct_id}]
        with self.swap(elastic_search_services.ES, 'index', mock_index):
            elastic_search_services.add_documents_to_index(
                documents, correct_index_name)
    def test_create_index_raises_exception_when_insertion_fails(self):
        correct_index_name = 'index1'
        correct_id = 'id'

        def mock_index(index, body, id):  # pylint: disable=redefined-builtin
            self.assertEqual(index, correct_index_name)
            self.assertEqual(id, correct_id)
            self.assertEqual(body, {'id': correct_id})
            return {'_shards': {'failed': 2}}

        documents = [{'id': correct_id}]
        assert_raises_ctx = self.assertRaisesRegexp(
            Exception, 'Failed to add document to index.')
        with assert_raises_ctx, self.swap(elastic_search_services.ES, 'index',
                                          mock_index):
            elastic_search_services.add_documents_to_index(
                documents, correct_index_name)
    def test_create_index_with_correct_input(self) -> None:
        correct_index_name = 'index1'
        correct_id = 'id'

        def mock_index(
            index: str,
            body: Dict[str, str],
            id: str  # pylint: disable=redefined-builtin
        ) -> Dict[str, Dict[str, int]]:
            self.assertEqual(index, correct_index_name)
            self.assertEqual(id, correct_id)
            self.assertEqual(body, {'id': correct_id})
            return {'_shards': {'failed': 0}}

        with self.swap(elastic_search_services.ES, 'index', mock_index):
            elastic_search_services.add_documents_to_index([{
                'id': correct_id
            }], correct_index_name)