"""Test ows-payment requests.""" from unittest.mock import MagicMock, patch from owsresponse import response from owsresponse.adaptors.flask import flaskify from payments_generate.ows_payment import _get_last_payment from payments_generate.ows_payment import bulk_create_payment_payees from payments_generate.ows_payment import get_payment_group_payment from payments_generate.ows_payment import last_payment_per_payee SERVICE = 'ows-payment' @patch('payments_generate.ows_payment.post') @patch('payments_generate.ows_payment.raise_payment_error') def test_bulk_create_payment_payees_success(mock_raise_service_error, mock_post): """Test successfully creating payment_group_payment_payees.""" payment_group_payment_id = 11 payment_payees = [ { 'currency_code': 'USD', 'current_balance': '1000.00', 'last_payment': '500.00', 'payee_id': 123 }, { 'currency_code': 'CAD', 'current_balance': '300.00', 'last_payment': '0.00', 'payee_id': 321 }, ] mock_response = MagicMock() mock_response.status_code = 201 mock_response.json.return_value = payment_payees mock_post.return_value = mock_response res = bulk_create_payment_payees(payment_group_payment_id, payment_payees) assert res is None mock_post.assert_called_once_with( 'ows-payment', f'/payment-group-payment/{payment_group_payment_id}/payees/', body=payment_payees ) mock_raise_service_error.assert_not_called() @patch('payments_generate.ows_payment.post') @patch('payments_generate.ows_payment.raise_payment_error') def test_bulk_create_payment_payees_failure(mock_raise_service_error, mock_post): """Test failure bulk creating payment_group_payment_payees.""" payment_group_payment_id = 11 payment_payees = [ { 'currency_code': 'USD', 'current_balance': '1000.00', 'last_payment': '500.00', 'payee_id': 123 }, { 'currency_code': 'CAD', 'current_balance': '300.00', 'last_payment': '0.00', 'payee_id': 321 }, ] mock_post.return_value = flaskify(response.create_error_response( code='error', message='YA TOO BULKY', status=400 )) res = bulk_create_payment_payees(payment_group_payment_id, payment_payees) assert res is None mock_raise_service_error.assert_called_once_with( f'ERROR from POST /payment-group-payment/{payment_group_payment_id}/payees/', payment_payees=payment_payees ) @patch('payments_generate.ows_payment.get') @patch('payments_generate.ows_payment.raise_payment_error') def test_get_payment_group_payment_success(mock_raise_service_error, mock_get): """Test successfully getting payment_group_payment detail.""" payment_group_payment_id = 22 mock_json = { 'payment_group_payment_id': payment_group_payment_id, 'payment_group_id': 1 } mock_response = MagicMock() mock_response.status_code = 200 mock_response.json.return_value = mock_json mock_get.return_value = mock_response res = get_payment_group_payment(payment_group_payment_id) assert res['payment_group_payment_id'] == payment_group_payment_id assert res['payment_group_id'] mock_get.assert_called_once_with( 'ows-payment', f'/payment-group-payment/{payment_group_payment_id}/' ) mock_raise_service_error.assert_not_called() @patch('payments_generate.ows_payment.get') @patch('payments_generate.ows_payment.raise_payment_error') def test_get_payment_group_payment_failure(mock_raise_service_error, mock_get): """Test failure getting payment_group_payment detail.""" payment_group_payment_id = 22 mock_get.return_value = flaskify(response.create_error_response( code='error', message='THAT AINT NO VALID ID', status=400 )) res = get_payment_group_payment(payment_group_payment_id) assert res is None mock_raise_service_error.assert_called_once_with( f'ERROR in GET /payment-group-payment/{payment_group_payment_id}/' ) @patch('payments_generate.ows_payment.get') @patch('payments_generate.ows_payment.raise_payment_error') def test_get_last_payment_request_success(mock_raise_service_error, mock_get): """Test successfully getting last posted payment for a given payee.""" payee_id = 123 mock_json = {'payee_id': payee_id, 'current_balance': '800.50'} mock_response = MagicMock() mock_response.status_code = 200 mock_response.json.return_value = mock_json mock_get.return_value = mock_response res = _get_last_payment(payee_id) assert res == '800.50' mock_get.assert_called_once_with( 'ows-payment', f'/payment-group-payment-payee/last-payment/{payee_id}/' ) mock_raise_service_error.assert_not_called() @patch('payments_generate.ows_payment.get') @patch('payments_generate.ows_payment.raise_payment_error') def test_get_last_payment_request_failure(mock_raise_service_error, mock_get): """Test failure getting last posted payment for a given payee.""" payee_id = 123 mock_response = response.create_error_response( code='error', message='NOT A PAYEE DUDE', status=400 ) mock_get.return_value = flaskify(mock_response) res = _get_last_payment(payee_id) assert res is None mock_raise_service_error.assert_called_once_with( f'ERROR in GET /payment-group-payment-payee/last-payment/{payee_id}/' ) @patch('payments_generate.ows_payment._get_last_payment') def test_last_payment_per_payee(mock_get_request): """Test getting last payment amounts for a list of payees.""" current_balance = '0.00' mock_get_request.return_value = current_balance payees = [{'payee_id': 123}, {'payee_id': 456}] result = last_payment_per_payee(payees) assert len(result.items()) == len(payees) assert result[123] == current_balance assert result[456] == current_balance