97 lines
4.3 KiB
Python
97 lines
4.3 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo.exceptions import ValidationError
|
|
from odoo.tests import tagged
|
|
from odoo.tools import mute_logger
|
|
|
|
from .common import BuckarooCommon
|
|
from ..controllers.main import BuckarooController
|
|
|
|
|
|
@tagged('post_install', '-at_install')
|
|
class BuckarooTest(BuckarooCommon):
|
|
|
|
def test_redirect_form_values(self):
|
|
return_url = self._build_url(BuckarooController._return_url)
|
|
expected_values = {
|
|
'Brq_websitekey': self.buckaroo.buckaroo_website_key,
|
|
'Brq_amount': str(self.amount),
|
|
'Brq_currency': self.currency.name,
|
|
'Brq_invoicenumber': self.reference,
|
|
'Brq_signature': '04c26578116990496770687a8bf225200e0f56e6',
|
|
'Brq_return': return_url,
|
|
'Brq_returncancel': return_url,
|
|
'Brq_returnerror': return_url,
|
|
'Brq_returnreject': return_url,
|
|
'Brq_culture': 'en-US',
|
|
}
|
|
|
|
tx_sudo = self.create_transaction(flow='redirect')
|
|
with mute_logger('odoo.addons.payment.models.payment_transaction'):
|
|
processing_values = tx_sudo._get_processing_values()
|
|
form_info = self._extract_values_from_html_form(processing_values['redirect_form_html'])
|
|
|
|
self.assertEqual(form_info['action'], "https://testcheckout.buckaroo.nl/html/")
|
|
self.assertDictEqual(expected_values, form_info['inputs'],
|
|
"Buckaroo: invalid inputs specified in the redirect form.")
|
|
|
|
def test_feedback_processing(self):
|
|
self.amount = 2240.0
|
|
self.reference = 'SO004'
|
|
|
|
# typical data posted by buckaroo after client has successfully paid
|
|
buckaroo_post_data = {
|
|
'BRQ_RETURNDATA': u'',
|
|
'BRQ_AMOUNT': str(self.amount),
|
|
'BRQ_CURRENCY': self.currency.name,
|
|
'BRQ_CUSTOMER_NAME': u'Jan de Tester',
|
|
'BRQ_INVOICENUMBER': self.reference,
|
|
'brq_payment': u'573311D081B04069BD6336001611DBD4',
|
|
'BRQ_PAYMENT_METHOD': u'paypal',
|
|
'BRQ_SERVICE_PAYPAL_PAYERCOUNTRY': u'NL',
|
|
'BRQ_SERVICE_PAYPAL_PAYEREMAIL': u'fhe@odoo.com',
|
|
'BRQ_SERVICE_PAYPAL_PAYERFIRSTNAME': u'Jan',
|
|
'BRQ_SERVICE_PAYPAL_PAYERLASTNAME': u'Tester',
|
|
'BRQ_SERVICE_PAYPAL_PAYERMIDDLENAME': u'de',
|
|
'BRQ_SERVICE_PAYPAL_PAYERSTATUS': u'verified',
|
|
'Brq_signature': u'e439f3af06b9752197631715628d6a198a25900f',
|
|
'BRQ_STATUSCODE': u'190',
|
|
'BRQ_STATUSCODE_DETAIL': u'S001',
|
|
'BRQ_STATUSMESSAGE': u'Transaction successfully processed',
|
|
'BRQ_TIMESTAMP': u'2014-05-08 12:41:21',
|
|
'BRQ_TRANSACTIONS': u'D6106678E1D54EEB8093F5B3AC42EA7B',
|
|
'BRQ_WEBSITEKEY': u'5xTGyGyPyl',
|
|
}
|
|
|
|
with self.assertRaises(ValidationError): # unknown transaction
|
|
self.env['payment.transaction']._handle_feedback_data('buckaroo', buckaroo_post_data)
|
|
|
|
tx = self.create_transaction(flow='redirect')
|
|
|
|
# validate it
|
|
tx._handle_feedback_data('buckaroo', buckaroo_post_data)
|
|
self.assertEqual(tx.state, 'done', 'Buckaroo: validation did not put tx into done state')
|
|
self.assertEqual(tx.acquirer_reference, buckaroo_post_data.get('BRQ_TRANSACTIONS'),
|
|
'Buckaroo: validation did not update tx payid')
|
|
|
|
# New reference for new tx
|
|
self.reference = 'SO004-2'
|
|
tx = self.create_transaction(flow='redirect')
|
|
|
|
buckaroo_post_data['BRQ_INVOICENUMBER'] = self.reference
|
|
# now buckaroo post is ok: try to modify the SHASIGN
|
|
buckaroo_post_data['Brq_signature'] = '54d928810e343acf5fb0c3ee75fd747ff159ef7a'
|
|
with self.assertRaises(ValidationError):
|
|
self.env['payment.transaction']._handle_feedback_data('buckaroo', buckaroo_post_data)
|
|
|
|
# simulate an error
|
|
buckaroo_post_data['BRQ_STATUSCODE'] = '2'
|
|
buckaroo_post_data['Brq_signature'] = 'b8e54e26b2b5a5e697b8ed5085329ea712fd48b2'
|
|
|
|
# Avoid warning log bc of unknown status code
|
|
with mute_logger('odoo.addons.payment_buckaroo.models.payment_transaction'):
|
|
self.env['payment.transaction']._handle_feedback_data('buckaroo', buckaroo_post_data)
|
|
|
|
self.assertEqual(tx.state, 'error',
|
|
'Buckaroo: unexpected status code should put tx in error state')
|