diff --git a/product/ERP5/tests/testContributionRegistryTool.py b/product/ERP5/tests/testContributionRegistryTool.py new file mode 100644 index 0000000000000000000000000000000000000000..e634ba909cf7381dac581fea4d408135e2379a2f --- /dev/null +++ b/product/ERP5/tests/testContributionRegistryTool.py @@ -0,0 +1,160 @@ +############################################################################# +# +# Copyright (c) 2008 Nexedi SA and Contributors. All Rights Reserved. +# Yusei TAHARA <yusei@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +import unittest +from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase +from transaction import get_transaction + + +class TestContributionRegistryTool(ERP5TypeTestCase): + + run_all_test = 1 + + def getTitle(self): + return "Contribution Registry Tool" + + def getBusinessTemplateList(self): + return () + + def afterSetUp(self): + self.setUpTestScript() + self.setUpMimeType() + self.setUpPredicate() + + def setUpTestScript(self): + if getattr(self.portal, 'IngestionFile_testEvent', None) is not None: + return + python_script_src = ( +"""\ +## Script (Python) "IngestionFile_testEvent" +##bind container=container +##bind context=context +##bind namespace= +##bind script=script +##bind subpath=traverse_subpath +##parameters=predicate=None +##title= +## +from Products.ERP5Type.Document import newTempEvent + +new_id = newTempEvent(context, 'subobject', data=context.getData()) +event = context[new_id] + +subject = event.getContentInformation().get('Subject', None) +if subject == 'Fax': + return 'Fax Message' +return predicate.getDestinationPortalType() +""") + self.portal.manage_addProduct['PythonScripts'].manage_addPythonScript(id='IngestionFile_testEvent') + self.portal.IngestionFile_testEvent.write(python_script_src) + get_transaction().commit() + self.tic() + + def setUpMimeType(self): + portal_categories = self.portal.portal_categories + if getattr(portal_categories, 'mime_type', None): + mime_type = portal_categories.newContent(portal_type='Base Category', + id='mime_type') + text = mime_type.newContent(portal_type='Category', id='text') + html = html.newContent(portal_type='Category', id='html') + get_transaction().commit() + self.tic() + + if getattr(portal_categories, 'mime_type', None): + mime_type = portal_categories.newContent(portal_type='Base Category', + id='mime_type') + text = mime_type.newContent(portal_type='Category', id='message') + html = html.newContent(portal_type='Category', id='rfc822') + get_transaction().commit() + self.tic() + + def setUpPredicate(self): + portal_contribution_registry = self.portal.portal_contribution_registry + if getattr(portal_contribution_registry, 'webpage_mimetype', None) is None: + predicate = portal_contribution_registry.newContent( + portal_type='Contribution Predicate', + id='webpage_mimetype') + predicate._setMembershipCriterionCategoryList(['mime_type/text/html']) + predicate._setMembershipCriterionBaseCategoryList(['mime_type']) + predicate.setDestinationPortalType('Web Page') + get_transaction().commit() + self.tic() + + if getattr(portal_contribution_registry, 'my_predicate', None) is None: + predicate = portal_contribution_registry.newContent( + portal_type='Contribution Predicate', + id='my_predicate') + predicate._setMembershipCriterionCategoryList(['mime_type/message/rfc822']) + predicate._setMembershipCriterionBaseCategoryList(['mime_type']) + predicate.setCriterion('file_extension', identity=['eml']) + predicate.setDestinationPortalType('Mail Message') + predicate.setTestMethodId('IngestionFile_testEvent') + get_transaction().commit() + self.tic() + + def testFindPortalTypeName(self, quiet=0, run=run_all_test): + tool = self.portal.portal_contribution_registry + + # Test extension matching + self.assertEqual(tool.findPortalTypeName(file_name='test.txt'), 'Text') + self.assertEqual(tool.findPortalTypeName(file_name='test.odt'), 'Text') + self.assertEqual(tool.findPortalTypeName(file_name='001.jpg'), 'Image') + self.assertEqual(tool.findPortalTypeName(file_name='002.PNG'), 'Image') + self.assertEqual(tool.findPortalTypeName(file_name='002.PNG'), 'Image') + self.assertEqual(tool.findPortalTypeName(file_name='index.html'), 'Web Page') + # Unknown extension + self.assertEqual(tool.findPortalTypeName(file_name='index.xxx'), 'File') + + # Test mimetype matching + self.assertEqual(tool.findPortalTypeName(mime_type='text/html'), 'Web Page') + + # Unknown mimetype + self.assertEqual(tool.findPortalTypeName(mime_type='application/octet-stream'), 'File') + + # Test both of extension and mimetype + self.assertNotEqual(tool.findPortalTypeName(file_name='message.eml'), + 'Mail Message') + self.assertNotEqual(tool.findPortalTypeName(mime_type='message/rfc822'), + 'Mail Message') + self.assertEqual(tool.findPortalTypeName(file_name='message.eml', + mime_type='message/rfc822'), + 'Mail Message') + + # Test test script + data = """\ +Subject: Fax +""" + self.assertEqual(tool.findPortalTypeName(file_name='message.eml', + mime_type='message/rfc822', + data=data), + 'Fax Message') + +def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(TestContributionRegistryTool)) + return suite