From 5dc3a8b0ffdfd6cfd3796798cc69c95f252e8e82 Mon Sep 17 00:00:00 2001 From: Arnaud Fontaine <arnaud.fontaine@nexedi.com> Date: Wed, 2 Sep 2020 12:26:08 +0900 Subject: [PATCH] ZODB Components: erp5_credential: Migrate Unit Test. --- ...redentialRequest_checkLoginAvailability.py | 2 + .../test.erp5.testERP5Credential.py | 36 +++--- .../test.erp5.testERP5Credential.xml | 110 ++++++++++++++++++ .../bt/template_document_id_list | 4 +- bt5/erp5_credential/bt/template_test_id_list | 1 + bt5/erp5_credential/bt/test_dependency_list | 6 + 6 files changed, 139 insertions(+), 20 deletions(-) rename product/ERP5/tests/testERP5Credential.py => bt5/erp5_credential/TestTemplateItem/portal_components/test.erp5.testERP5Credential.py (98%) create mode 100644 bt5/erp5_credential/TestTemplateItem/portal_components/test.erp5.testERP5Credential.xml create mode 100644 bt5/erp5_credential/bt/template_test_id_list create mode 100644 bt5/erp5_credential/bt/test_dependency_list diff --git a/bt5/erp5_credential/SkinTemplateItem/portal_skins/erp5_credential/CredentialRequest_checkLoginAvailability.py b/bt5/erp5_credential/SkinTemplateItem/portal_skins/erp5_credential/CredentialRequest_checkLoginAvailability.py index dbd14db79c..6101f3b9c7 100644 --- a/bt5/erp5_credential/SkinTemplateItem/portal_skins/erp5_credential/CredentialRequest_checkLoginAvailability.py +++ b/bt5/erp5_credential/SkinTemplateItem/portal_skins/erp5_credential/CredentialRequest_checkLoginAvailability.py @@ -7,6 +7,8 @@ portal = context.getPortalObject() if value: # Same tag is used as in ERP5 Login _setReference, in order to protect against # concurrency between Credential Request and ERP5 Login object too + # + # XXX: value.encode('hex') may exceed 'tag' column length (255)... if context.getPortalObject().portal_activities.countMessageWithTag('set_login_' + value.encode('hex')): return False diff --git a/product/ERP5/tests/testERP5Credential.py b/bt5/erp5_credential/TestTemplateItem/portal_components/test.erp5.testERP5Credential.py similarity index 98% rename from product/ERP5/tests/testERP5Credential.py rename to bt5/erp5_credential/TestTemplateItem/portal_components/test.erp5.testERP5Credential.py index e20980bf92..e1bc34b279 100644 --- a/product/ERP5/tests/testERP5Credential.py +++ b/bt5/erp5_credential/TestTemplateItem/portal_components/test.erp5.testERP5Credential.py @@ -165,7 +165,7 @@ class TestERP5Credential(ERP5TypeTestCase): self._enablePreference() # Copied from bt5/erp5_egov/TestTemplateItem/testEGovMixin.py - def decode_email(self, file): + def decode_email(self, file_): # Prepare result theMail = { 'attachment_list': [], @@ -174,9 +174,9 @@ class TestERP5Credential(ERP5TypeTestCase): 'headers': {} } # Get Message - msg = email.message_from_string(file) + msg = email.message_from_string(file_) # Back up original file - theMail['__original__'] = file + theMail['__original__'] = file_ # Recode headers to UTF-8 if needed for key, value in msg.items(): decoded_value_list = decode_header(value) @@ -188,7 +188,7 @@ class TestERP5Credential(ERP5TypeTestCase): 'to', 'from', 'cc', 'sender', 'reply-to'): header_field = theMail['headers'].get(header) if header_field: - theMail['headers'][header] = parseaddr(header_field)[1] + theMail['headers'][header] = parseaddr(header_field)[1] # Get attachments body_found = 0 for part in msg.walk(): @@ -252,7 +252,9 @@ class TestERP5Credential(ERP5TypeTestCase): self.tic() self.logout() - def stepSetCredentialAssignmentPropertyList(self, sequence={}): + def stepSetCredentialAssignmentPropertyList(self, sequence=None): + if sequence is None: + sequence = {} category_list = sequence.get("category_list", ["role/internal", "function/member"]) self.login() @@ -321,8 +323,7 @@ class TestERP5Credential(ERP5TypeTestCase): from Products.PluggableAuthService.interfaces.plugins import\ IAuthenticationPlugin uf = self.getUserFolder() - for plugin_name, plugin in uf._getOb('plugins').listPlugins( - IAuthenticationPlugin): + for _, plugin in uf._getOb('plugins').listPlugins(IAuthenticationPlugin): if plugin.authenticateCredentials( {'login': login, 'password': password}) is not None: break @@ -450,7 +451,6 @@ class TestERP5Credential(ERP5TypeTestCase): self._assertUserDoesNotExists('homie', 'secret') # check that informations on the person object have been updated - person_module = self.portal.getDefaultModule('Person') related_login_result = self.portal.portal_catalog(portal_type='ERP5 Login', reference='homie') self.assertEqual(len(related_login_result), 1) related_person = related_login_result[0].getParentValue() @@ -742,7 +742,7 @@ class TestERP5Credential(ERP5TypeTestCase): Check an email containing the usernames list as been sent ''' person_list = sequence.get('person_list') - email = sequence.get('default_email_text') + email_text = sequence.get('default_email_text') # after accept, only one email is send containing the reset link previous_message = self.portal.MailHost._previous_message last_message = self.portal.MailHost._last_message @@ -760,7 +760,7 @@ class TestERP5Credential(ERP5TypeTestCase): # check the mail is sent to the requester : send_to = decoded_message['headers']['to'] - self.assertEqual(email, send_to) + self.assertEqual(email_text, send_to) def stepCheckPasswordChange(self, sequence=None, sequence_list=None, **kw): """ @@ -782,7 +782,7 @@ class TestERP5Credential(ERP5TypeTestCase): url = line[line.find('http:'):] url = url.strip() self.assertNotEquals(url, None) - response = self.publish(url) + self.publish(url) parameters = cgi.parse_qs(urlparse.urlparse(url)[4]) self.assertTrue('reset_key' in parameters) key = parameters['reset_key'][0] @@ -1070,8 +1070,8 @@ class TestERP5Credential(ERP5TypeTestCase): mfrom, mto, message_text = last_message self.assertEqual(mfrom, 'Portal Administrator <postmaster@localhost>') self.assertEqual(['Vifib Test <barney@duff.com>'], mto) - self.assertNotEquals(re.search("Subject\:.*Welcome", message_text), None) - self.assertNotEquals(re.search("Hello\ Vifib\ Test\,", message_text), None) + self.assertNotEquals(re.search(r"Subject\:.*Welcome", message_text), None) + self.assertNotEquals(re.search(r"Hello\ Vifib\ Test\,", message_text), None) decoded_message = self.decode_email(last_message[2]) body_message = decoded_message['body'] self.assertNotEquals(re.search("key=%s" % mail_message.getReference(), @@ -1178,7 +1178,7 @@ class TestERP5Credential(ERP5TypeTestCase): sequence = dict(automatic_call=True) self.stepSetCredentialRequestAutomaticApprovalPreferences(sequence) self.stepSetCredentialAssignmentPropertyList() - reference = self.id() + reference = self._testMethodName self.logout() response = self.portal.ERP5Site_newCredentialRequest(reference=reference, default_email_text='some@one.com',) @@ -1238,7 +1238,7 @@ class TestERP5Credential(ERP5TypeTestCase): def test_no_reset_assignment_ERP5Site_newCredentialUpdate(self): """Checks that assignments are left intact after credential update""" - reference = self.id() + reference = self._testMethodName person = self.portal.person_module.newContent(portal_type='Person', reference=reference, role='internal') @@ -1300,7 +1300,7 @@ class TestERP5Credential(ERP5TypeTestCase): sequence_list.play(self) def _prepareContractAndPreference(self): - self.contract_reference = self.id() + self.contract_reference = self._testMethodName self.contract_content = 'My contract %s.' % self.contract_reference preference = self._getPreference() preference.edit( @@ -1389,13 +1389,13 @@ class TestERP5Credential(ERP5TypeTestCase): assignment.open() login = person.newContent( portal_type='ERP5 Login', - reference=self.id(), + reference=self._testMethodName, password='secret', ) login.validate() self.tic() - ret = self.portal.ERP5Site_newCredentialRecovery(reference=self.id()) + ret = self.portal.ERP5Site_newCredentialRecovery(reference=self._testMethodName) self.assertEqual( urlparse.parse_qs(urlparse.urlparse(ret).query)['portal_status_message'], ['We have sent you an email to enable you to reset your password. Please check your inbox and your junk/spam mail for this email and follow the link to reset your password.'], diff --git a/bt5/erp5_credential/TestTemplateItem/portal_components/test.erp5.testERP5Credential.xml b/bt5/erp5_credential/TestTemplateItem/portal_components/test.erp5.testERP5Credential.xml new file mode 100644 index 0000000000..7e5ae1168e --- /dev/null +++ b/bt5/erp5_credential/TestTemplateItem/portal_components/test.erp5.testERP5Credential.xml @@ -0,0 +1,110 @@ +<?xml version="1.0"?> +<ZopeData> + <record id="1" aka="AAAAAAAAAAE="> + <pickle> + <global name="Test Component" module="erp5.portal_type"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>default_reference</string> </key> + <value> <string>testERP5Credential</string> </value> + </item> + <item> + <key> <string>default_source_reference</string> </key> + <value> <string>Products.ERP5.tests.testERP5Credential</string> </value> + </item> + <item> + <key> <string>description</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>id</string> </key> + <value> <string>test.erp5.testERP5Credential</string> </value> + </item> + <item> + <key> <string>portal_type</string> </key> + <value> <string>Test Component</string> </value> + </item> + <item> + <key> <string>sid</string> </key> + <value> + <none/> + </value> + </item> + <item> + <key> <string>text_content_error_message</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>text_content_warning_message</string> </key> + <value> + <tuple/> + </value> + </item> + <item> + <key> <string>version</string> </key> + <value> <string>erp5</string> </value> + </item> + <item> + <key> <string>workflow_history</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAI=</string> </persistent> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="2" aka="AAAAAAAAAAI="> + <pickle> + <global name="PersistentMapping" module="Persistence.mapping"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>data</string> </key> + <value> + <dictionary> + <item> + <key> <string>component_validation_workflow</string> </key> + <value> + <persistent> <string encoding="base64">AAAAAAAAAAM=</string> </persistent> + </value> + </item> + </dictionary> + </value> + </item> + </dictionary> + </pickle> + </record> + <record id="3" aka="AAAAAAAAAAM="> + <pickle> + <global name="WorkflowHistoryList" module="Products.ERP5Type.Workflow"/> + </pickle> + <pickle> + <dictionary> + <item> + <key> <string>_log</string> </key> + <value> + <list> + <dictionary> + <item> + <key> <string>action</string> </key> + <value> <string>validate</string> </value> + </item> + <item> + <key> <string>validation_state</string> </key> + <value> <string>validated</string> </value> + </item> + </dictionary> + </list> + </value> + </item> + </dictionary> + </pickle> + </record> +</ZopeData> diff --git a/bt5/erp5_credential/bt/template_document_id_list b/bt5/erp5_credential/bt/template_document_id_list index 20d95496f3..b4cce87830 100644 --- a/bt5/erp5_credential/bt/template_document_id_list +++ b/bt5/erp5_credential/bt/template_document_id_list @@ -1,2 +1,2 @@ -document.erp5.CredentialRequest -document.erp5.CredentialRecovery \ No newline at end of file +document.erp5.CredentialRecovery +document.erp5.CredentialRequest \ No newline at end of file diff --git a/bt5/erp5_credential/bt/template_test_id_list b/bt5/erp5_credential/bt/template_test_id_list new file mode 100644 index 0000000000..cbfae6a0a2 --- /dev/null +++ b/bt5/erp5_credential/bt/template_test_id_list @@ -0,0 +1 @@ +test.erp5.testERP5Credential \ No newline at end of file diff --git a/bt5/erp5_credential/bt/test_dependency_list b/bt5/erp5_credential/bt/test_dependency_list new file mode 100644 index 0000000000..061c56658f --- /dev/null +++ b/bt5/erp5_credential/bt/test_dependency_list @@ -0,0 +1,6 @@ +erp5_full_text_mroonga_catalog +erp5_core_proxy_field_legacy +erp5_jquery +erp5_ingestion_mysql_innodb_catalog +erp5_ingestion +erp5_administration \ No newline at end of file -- 2.30.9