"""Test poll_artwork_asset_status.""" import json from unittest.mock import MagicMock from unittest.mock import patch from common.lambda_exceptions import ArtworkException from common.lambda_exceptions import ArtworkFatalException import pytest from src.index import check_artwork_valid from src.index import handler @patch('src.index.valid_artwork', return_value=True) @patch('src.index.graphql_gateway') def test_check_artwork_valid( mock_graphql_gateway, mock_valid_artwork): """Test check_artwork_valid calls expected graphql function with args.""" product_id = '12345' filename = 'image.jpg' require_v1 = True check_artwork_valid(require_v1, product_id, filename) mock_valid_artwork.assert_called_once_with( mock_graphql_gateway, product_id, require_v1 ) @patch('src.index.valid_artwork', return_value=False) @patch('src.index.graphql_gateway') def test_check_artwork_valid_raises_fatal_exception( mock_graphql_gateway, mock_valid_artwork): """Test check_artwork_valid when asset status is validation_error.""" product_id = '12345' filename = 'image.jpg' require_v1 = True mock_graphql_gateway.execute.return_value = { 'data': { 'assetStatus': { 'status': 'validation_error' } } } with pytest.raises(ArtworkFatalException): check_artwork_valid(require_v1, product_id, filename) mock_valid_artwork.assert_called_once_with( mock_graphql_gateway, product_id, require_v1 ) @patch('src.index.config.get_current_logger') @patch('src.index.check_artwork_valid') @patch('src.index.log_catalog_action') def test_handler( mock_catalog_ingestion_session, mock_check_artwork_valid, mock_logger, context_json_artwork, request): """Test handler.""" handler(json.loads(context_json_artwork), None) mock_check_artwork_valid.assert_called_once() mock_catalog_ingestion_session.assert_called_once() @patch('src.index.config.get_current_logger') @patch('src.index.check_artwork_valid') @patch('src.index.log_catalog_action') def test_handler_non_fatal_error( mock_catalog_ingestion_session, mock_check_artwork_valid, mock_logger, context_json_artwork): """Test handler.""" mock_check_artwork_valid.side_effect = ArtworkException() mock_log_error = MagicMock(name='error') mock_logger.return_value = mock_log_error with pytest.raises(ArtworkException): handler(json.loads(context_json_artwork), None) mock_check_artwork_valid.assert_called_once() mock_log_error.error.assert_not_called() mock_catalog_ingestion_session.assert_not_called() @patch('src.index.config.get_current_logger') @patch('src.index.check_artwork_valid') @patch('src.index.log_catalog_action') def test_handler_fatal_error( mock_catalog_ingestion_session, mock_check_artwork_valid, mock_logger, context_json_artwork): """Test handler.""" mock_check_artwork_valid.side_effect = ArtworkFatalException() mock_log_error = MagicMock(name='error') mock_logger.return_value = mock_log_error with pytest.raises(ArtworkFatalException): handler(json.loads(context_json_artwork), None) mock_check_artwork_valid.assert_called_once() mock_log_error.error.assert_called_once() mock_catalog_ingestion_session.assert_not_called()