"""Tests for contract_reserves_import.""" from unittest.mock import MagicMock from unittest.mock import patch from json_contract_file_import.contract_reserves_import import \ _contract_reserves_exists from json_contract_file_import.contract_reserves_import import _get_reserve_data from json_contract_file_import.contract_reserves_import import \ _import_existing_contract_reserves from json_contract_file_import.contract_reserves_import import \ _import_new_contract_reserves from json_contract_file_import.contract_reserves_import import import_contract_reserves from json_contract_file_import.entity_import_result import EntityImportResult from tests.unit.utils import assert_import_result success_import_result = EntityImportResult( EntityImportResult.CONTRACT_RESERVE, 200, True, additional_info='Some additional info.' ) @patch( 'json_contract_file_import.contract_reserves_import' '.ows_royalties.create_contract_reserve' ) def test__import_new_contract_reserves_success(mock_create_contract_reserve): """Test successful import new contract reserves.""" mock_response = MagicMock() mock_response.status_code = 201 mock_response.text = """{ "some_info": 123 }""" mock_create_contract_reserve.return_value = mock_response response = _import_new_contract_reserves(1, { 'reserve_installments_in_months': 1, 'reserve_rate': 20, 'reserve_release_offset_in_months': 3, 'reserve_release_schedule': [ 1 ] }) expected_import_result = EntityImportResult( EntityImportResult.CONTRACT_RESERVE, 'contract:1', True, additional_info=mock_response.text ) mock_create_contract_reserve.assert_called_once_with(1, { 'reserve_rate': 20, 'reserve_release_offset_in_months': 3, 'installments_in_months': 1, 'release_schedule': [1] }) assert_import_result(response, expected_import_result) @patch( 'json_contract_file_import.contract_reserves_import' '.ows_royalties.create_contract_reserve' ) def test__import_new_contract_reserves_error(mock_create_contract_reserve): """Test failed import new contract reserves.""" mock_response = MagicMock() mock_response.status_code = 400 mock_response.text = """{ "code": "error", "message": "Did not find contract: 1" }""" mock_create_contract_reserve.return_value = mock_response response = _import_new_contract_reserves(1, { 'reserve_installments_in_months': 1, 'reserve_rate': 20, 'reserve_release_offset_in_months': 3, 'reserve_release_schedule': [ 1 ] }) expected_import_result = EntityImportResult( EntityImportResult.CONTRACT_RESERVE, 'contract:1', False, '400 ' + mock_response.text) assert_import_result(response, expected_import_result) @patch( 'json_contract_file_import.contract_reserves_import' '.ows_royalties.update_contract_reserve' ) def test__import_existing_contract_reserves_success(mock_update_contract_reserve): """Test successful updating contract reserves.""" mock_response = MagicMock() mock_response.status_code = 201 mock_response.text = """{ "some_info": 123 }""" mock_update_contract_reserve.return_value = mock_response response = _import_existing_contract_reserves(1, { 'reserve_installments_in_months': 1, 'reserve_rate': 20, 'reserve_release_offset_in_months': 3, 'reserve_release_schedule': [ 1 ] }) expected_import_result = EntityImportResult( EntityImportResult.CONTRACT_RESERVE, 'contract:1', True, additional_info=mock_response.text ) mock_update_contract_reserve.assert_called_once_with(1, { 'reserve_rate': 20, 'reserve_release_offset_in_months': 3, 'installments_in_months': 1, 'release_schedule': [1] }) assert_import_result(response, expected_import_result) @patch( 'json_contract_file_import.contract_reserves_import' '._contract_reserves_exists' ) @patch( 'json_contract_file_import.contract_reserves_import' '._import_existing_contract_reserves' ) def test_import_contract_reserves_existing_contract_reserves( mock_import_existing_contract_reserves, mock_contract_reserves_exists ): """Test import existing contract reserve.""" mock_contract_reserves_exists.return_value = True mock_import_existing_contract_reserves.return_value = success_import_result contract_reserves_data = {} import_result = import_contract_reserves(100, contract_reserves_data) assert_import_result(import_result, success_import_result) mock_contract_reserves_exists.assert_called_once_with(100) @patch( 'json_contract_file_import.contract_reserves_import' '._contract_reserves_exists' ) @patch( 'json_contract_file_import.contract_reserves_import' '._import_new_contract_reserves' ) def test_import_contract_reserves_new_contract_reserves( mock_import_new_contract_reserves, mock_contract_reserves_exists ): """Test import new contract reserve.""" mock_contract_reserves_exists.return_value = False mock_import_new_contract_reserves.return_value = success_import_result contract_reserves_data = {} import_result = import_contract_reserves(100, contract_reserves_data) assert_import_result(import_result, success_import_result) mock_contract_reserves_exists.assert_called_once_with(100) @patch( 'json_contract_file_import.contract_reserves_import' '.failed_response' ) @patch( 'json_contract_file_import.contract_reserves_import' '.ows_royalties.get_contract_reserves' ) def test__contract_reserves_exists_failed_response( mock_get_contract_reserve, mock_failed_response, ): """Test contract reserves exists when failed API response.""" mock_get_contract_reserve.return_value = MagicMock() mock_failed_response.return_value = True exists = _contract_reserves_exists(100) assert not exists mock_get_contract_reserve.assert_called_once_with(100) @patch( 'json_contract_file_import.contract_reserves_import' '.failed_response' ) @patch( 'json_contract_file_import.contract_reserves_import' '.ows_royalties.get_contract_reserves' ) def test__contract_reserves_exists_response_with_data( mock_get_contract_reserve, mock_failed_response, ): """Test contract reserves exists when API response has data.""" mock_get_contract_reserve.return_value.json.return_value = { 'contract_id': 100 } mock_failed_response.return_value = False exists = _contract_reserves_exists(100) assert exists mock_get_contract_reserve.assert_called_once_with(100) @patch( 'json_contract_file_import.contract_reserves_import' '.failed_response' ) @patch( 'json_contract_file_import.contract_reserves_import' '.ows_royalties.get_contract_reserves' ) def test__contract_reserves_exists_empty_response( mock_get_contract_reserve, mock_failed_response, ): """Test contract reserves exists when API response has no data.""" mock_get_contract_reserve.return_value.json.return_value = {} mock_failed_response.return_value = False exists = _contract_reserves_exists(100) assert not exists mock_get_contract_reserve.assert_called_once_with(100) def test__get_reserve_data(mock_json_contract_file_parsed_with_reserves): """Test get reserve data.""" reserve_data = _get_reserve_data({ 'reserve_installments_in_months': 1, 'reserve_rate': 20, 'reserve_release_offset_in_months': 3, 'reserve_release_schedule': [ 1 ] } ) assert reserve_data == { 'reserve_rate': 20, 'reserve_release_offset_in_months': 3, 'installments_in_months': 1, 'release_schedule': [1] } def test__get_reserve_data_empty_release_schedule( mock_json_contract_file_parsed_with_reserves ): """Test get reserve data when no release schedule is passed.""" reserve_data = _get_reserve_data({ 'reserve_installments_in_months': 1, 'reserve_rate': 20, 'reserve_release_offset_in_months': 3, 'reserve_release_schedule': [] }) assert reserve_data == { 'reserve_rate': 20, 'reserve_release_offset_in_months': 3, 'installments_in_months': 1, } def test__get_reserve_data_null_release_schedule( mock_json_contract_file_parsed_with_reserves ): """Test get reserve data when no null release schedule is passed.""" reserve_data = _get_reserve_data({ 'reserve_installments_in_months': 1, 'reserve_rate': 20, 'reserve_release_offset_in_months': 3, 'reserve_release_schedule': None }) assert reserve_data == { 'reserve_rate': 20, 'reserve_release_offset_in_months': 3, 'installments_in_months': 1, }