def test_ipn_verify_business(formdata, expected, dummy_event): rh = RHPaypalIPN() rh.registration = MagicMock() rh.registration.registration_form.event = dummy_event PaypalPaymentPlugin.event_settings.set(dummy_event, 'business', 'test') request.form = formdata with PaypalPaymentPlugin.instance.plugin_context(): assert rh._verify_business() == 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_verify_amount(mocker, amount, currency, expected): nai = mocker.patch('indico_payment_paypal.controllers.notify_amount_inconsistency') rh = RHPaypalIPN() rh.event = MagicMock(id=1) rh.registration = MagicMock() rh.registration.price = 13.37 rh.registration.currency = currency request.form = {'mc_gross': amount, 'mc_currency': 'EUR'} with PaypalPaymentPlugin.instance.plugin_context(): assert rh._verify_amount() == expected assert nai.called == (not expected)
def test_ipn_verify_amount(mocker, amount, currency, expected): nai = mocker.patch( 'indico_payment_paypal.controllers.notify_amount_inconsistency') rh = RHPaypalIPN() rh.event = MagicMock(id=1) rh.registration = MagicMock() rh.registration.price = 13.37 rh.registration.currency = currency request.form = {'mc_gross': amount, 'mc_currency': 'EUR'} with PaypalPaymentPlugin.instance.plugin_context(): assert rh._verify_amount() == expected assert nai.called == (not 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._verify_business = MagicMock() 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 = {'event_id': 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)