From ce74f81d0c7b018fc0e7935611860656e112356b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com> Date: Tue, 14 Feb 2023 12:13:04 +0900 Subject: [PATCH] test: use lxml.html c14n to compare expected html this way we can just assert the full page content --- .../test.erp5.testSlapOSPayzenWorkflow.py | 114 +++++++++++++----- 1 file changed, 82 insertions(+), 32 deletions(-) diff --git a/master/bt5/slapos_payzen/TestTemplateItem/portal_components/test.erp5.testSlapOSPayzenWorkflow.py b/master/bt5/slapos_payzen/TestTemplateItem/portal_components/test.erp5.testSlapOSPayzenWorkflow.py index 4468a2f09..332efdf72 100644 --- a/master/bt5/slapos_payzen/TestTemplateItem/portal_components/test.erp5.testSlapOSPayzenWorkflow.py +++ b/master/bt5/slapos_payzen/TestTemplateItem/portal_components/test.erp5.testSlapOSPayzenWorkflow.py @@ -1,9 +1,9 @@ # Copyright (c) 2002-2012 Nexedi SA and Contributors. All Rights Reserved. from erp5.component.test.SlapOSTestCaseMixin import SlapOSTestCaseMixinWithAbort +import lxml.html from DateTime import DateTime from Products.ERP5Type.tests.utils import createZODBPythonScript -import difflib HARDCODED_PRICE = -99.6 @@ -195,44 +195,94 @@ class TestSlapOSPayzenInterfaceWorkflow(SlapOSTestCaseMixinWithAbort): self.portal.portal_secure_payments.slapos_payzen_test._getFieldList(data_dict) data_dict['action'] = 'https://secure.payzen.eu/vads-payment/' + expected_html_page = lxml.html.tostring( + lxml.html.fromstring( +'''<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> +<head> + <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> + <meta http-equiv="Content-Script-Type" content="text/javascript" /> + <meta http-equiv="Content-Style-Type" content="text/css" /> + <title>title</title> +</head> +<body onload="document.payment.submit();"> +<form action="%(action)s" id="payment" method="POST" name="payment"> - expected_html_page = \ - '<form method="POST'\ - '" id="payment" name="payment"\n action="%(action)s">\n\n <input '\ - 'type="hidden" name="vads_url_return"\n value="'\ - '%(vads_url_return)s">\n\n\n <input type="hidden" name="vads_site_id" '\ - 'value="%(vads_site_id)s">\n\n\n <input type="hidden" name="vads_url_e'\ - 'rror"\n value="%(vads_url_error)s">\n\n\n <input type="hidden'\ - '" name="vads_trans_id" value="%(vads_trans_id)s">\n\n\n '\ - '<input type="hidden" name="vads_url_success"\n value="'\ - '%(vads_url_success)s">\n\n\n <input type="hidden" name="vads_order_id'\ - '"\n value="%(vads_order_id)s">\n\n\n <input type="hidden" name="vads_url_refe'\ - 'rral"\n value="%(vads_url_referral)s">\n\n\n <input type="hid'\ - 'den" name="vads_page_action"\n value="PAYMENT">\n\n\n <input '\ - 'type="hidden" name="vads_trans_date"\n value="'\ - '%(vads_trans_date)s">\n\n\n <input type="hidden" name="vads_url_refus'\ - 'ed"\n value="%(vads_url_refused)s">\n\n\n <input type="hidden'\ - '" name="vads_url_cancel"\n value="%(vads_url_cancel)s">\n\n\n '\ - ' <input type="hidden" name="vads_ctx_mode" value="TEST">\n\n\n <input '\ - 'type="hidden" name="vads_payment_config"\n value="SINGLE">\n\n'\ - '\n <input type="hidden" name="vads_contrib" value="ERP5">\n\n\n <inp'\ - 'ut type="hidden" name="signature"\n value="%(signature)s">\n\n'\ - '\n <input type="hidden" name="vads_language" value="%(vads_language)s">\n\n\n <inpu'\ - 't type="hidden" name="vads_currency" value="%(vads_currency)s">\n\n\n '\ - ' <input type="hidden" name="vads_amount" value="%(vads_amount)s">\n\n\n'\ - ' <input type="hidden" name="vads_version" value="V2">\n\n\n <input type="'\ - 'hidden" name="vads_action_mode"\n value="INTERACTIVE">\n\n<center>\n '\ - ' <input type="submit" value="Click to pay">\n</center>\n</form>' % data_dict + <input name="signature" type="hidden" value="%(signature)s"></input> + + + <input name="vads_action_mode" type="hidden" value="INTERACTIVE"></input> + + + <input name="vads_amount" type="hidden" value="%(vads_amount)s"></input> + + + <input name="vads_contrib" type="hidden" value="ERP5"></input> + + + <input name="vads_ctx_mode" type="hidden" value="TEST"></input> + + + <input name="vads_currency" type="hidden" value="%(vads_currency)s"></input> + + + <input name="vads_language" type="hidden" value="%(vads_language)s"></input> + + + <input name="vads_order_id" type="hidden" value="%(vads_order_id)s"></input> + + + <input name="vads_page_action" type="hidden" value="PAYMENT"></input> + + + <input name="vads_payment_config" type="hidden" value="SINGLE"></input> + + + <input name="vads_site_id" type="hidden" value="%(vads_site_id)s"></input> + + + <input name="vads_trans_date" type="hidden" value="%(vads_trans_date)s"></input> + + + <input name="vads_trans_id" type="hidden" value="%(vads_trans_id)s"></input> + + + <input name="vads_url_cancel" type="hidden" value="%(vads_url_cancel)s"></input> + + + <input name="vads_url_error" type="hidden" value="%(vads_url_error)s"></input> + + + <input name="vads_url_referral" type="hidden" value="%(vads_url_referral)s"></input> + + + <input name="vads_url_refused" type="hidden" value="%(vads_url_refused)s"></input> + + + <input name="vads_url_return" type="hidden" value="%(vads_url_return)s"></input> + + + <input name="vads_url_success" type="hidden" value="%(vads_url_success)s"></input> + + + <input name="vads_version" type="hidden" value="V2"></input> + +<center> + <input type="submit" value="Click to pay"></input> +</center> +</form> +</body> +</html>''' % data_dict), method='c14n') # Event message state event_message_list = event.contentValues(portal_type="Payzen Event Message") self.assertEqual(len(event_message_list), 1) message = event_message_list[0] self.assertEqual(message.getTitle(), 'Shown Page') - self.assertIn(expected_html_page, message.getTextContent(), - '\n'.join([q for q in difflib.unified_diff(expected_html_page.split('\n'), - message.getTextContent().split('\n'))])) - self.assertIn('onload="document.payment.submit();"', message.getTextContent()) + + message_text_content = lxml.html.tostring( + lxml.html.fromstring(message.getTextContent()), method='c14n') + self.assertEqual(message_text_content, expected_html_page) def test_updateStatus_noAccountingTransaction(self): event = self.createPayzenEvent() -- 2.30.9