"""Update PaymentGroupPayment State logic tests.""" from unittest.mock import patch from abacus_state.constants.constants import PAYMENT_GROUP_PAYMENT_ACTION_NAMES from abacus_state.logic import payment_group_payment_state as logic from tests.utils.factories import AbacusStateFactory @patch('abacus_state.logic.payment_group_payment_state._are_previous_actions_completed') @patch('abacus_state.logic.payment_group_payment_state.AbacusState') def test_update_payment_group_payment_state_success( mock_model, mock_validation, request_engine ): """Test update_payment_group_payment_state method.""" actions = PAYMENT_GROUP_PAYMENT_ACTION_NAMES abacus_states = [ AbacusStateFactory.create( action_name=action, action_status='complete' if index < len(actions) - 1 else 'init', ) for index, action in enumerate(actions) ] payment_group_payment_id = abacus_states[0].parent_table_id mock_put_request = {'action_status': 'complete', 'message': 'testing'} request_engine['ows-royalties'].add_spec( 'GET', f'/payment-group-payment/{payment_group_payment_id}/', status=200, response={'items': []}, ) mock_validation.return_value = True mock_model.get_action_status_list.return_value = abacus_states res = logic.update_payment_group_payment_state( abacus_states[len(actions) - 1], **mock_put_request ) assert res.status == 200 mock_model.commit_changes.assert_called_once() @patch('abacus_state.logic.payment_group_payment_state._are_previous_actions_completed') @patch('abacus_state.logic.payment_group_payment_state.AbacusState') def test_update_payment_group_payment_state_error( mock_model, mock_validation, request_engine ): """Test update_payment_group_payment_state method. when earlier actions are not completed. """ abacus_states = [ AbacusStateFactory.create(action_name=action, action_status='init') for index, action in enumerate(PAYMENT_GROUP_PAYMENT_ACTION_NAMES) ] mock_put_request = {'action_status': 'running', 'message': 'testing'} mock_validation.return_value = False mock_model.get_action_status_list.return_value = abacus_states payment_group_payment_id = abacus_states[0].parent_table_id request_engine['ows-royalties'].add_spec( 'GET', f'/payment-group-payment/{payment_group_payment_id}/', status=200, response={'items': []}, ) res = logic.update_payment_group_payment_state(abacus_states[3], **mock_put_request) assert res.status == 400 mock_model.commit_changes.assert_not_called() def test_is_previous_actions_completed(): """Test _is_previous_actions_completed method. when earlier actions are not completed """ actions = dict() for index, action in enumerate(PAYMENT_GROUP_PAYMENT_ACTION_NAMES): actions.update({action: 'init'}) action_name = PAYMENT_GROUP_PAYMENT_ACTION_NAMES.SEND_PAYMENTS res = logic._are_previous_actions_completed(actions, action_name) assert res is False def test_is_previous_actions_completed_success(): """Test _is_previous_actions_completed method for payment_group_payment. when earlier actions are completed """ actions = dict() for index, action in enumerate(PAYMENT_GROUP_PAYMENT_ACTION_NAMES): actions.update({action: 'complete'}) action_name = PAYMENT_GROUP_PAYMENT_ACTION_NAMES.SEND_PAYMENTS res = logic._are_previous_actions_completed(actions, action_name) assert res is True def test_is_previous_actions_completed_failure(): """Test _is_previous_actions_completed method for payment_group_payment. when earlier actions are completed """ actions = {action: 'init' for action in PAYMENT_GROUP_PAYMENT_ACTION_NAMES} for index, action in enumerate(PAYMENT_GROUP_PAYMENT_ACTION_NAMES): if action == PAYMENT_GROUP_PAYMENT_ACTION_NAMES.CALCULATE_PAYMENTS: break actions.update({action: 'complete'}) action_name = PAYMENT_GROUP_PAYMENT_ACTION_NAMES.GENERATE_PAYMENTS res = logic._are_previous_actions_completed(actions, action_name) assert res is False