"""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 import_asset as import_asset_logic from assets.models.legacy import import_asset from assets.models.legacy import import_asset_detail @pytest.fixture def correct_import_assets_data(): """Correct data for create_import_asset_items call.""" return { 'full_user_id': 'alw:123', 'filename': 'filename.tif', 'asset_type': 'TIF', 'upc': 54321, 'track_unique_id': 12321, 'import_type': asset_legacy.IMPORT_TYPE_UPLOAD, } @pytest.fixture def create_import_asset_batch_mock(): """Mock for ImportAssetBatch model.""" return response.Response({ 'id': 1, 'vendor_contact_id': 123, 'ip_address': 0, 'import_type': 'upload' }) @pytest.fixture def create_import_asset_mock(): """Mock for ImportAsset model.""" return response.Response({ 'id': 1, 'import_asset_batch_id': 1, 'foldername': 'TEST-orcd-raw-assets', 'filename': 'filename.tif', 'asset_type': 'image', 'status': 'new' }) @pytest.fixture def create_import_asset_detail_mock(): """Mock for ImportAssetDetails model.""" return response.Response({ 'import_asset_id': 1, 'upc': 54321, 'unique_track_id': 12321 }) @pytest.mark.parametrize('import_asset_batch_body', [ None, {'id': 12345} ]) def test_create_import_asset_success( correct_import_assets_data, create_import_asset_batch_mock, create_import_asset_mock, create_import_asset_detail_mock, import_asset_batch_body): """Test for successful call of create_import_asset_items.""" mocks = { 'import_asset_batch_mock': create_import_asset_batch_mock, 'import_asset_mock': create_import_asset_mock, 'import_asset_detail_mock': create_import_asset_detail_mock } correct_import_assets_data['import_asset_batch_body'] =\ import_asset_batch_body if import_asset_batch_body: batch_times = 0 create_import_asset_mock.message['import_asset_batch_id'] = 12345 else: batch_times = 1 (flexmock(import_asset_logic) .should_receive('create_import_asset_batch') .with_args( full_user_id=correct_import_assets_data['full_user_id'], import_type=correct_import_assets_data['import_type']) .and_return(mocks['import_asset_batch_mock']) .times(batch_times)) (flexmock(import_asset) .should_receive('create_import_asset') .with_args( create_import_asset_mock.message['import_asset_batch_id'], 'test-orcd-raw-assets', correct_import_assets_data['filename'], correct_import_assets_data['asset_type']) .and_return(mocks['import_asset_mock'])) (flexmock(import_asset_detail) .should_receive('create_import_asset_detail') .with_args( create_import_asset_mock.message['id'], correct_import_assets_data['upc'], correct_import_assets_data['track_unique_id']) .and_return(mocks['import_asset_detail_mock'])) result = import_asset_logic.create_import_asset_items( **correct_import_assets_data) assert result assert result.message == {'import_asset_id': 1} @pytest.mark.parametrize('failure_mock', [ 'import_asset_batch_mock', 'import_asset_mock', 'import_asset_detail_mock' ]) def test_create_import_asset_items_failure( failure_mock, correct_import_assets_data, create_import_asset_batch_mock, create_import_asset_mock, create_import_asset_detail_mock): """Test for one of model methods failure.""" errors_response = response.create_fatal_response( '%s_fatal_response' % failure_mock) mocks = { 'import_asset_batch_mock': create_import_asset_batch_mock, 'import_asset_mock': create_import_asset_mock, 'import_asset_detail_mock': create_import_asset_detail_mock } mocks[failure_mock] = errors_response (flexmock(import_asset_logic) .should_receive('create_import_asset_batch') .and_return(mocks['import_asset_batch_mock'])) (flexmock(import_asset) .should_receive('create_import_asset') .and_return(mocks['import_asset_mock'])) (flexmock(import_asset_detail) .should_receive('create_import_asset_detail') .and_return(mocks['import_asset_detail_mock'])) result = import_asset_logic.create_import_asset_items( **correct_import_assets_data) assert result.status == 500 assert result.errors['message'] == '%s_fatal_response' % failure_mock