"""Tests for ows-abacus-state requests.""" from unittest.mock import patch import httpx from owsclient.test import OwsClientMock import config from sync_contract.ows_abacus_state import ( SERVICE, get_contract_states, update_contract_state, ) @patch('sync_contract.ows_abacus_state.app_logger') @patch('sync_contract.ows_abacus_state.raise_service_error') def test_get_contract_states_success( mock_raise_error, mock_logger, mock_contract_states, ows_client_mock: OwsClientMock ): """Test successfully getting contract abacus states.""" contract_id = 123 request_url = f'/abacus-state/contract/{contract_id}/' ows_client_mock.get(SERVICE, request_url).mock( return_value=httpx.Response(200, json=mock_contract_states) ) result = get_contract_states(contract_id) assert result == mock_contract_states mock_logger.info.assert_called_once_with( config.MESSAGE_GET_CONTRACT_STATES.format(contract_id) ) mock_raise_error.assert_not_called() @patch('sync_contract.ows_abacus_state.app_logger') @patch('sync_contract.ows_abacus_state.raise_service_error') def test_get_contract_states_failure( mock_raise_error, mock_logger, ows_client_mock: OwsClientMock ): """Test successfully getting contract abacus states.""" contract_id = 123 request_url = f'/abacus-state/contract/{contract_id}/' ows_client_mock.get(SERVICE, request_url).mock( return_value=httpx.Response(400, json={'error': 'Error'}) ) result = get_contract_states(contract_id) assert result is None mock_logger.info.assert_called_once_with( config.MESSAGE_GET_CONTRACT_STATES.format(contract_id) ) mock_raise_error.assert_called_once_with( f'ERROR in GET /abacus-state/contract/{contract_id}/', SERVICE ) @patch('sync_contract.ows_abacus_state.app_logger') @patch('sync_contract.ows_abacus_state.raise_service_error') def test_update_contract_status_success( mock_raise_error, mock_logger, mock_contract_states, ows_client_mock: OwsClientMock ): """Test successfully updating contract status.""" abacus_state = mock_contract_states[0] abacus_state.update({'action_status': config.ACTION_STATES.COMPLETE}) abacus_state_id = abacus_state['abacus_state_id'] request_url = f'/abacus-state/{abacus_state_id}/' ows_client_mock.put(SERVICE, request_url).mock( return_value=httpx.Response(200, json=abacus_state) ) result = update_contract_state(abacus_state_id, config.ACTION_STATES.COMPLETE) assert result == abacus_state mock_logger.info.assert_called_once_with( config.MESSAGE_UPDATE_CONTRACT_STATE.format(abacus_state_id) ) mock_raise_error.assert_not_called() @patch('sync_contract.ows_abacus_state.app_logger') @patch('sync_contract.ows_abacus_state.raise_service_error') def test_update_contract_status_error( mock_raise_error, mock_logger, ows_client_mock: OwsClientMock ): """Test error is raised when updating contract status fails.""" abacus_state_id = 1 ows_client_mock.put(SERVICE, f'/abacus-state/{abacus_state_id}/').mock( return_value=httpx.Response(400, json={'error': 'Error'}) ) result = update_contract_state(abacus_state_id, config.ACTION_STATES.COMPLETE) assert result is None mock_logger.info.assert_called_once_with( config.MESSAGE_UPDATE_CONTRACT_STATE.format(abacus_state_id) ) mock_raise_error.assert_called_once_with( f'ERROR in PUT /abacus-state/{abacus_state_id}/', SERVICE )