"""Test for manage asset service data layer.""" import json from unittest import mock import flexmock import pytest import requests from assets import config from assets.constants import error from assets.constants import service from assets.models.legacy import manage_asset @pytest.fixture def delete_asset_input_data(): """Valid input data for delete_assets call.""" return { 'asset_filenames': ['1233123.tif'], 'asset_type_id': 3. } @pytest.fixture def delete_assets_input_request_body(): """Valid input data for delete_assets call.""" return { 'files': ['1233123.tif'], 'asset_type_id': 3, 'physical_location_id': config.SERVER_LOCATION_AVL } @pytest.mark.parametrize( ('asset_remove_names, asset_type_id, returned_status,' 'expected_status, expected_message'), [ (['1233123.tif'], 3, 404, 404, error.ERROR_ASSET_NOT_FOUND), (['1233123.tif'], 3, 400, 500, None)]) def test_delete_assets_failure( monkeypatch, asset_remove_names, asset_type_id, returned_status, expected_status, expected_message): """Test for failure call delete_assets.""" mock_response = mock.Mock() mock_response.status_code = returned_status mock_response.json.return_value = {'code': 1, } monkeypatch.setattr( requests, 'post', mock.MagicMock(return_value=mock_response)) response = manage_asset.delete_assets(asset_remove_names, asset_type_id) assert response.status == expected_status assert response.errors.get('message') == expected_message def test_delete_assets_exception(monkeypatch, delete_asset_input_data): """Test for failure call delete_assets with exception.""" error_message = 'error' monkeypatch.setattr( requests, 'post', mock.MagicMock(side_effect=Exception(error_message))) response = manage_asset.delete_assets(**delete_asset_input_data) assert response.status == 500 assert response.errors.get('message') == error_message def test_delete_assets_success(delete_assets_input_request_body): """Test for successful delete_assets call.""" mock_response = mock.Mock() mock_response.status_code = 200 mock_response.json.return_value = {'code': 1} url = service.MANAGE_ASSET_DELETE.format( service_url=config.MANAGE_ASSET_URL) (flexmock(requests) .should_receive('post') .with_args(url, json=json.dumps(delete_assets_input_request_body)) .and_return(mock_response)) response = manage_asset.delete_assets( delete_assets_input_request_body['files'], delete_assets_input_request_body['asset_type_id']) assert response.status == 200 assert response.message == error.SUCCESS_CODE