"""Tests for post asset logic layer.""" import flexmock from oto import response import pytest from assets.constants import asset_legacy from assets.logic.legacy import asset_received from assets.models.legacy import asset_received_destination_details from assets.models.legacy import asset_received_queue from assets.models.legacy import asset_type @pytest.fixture def correct_direct_delivery_data(): """Valid direct delivery data.""" return { 'asset_name': 'TIF', 'import_asset_id': 1, 'uploaded_asset_filename': 'some_prefix/filename.tif', 'upc': 54321, 'track_unique_id': 12321, 'destination_name': None, 'job_type': asset_legacy.IMPORT_TYPE_UPLOAD, } @pytest.fixture def asset_type_mock(): """Mock for AssetType model.""" return response.Response({'id': 121}) @pytest.fixture def asset_received_queue_mock(): """Mock for AssetReceivedQueue model.""" return response.Response({'id': 321}) @pytest.fixture def asset_received_destination_mock(): """Mock for AssetReceivedDestination model.""" return response.Response({'id': 321}) def test_create_direct_delivery_items_success( correct_direct_delivery_data, asset_type_mock, asset_received_queue_mock, asset_received_destination_mock): """Test for successful creation of direct_delivery items.""" mocks = { 'asset_type_mock': asset_type_mock, 'asset_received_queue_mock': asset_received_queue_mock, 'asset_received_destination_mock': asset_received_destination_mock } (flexmock(asset_type) .should_receive('get_asset_type_by_name') .with_args('TIF') .and_return(mocks['asset_type_mock'])) filename = correct_direct_delivery_data['uploaded_asset_filename'] (flexmock(asset_received_queue) .should_receive('create_asset_received_queue') .with_args( asset_type_id=asset_type_mock.message['id'], priority=1, import_asset_id=correct_direct_delivery_data['import_asset_id'], uploaded_asset_filename=filename, job_type=correct_direct_delivery_data['job_type']) .and_return(mocks['asset_received_queue_mock'])) (flexmock(asset_received_destination_details) .should_receive('create_destination_detail') .with_args( asset_received_queue_id=asset_received_destination_mock.message['id'], upc=correct_direct_delivery_data['upc'], track_id=correct_direct_delivery_data['track_unique_id'], name=None) .and_return(mocks['asset_received_destination_mock'])) result = asset_received.create_direct_delivery_items( **correct_direct_delivery_data) assert result @pytest.mark.parametrize('failure_mock', [ 'asset_type_mock', 'asset_received_queue_mock', 'asset_received_destination_mock' ]) def test_create_direct_delivery_items_failure( correct_direct_delivery_data, failure_mock, asset_type_mock, asset_received_queue_mock, asset_received_destination_mock): """Test for one of model methods failure.""" mocks = { 'asset_type_mock': asset_type_mock, 'asset_received_queue_mock': asset_received_queue_mock, 'asset_received_destination_mock': asset_received_destination_mock } errors_response = response.create_fatal_response( '%s_fatal_response' % failure_mock) mocks[failure_mock] = errors_response (flexmock(asset_type) .should_receive('get_asset_type_by_name') .and_return(mocks['asset_type_mock'])) (flexmock(asset_received_queue) .should_receive('create_asset_received_queue') .and_return(mocks['asset_received_queue_mock'])) (flexmock(asset_received_destination_details) .should_receive('create_destination_detail') .and_return(mocks['asset_received_destination_mock'])) result = asset_received.create_direct_delivery_items( **correct_direct_delivery_data) assert not result assert result.status == 500