"""Tests for post asset logic layer.""" import flexmock from oto import response import pytest from assets import config from assets.logic import post_asset from assets.logic.legacy import asset_received from assets.logic.legacy import import_asset from assets.models import asset_upload from assets.models import s3_file @pytest.fixture def correct_post_asset_data(): """Correct data for post_asset call.""" return { 'full_user_id': 'alw:123', 'asset_type': 'TIF', 'upc': 54321, 'track_unique_id': 12321, 'filename': 'filename.tif', 'token': 'aws_s3_token', 'product_id': 12345 } @pytest.fixture def post_assets_mocks(): """Success mocks for post_asset.""" ok_response = response.Response('ok') return { 'ows_product': ok_response, 's3_file': ok_response, 'asset_upload': ok_response, 'asset_upload_update': ok_response, 'import_asset_items': response.Response({'import_asset_id': 1}), 'direct_delivery_items': ok_response } def test_post_asset_success(correct_post_asset_data, post_assets_mocks): """Test for successful post_asset call.""" config.RAW_ASSETS_BUCKET_NAME = 'test-orcd-raw-assets' (flexmock(s3_file) .should_receive('check_s3_file_exists') .with_args('test-orcd-raw-assets', correct_post_asset_data['filename']) .and_return(post_assets_mocks['s3_file'])) (flexmock(asset_upload) .should_receive('get_asset_upload') .with_args( 'filename', correct_post_asset_data['token'], correct_post_asset_data['full_user_id']) .and_return(post_assets_mocks['asset_upload'])) (flexmock(asset_upload) .should_receive('update_asset_upload') .with_args( 'filename', correct_post_asset_data['asset_type'], correct_post_asset_data['upc'], correct_post_asset_data['track_unique_id'], correct_post_asset_data['product_id'], correct_post_asset_data['token'], correct_post_asset_data['full_user_id'],) .and_return(post_assets_mocks['asset_upload_update'])) (flexmock(import_asset) .should_receive('create_import_asset_items') .with_args( correct_post_asset_data['full_user_id'], correct_post_asset_data['filename'], correct_post_asset_data['asset_type'], correct_post_asset_data['upc'], correct_post_asset_data['track_unique_id']) .and_return(post_assets_mocks['import_asset_items'])) (flexmock(asset_received) .should_receive('create_direct_delivery_items') .with_args( correct_post_asset_data['asset_type'], 1, 's3://test-orcd-raw-assets/filename.tif', correct_post_asset_data['upc'], correct_post_asset_data['track_unique_id'], correct_post_asset_data['filename']) .and_return(post_assets_mocks['direct_delivery_items'])) result = post_asset.post_asset(**correct_post_asset_data) assert result @pytest.mark.parametrize('failing_mock', [ 's3_file', 'asset_upload', 'asset_upload_update', 'import_asset_items', 'direct_delivery_items' ]) def test_post_asset_failure( correct_post_asset_data, post_assets_mocks, failing_mock): """Test for successful post_asset call.""" post_assets_mocks[failing_mock] = response.create_fatal_response( message='%s_failure' % failing_mock ) (flexmock(s3_file) .should_receive('check_s3_file_exists') .and_return(post_assets_mocks['s3_file'])) (flexmock(asset_upload) .should_receive('get_asset_upload') .and_return(post_assets_mocks['asset_upload'])) (flexmock(asset_upload) .should_receive('update_asset_upload') .and_return(post_assets_mocks['asset_upload_update'])) (flexmock(import_asset) .should_receive('create_import_asset_items') .and_return(post_assets_mocks['import_asset_items'])) (flexmock(asset_received) .should_receive('create_direct_delivery_items') .and_return(post_assets_mocks['direct_delivery_items'])) result = post_asset.post_asset(**correct_post_asset_data) assert not result assert result.errors['message'] == '%s_failure' % failing_mock