"""Tests for project logic.""" import config import pytest from src.constants import urls from src.logic import project from src.models import ows_project_manager def test_prepare_doc_project_add(mocker, project_document_fixture, project_insert_input): """Test prepare cloudsearch document.""" mocker.patch.object( ows_project_manager, "get_project_document", return_value=project_document_fixture ) doc = project.prepare_doc(project_insert_input) assert doc == { "_index": config.PROJECT_INDEX_NAME, "_op_type": "update", "_id": project_document_fixture["project_id"], "doc": project_document_fixture, "doc_as_upsert": True, } def test_prepare_doc_project_not_found(mocker, project_insert_input): """Test prepare cloudsearch document.""" mocker.patch.object(ows_project_manager, "get_project_document", return_value={}) doc = project.prepare_doc(project_insert_input) assert doc is None def test_prepare_doc_project_delete(project_insert_input): """Test prepare cloudsearch document for deletion.""" delete_event = project_insert_input.copy() delete_event["type"] = "delete" doc = project.prepare_doc(delete_event) assert doc == { "_index": config.PROJECT_INDEX_NAME, "_op_type": "delete", "_id": project_insert_input["data"]["project_id"], "doc_as_upsert": True, } def test_prepare_doc_project_incompatible(project_insert_input): """Test prepare cloudsearch document with incompatible format.""" input_event = project_insert_input.copy() del input_event["type"] doc = project.prepare_doc(input_event) assert doc is None def test_prepare_doc_project_error( mocker, project_insert_input, ): """Test prepare cloudsearch document ows-product error.""" mocker.patch.object( ows_project_manager, "get_project_document", side_effect=Exception(urls.OWS_PROJECT_ERROR) ) with pytest.raises(Exception, match=urls.OWS_PROJECT_ERROR): project.prepare_doc(project_insert_input)