"""Tests for ows_product model.""" import pytest from opensearchpy.exceptions import OpenSearchException from src.models import opensearch def test_upload_bulk_documents(mocker, product_document_fixture): """Test upload_bulk_documents successfully.""" mocked_helpers_bulk = mocker.patch("src.models.opensearch.helpers.bulk") mocked_client = mocker.patch("src.models.opensearch.os_client") mocked_logger = mocker.patch("src.models.opensearch.logger") mocked_helpers_bulk.return_value = (2, []) docs = [ { "_op_type": "index", "_index": "your_index_name", "_id": "doc_id_1", "_source": {"field1": "value1", "field2": "value2"}, }, {"_op_type": "delete", "_index": "your_index_name", "_id": "doc_id_to_delete_1"}, ] result = opensearch.upload_bulk_documents(docs) assert result == (2, []) mocked_helpers_bulk.assert_called_once_with( client=mocked_client, actions=docs, raise_on_error=False, max_retries=3 ) assert mocked_logger.info.call_count == 2 assert mocked_logger.error.call_count == 0 def test_upload_bulk_documents_with_not_found(mocker, product_document_fixture): """Test upload_bulk_documents error.""" mocked_helpers_bulk = mocker.patch("src.models.opensearch.helpers.bulk") mocked_client = mocker.patch("src.models.opensearch.os_client") mocked_logger = mocker.patch("src.models.opensearch.logger") error = [ { "delete": { "_id": "6198884", "_index": "product.v01", "_primary_term": 1, "_seq_no": 1952868, "_shards": {"failed": 0, "successful": 2, "total": 2}, "_version": 2, "result": "not_found", "status": 404, } } ] mocked_helpers_bulk.return_value = (1, error) docs = [ { "_op_type": "index", "_index": "your_index_name", "_id": "doc_id_1", "_source": {"field1": "value1", "field2": "value2"}, }, {"_op_type": "delete", "_index": "your_index_name", "_id": "doc_id_to_delete_1"}, ] result = opensearch.upload_bulk_documents(docs) assert result == (1, error) mocked_helpers_bulk.assert_called_once_with( client=mocked_client, actions=docs, raise_on_error=False, max_retries=3 ) assert mocked_logger.info.call_count == 2 assert mocked_logger.error.call_count == 0 def test_upload_bulk_documents_with_real_error(mocker, product_document_fixture): """Test upload_bulk_documents error.""" mocked_helpers_bulk = mocker.patch("src.models.opensearch.helpers.bulk") mocker.patch("src.models.opensearch.os_client") mocker.patch("src.models.opensearch.logger") error = [ { "update": { "_index": "product.v01", "_id": "6198884", "status": 404, "error": { "type": "document_missing_exception", "reason": "[6198884]: document missing", "index": "product.v01", "shard": "0", "index_uuid": "u6JZ20MYSkicE3xJ67pIOQ", }, } } ] mocked_helpers_bulk.return_value = (1, error) docs = [ { "_op_type": "index", "_index": "your_index_name", "_id": "doc_id_1", } ] with pytest.raises(OpenSearchException): opensearch.upload_bulk_documents(docs) def test_upload_bulk_documents_no_data(mocker, product_document_fixture): """Test upload_bulk_documents successfully.""" mocked_helpers_bulk = mocker.patch("src.models.opensearch.helpers.bulk") mocker.patch("src.models.opensearch.os_client") mocked_logger = mocker.patch("src.models.opensearch.logger") docs = [] result = opensearch.upload_bulk_documents(docs) assert result == (0, []) assert mocked_helpers_bulk.call_count == 0 assert mocked_logger.info.call_count == 0 assert mocked_logger.error.call_count == 0