"""Test persistor model.""" from unittest.mock import MagicMock from unittest.mock import Mock from unittest.mock import patch from sqlalchemy.exc import SQLAlchemyError from blacklist_manager.constants import error from blacklist_manager.models import persister def test_fetch_product_details_by_id(fetched_product_details_data): """Test fetching product details by id.""" product_id = 100 mock_row = Mock() mock_row._asdict.return_value = fetched_product_details_data mock_query = Mock() mock_query.fetchone.return_value = mock_row mock_session = Mock() mock_session.execute.return_value = mock_query response = persister.fetch_product_details_by_id(product_id, mock_session) assert response.status == 200 assert response.message == fetched_product_details_data def test_fetch_product_details_by_id_no_results(monkeypatch): """Test fetching product details by id for no results.""" result = False product_id = 100 result_message = MagicMock(fetchone=lambda: result) mock_session = MagicMock() mock_session.execute.return_value = result_message response = persister.fetch_product_details_by_id(product_id, mock_session) assert response.status == 404 assert response.errors['message'] == \ error.PRODUCT_NOT_FOUND_MESSAGE.format(product_id) @patch('blacklist_manager.models.persister.capture_exception') def test_fetch_product_details_by_id_failure(mock_sentry): """Test get product document by id.""" product_id = 100 mock_session = MagicMock() mock_session.execute.side_effect = SQLAlchemyError() response = persister.fetch_product_details_by_id(product_id, mock_session) assert response.status == 500 assert mock_sentry.called