"""Tests for the DeliveryRestrictionsRequests model.""" from unittest.mock import MagicMock import pytest from product_digital.models import delivery_restrictions_requests DELIVERY_RESTRICTIONS_REQUEST_DATA = { 'release_id': 1, 'delivery_requests': 'Test delivery restrictions instructions.' } @pytest.fixture def mock_session(): """Fixture for creating a mock SQLAlchemy session.""" return MagicMock() @pytest.fixture def mock_delivery_restrictions_request(): """Return a mock DeliveryRestrictionsRequests instance.""" obj = MagicMock(spec=delivery_restrictions_requests.DeliveryRestrictionsRequests) data = DELIVERY_RESTRICTIONS_REQUEST_DATA.copy() obj.to_dict.return_value = data obj.update.side_effect = lambda **kwargs: data.update(kwargs) return obj def test_get_delivery_restrictions_request_found(mock_session, mock_delivery_restrictions_request): """Test getting a delivery restrictions request by release ID when it exists.""" mock_session.query.return_value.filter_by.return_value.first.return_value = mock_delivery_restrictions_request response = delivery_restrictions_requests.get_delivery_restrictions_request_by_release_id(1, session=mock_session) assert response.message == DELIVERY_RESTRICTIONS_REQUEST_DATA mock_session.query.assert_called_once_with(delivery_restrictions_requests.DeliveryRestrictionsRequests) mock_session.query.return_value.filter_by.assert_called_once_with(release_id=1) mock_session.query.return_value.filter_by.return_value.first.assert_called_once() def test_get_delivery_restrictions_request_not_found(mock_session): """Test that None is returned when no delivery restrictions request by release ID when it does not exist.""" mock_session.query.return_value.filter_by.return_value.first.return_value = None response = delivery_restrictions_requests.get_delivery_restrictions_request_by_release_id(1, session=mock_session) assert response is None def test_upsert_delivery_restriction_request_creates_new_record(mock_session): """Test that a new delivery restrictions request is created when none exists.""" mock_session.query.return_value.filter_by.return_value.first.return_value = None mock_session.add = MagicMock() mock_session.commit = MagicMock() response = delivery_restrictions_requests.upsert_delivery_restrictions_request( DELIVERY_RESTRICTIONS_REQUEST_DATA.copy(), session=mock_session ) assert response.status == 200 assert response.message['release_id'] == DELIVERY_RESTRICTIONS_REQUEST_DATA['release_id'] assert response.message['delivery_requests'] == DELIVERY_RESTRICTIONS_REQUEST_DATA['delivery_requests'] mock_session.add.assert_called_once() mock_session.commit.assert_called_once() # Ensure that the session flush is called during upsert def test_upsert_delivery_restriction_request_existing_record(mock_session, mock_delivery_restrictions_request): """Test that upsert updates the existing delivery restrictions request instead of creating a new one.""" mock_session.query.return_value.filter_by.return_value.first.return_value = mock_delivery_restrictions_request new_data = DELIVERY_RESTRICTIONS_REQUEST_DATA.copy() new_data['delivery_requests'] = 'New instructions' response = delivery_restrictions_requests.upsert_delivery_restrictions_request( new_data, session=mock_session ) assert response.status == 200 assert response.message['release_id'] == new_data['release_id'] assert response.message['delivery_requests'] == new_data['delivery_requests'] mock_delivery_restrictions_request.update.assert_called_once_with(**new_data) mock_session.add.assert_not_called() mock_session.commit.assert_called_once() def test_delete_delivery_restriction_request_successful(mock_session): """Test deleting a delivery restrictions request successfully.""" mock_session.query.return_value.filter_by.return_value.delete.return_value = 1 response = delivery_restrictions_requests.delete_delivery_restriction_request( 1, session=mock_session ) assert response.message == {} mock_session.query.assert_called_once_with(delivery_restrictions_requests.DeliveryRestrictionsRequests) mock_session.query.return_value.filter_by.assert_called_once_with(release_id=1) mock_session.query.return_value.filter_by.return_value.delete.assert_called_once() mock_session.commit.assert_called_once() def test_delete_delivery_restriction_request_not_found(mock_session): """Test deleting a delivery restrictions request when it does not exist.""" mock_session.query.return_value.filter_by.return_value.delete.return_value = 0 response = delivery_restrictions_requests.delete_delivery_restriction_request( 1, session=mock_session ) assert response.status == 203 assert response.message == {} mock_session.query.assert_called_once_with(delivery_restrictions_requests.DeliveryRestrictionsRequests) mock_session.query.return_value.filter_by.assert_called_once_with(release_id=1) mock_session.query.return_value.filter_by.return_value.delete.assert_called_once()