def test_ipn_is_transaction_duplicated(txn_id, payment_status, expected): request.form = {'payment_status': 'Completed', 'txn_id': '12345'} rh = RHPaypalIPN() rh.registration = MagicMock() rh.registration.transaction = None assert not rh._is_transaction_duplicated() transaction = PaymentTransaction(provider='paypal', data={'payment_status': payment_status, 'txn_id': txn_id}) rh.registration.transaction = transaction assert rh._is_transaction_duplicated() == expected
def test_ipn_is_transaction_duplicated(txn_id, payment_status, expected): request.form = {'payment_status': 'Completed', 'txn_id': '12345'} rh = RHPaypalIPN() rh.registration = MagicMock() rh.registration.transaction = None assert not rh._is_transaction_duplicated() transaction = PaymentTransaction(provider='paypal', data={ 'payment_status': payment_status, 'txn_id': txn_id }) rh.registration.transaction = transaction assert rh._is_transaction_duplicated() == expected
def test_ipn_process(mocker, fail): rt = mocker.patch('indico_payment_paypal.controllers.register_transaction') post = mocker.patch('indico_payment_paypal.controllers.requests.post') mocker.patch( 'indico_payment_paypal.controllers.notify_amount_inconsistency') post.return_value.text = 'INVALID' if fail == 'verify' else 'VERIFIED' rh = RHPaypalIPN() rh._is_transaction_duplicated = lambda: fail == 'dup_txn' rh.event = MagicMock(id=1) rh.registration = MagicMock() rh.registration.getTotal.return_value = 10.00 payment_status = { 'fail': 'Failed', 'refund': 'Refunded', 'status': 'Foobar' }.get(fail, 'Completed') amount = '-10.00' if fail == 'negative' else '10.00' request.view_args = {'confId': rh.event.id} request.args = {'registrantId': '1'} request.form = { 'payment_status': payment_status, 'txn_id': '12345', 'mc_gross': amount, 'mc_currency': 'EUR', 'business': '*****@*****.**' } with PaypalPaymentPlugin.instance.plugin_context(): rh._process() assert post.called assert rt.called == (fail is None)
def test_ipn_process(mocker, fail): rt = mocker.patch('indico_payment_paypal.controllers.register_transaction') post = mocker.patch('indico_payment_paypal.controllers.requests.post') mocker.patch('indico_payment_paypal.controllers.notify_amount_inconsistency') post.return_value.text = 'INVALID' if fail == 'verify' else 'VERIFIED' rh = RHPaypalIPN() rh._is_transaction_duplicated = lambda: fail == 'dup_txn' rh.event = MagicMock(id=1) rh.registration = MagicMock() rh.registration.getTotal.return_value = 10.00 payment_status = {'fail': 'Failed', 'refund': 'Refunded', 'status': 'Foobar'}.get(fail, 'Completed') amount = '-10.00' if fail == 'negative' else '10.00' request.view_args = {'confId': rh.event.id} request.args = {'registrantId': '1'} request.form = {'payment_status': payment_status, 'txn_id': '12345', 'mc_gross': amount, 'mc_currency': 'EUR', 'business': '*****@*****.**'} with PaypalPaymentPlugin.instance.plugin_context(): rh._process() assert post.called assert rt.called == (fail is None)