# -*- coding: utf-8 -*- ############################################################################# # # 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 class TestContributionRegistryTool(ERP5TypeTestCase): run_all_test = 1 def getTitle(self): return "Contribution Registry Tool" def getBusinessTemplateList(self): return ('erp5_base',) def afterSetUp(self): self.setUpTestScript() 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 event = newTempEvent(context, 'subobject', data=context.getData()) 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) self.tic() def setUpPredicate(self): portal_contribution_registry = self.portal.portal_contribution_registry predicate_id = 'webpage_by_content_type' if getattr(portal_contribution_registry, predicate_id, None) is None: predicate = portal_contribution_registry.newContent( portal_type='Contribution Predicate', id=predicate_id) predicate.setCriterion('content_type', identity=['text/html']) predicate.setDestinationPortalType('Web Page') self.tic() predicate_id = 'webpage_by_extension' if getattr(portal_contribution_registry, predicate_id, None) is None: predicate = portal_contribution_registry.newContent( portal_type='Contribution Predicate', id=predicate_id) predicate.setCriterion('extension_from_filename', identity=['html']) predicate.setDestinationPortalType('Web Page') self.tic() predicate_id = 'email_by_extension_and_content_type' if getattr(portal_contribution_registry, predicate_id, None) is None: predicate = portal_contribution_registry.newContent( portal_type='Contribution Predicate', id=predicate_id) predicate.setCriterion('extension_from_filename', identity=['eml']) predicate.setCriterion('content_type', identity=['message/rfc822']) predicate.setDestinationPortalType('Mail Message') predicate.setTestMethodId('IngestionFile_testEvent') self.tic() predicate_id = 'text_by_extension' if getattr(portal_contribution_registry, predicate_id, None) is None: predicate = portal_contribution_registry.newContent( portal_type='Contribution Predicate', id=predicate_id) predicate.setCriterion('extension_from_filename', identity=['odt', 'txt']) predicate.setDestinationPortalType('Text') self.tic() predicate_id = 'image_by_extension' if getattr(portal_contribution_registry, predicate_id, None) is None: predicate = portal_contribution_registry.newContent( portal_type='Contribution Predicate', id=predicate_id) predicate.setCriterion('extension_from_filename', identity=['jpg', 'png']) predicate.setDestinationPortalType('Image') self.tic() def testFindPortalTypeName(self, quiet=0, run=run_all_test): tool = self.portal.portal_contribution_registry # Test extension matching self.assertEqual(tool.findPortalTypeName(filename='test.txt'), 'Text') self.assertEqual(tool.findPortalTypeName(filename='test.odt'), 'Text') self.assertEqual(tool.findPortalTypeName(filename='001.jpg'), 'Image') self.assertEqual(tool.findPortalTypeName(filename='002.png'), 'Image') self.assertEqual(tool.findPortalTypeName(filename='002.PNG'), 'Image') self.assertEqual(tool.findPortalTypeName(filename='index.html'), 'Web Page') # Unknown extension self.assertEqual(tool.findPortalTypeName(filename='index.xxx'), 'File') # Test mimetype matching self.assertEqual(tool.findPortalTypeName(content_type='text/html'), 'Web Page') # Unknown mimetype self.assertEqual(tool.findPortalTypeName(content_type='application/octet-stream'), 'File') # Test both of extension and mimetype self.assertNotEqual(tool.findPortalTypeName(filename='message.eml'), 'Mail Message') self.assertNotEqual(tool.findPortalTypeName(content_type='message/rfc822'), 'Mail Message') self.assertEqual(tool.findPortalTypeName(filename='message.eml', content_type='message/rfc822'), 'Mail Message') # Test test script data = """\ Subject: Fax """ self.assertEqual(tool.findPortalTypeName(filename='message.eml', content_type='message/rfc822', data=data), 'Fax Message') def test_suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestContributionRegistryTool)) return suite