"""Test handle_artwork handler.""" import json from unittest.mock import MagicMock from unittest.mock import patch from lambdacommon.graphql.graphql import GraphQLError import pytest from src.index import construct_s3_metadata from src.index import handler def test_construct_s3_metadata(loaded_json): """Test s3 metadata formatting.""" output = construct_s3_metadata( loaded_json.product, loaded_json.product.artwork ) assert output['asset_type'] == 'JPG' assert output['product_id'] == str(loaded_json.product.product_id) assert output['upc'] == loaded_json.product.upc assert output['track_unique_id'] == '0' assert output['original_filename'] == loaded_json.product.artwork.filename assert output['is_correction'] == '0' @patch('src.index.config.get_current_logger') @patch('src.index.create_asset_token') @patch('src.index.copy_asset') @patch('src.index.graphql_gateway.execute') @patch('src.index.graphql_gateway') def test_handler( mock_graphql_gateway, mock_graphql_execute, mock_copy_asset, mock_create_asset_token, mock_logger, context_json_artwork): """Test handler.""" filename = '1234-5678-9101' extension = '.jpg' mock_create_asset_token.return_value = { 'filename': filename, 'bucket': 'bucket', 'credentials': { 'token': 'token' } } output_context = handler(json.loads(context_json_artwork), None) ows_assets_filename = ( output_context['product']['artwork']['ows_assets_filename'] ) mock_create_asset_token.assert_called_once_with( mock_graphql_gateway, 'image') mock_copy_asset.assert_called_once() assert ows_assets_filename == filename + extension @patch('src.index.config.get_current_logger') @patch('src.index.create_asset_token') @patch('src.index.copy_asset') @patch('src.index.graphql_gateway.execute') @patch('src.index.graphql_gateway') def test_handler_v2( mock_graphql_gateway, mock_graphql_execute, mock_copy_asset, mock_create_asset_token, mock_logger, context_json_artwork): """Test handler.""" filename = '1234-5678-9101' extension = '.jpg' mock_create_asset_token.return_value = { 'filename': filename, 'bucket': 'bucket', 'credentials': { 'token': 'token' } } output_context = handler(json.loads(context_json_artwork), None) ows_assets_filename = ( output_context['product']['artwork']['ows_assets_filename'] ) mock_create_asset_token.assert_called_once_with( mock_graphql_gateway, 'image') mock_copy_asset.assert_called_once() assert ows_assets_filename == filename + extension @patch('src.index.config.get_current_logger') @patch('src.index.create_asset_token') @patch('src.index.copy_asset') @patch('src.index.graphql_gateway.execute') @patch('src.index.graphql_gateway') def test_handler_create_token_fails( mock_graphql_gateway, mock_graphql_execute, mock_copy_asset, mock_create_asset_token, mock_logger, context_json_artwork): """Test failure handler.""" mock_log_error = MagicMock() mock_logger.return_value = mock_log_error mock_create_asset_token.side_effect = GraphQLError( [ { 'message': 'Mock GraphQL Error' } ]) with pytest.raises(Exception): handler(json.loads(context_json_artwork), None) mock_log_error.error.assert_called_once() @patch('src.index.config.get_current_logger') @patch('src.index.create_asset_token') @patch('src.index.copy_asset') @patch('src.index.graphql_gateway.execute') @patch('src.index.graphql_gateway') def test_handler_copy_asset_fails( mock_graphql_gateway, mock_graphql_execute, mock_copy_asset, mock_create_asset_token, mock_logger, context_json_artwork): """Test handler.""" filename = '1234-5678-9101' mock_create_asset_token.return_value = { 'filename': filename, 'bucket': 'bucket', 'credentials': { 'token': 'token' } } mock_log_error = MagicMock() mock_logger.return_value = mock_log_error mock_copy_asset.side_effect = Exception() with pytest.raises(Exception): handler(json.loads(context_json_artwork), None) mock_log_error.error.assert_called_once()