"""Tests for model-related error handlers.""" from oto import response as oto_response from oto import status from sqlalchemy import exc from sales_goals.constants import error from sales_goals.models import error_handlers def test_integrity_error_handler(): """Assert decorator handles sqlalchemy.exc.IntegrityError.""" @error_handlers.integrity_error_handler(error_code='custom_error_code') def mock_function(): raise exc.IntegrityError( statement='test', params={}, orig=Exception('Some exception')) response = mock_function() assert isinstance(response, oto_response.Response) assert response.status == status.BAD_REQUEST assert response.errors['code'] == 'custom_error_code' def test_sqlalchemy_error_handler(mocker): """Assert decorator handles sqlalchemy.exc.SQLAlchemyError.""" mock_sentry_capture_exception = mocker.patch( 'sales_goals.models.error_handlers.capture_exception') @error_handlers.sqlalchemy_error_handler def mock_function(): raise exc.SQLAlchemyError response = mock_function() assert isinstance(response, oto_response.Response) assert response.status == status.INTERNAL_ERROR assert mock_sentry_capture_exception.called is True def test_integrity_error_handler_duplicate_entry(): """Assert decorator handles duplicate entry IntegrityError.""" @error_handlers.integrity_error_handler(error_code='custom_error_code') def mock_function(): raise exc.IntegrityError( statement='test', params={}, orig=Exception( error.ERROR_MYSQL_DUPLICATE_ENTRY, "Duplicate entry for key 'product_id'")) response = mock_function() assert isinstance(response, oto_response.Response) assert response.status == status.BAD_REQUEST assert response.errors['message'] == error.ERROR_MESSAGE_DUPLICATE_ENTRY