testContributionRegistryTool.py 6.3 KB
Newer Older
1
# -*- coding: utf-8 -*-
Yusei Tahara's avatar
Yusei Tahara committed
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
#############################################################################
#
# 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
32
import transaction
Yusei Tahara's avatar
Yusei Tahara committed
33 34 35 36 37 38 39 40 41

class TestContributionRegistryTool(ERP5TypeTestCase):

  run_all_test = 1

  def getTitle(self):
    return "Contribution Registry Tool"

  def getBusinessTemplateList(self):
42
    return ('erp5_base',)
Yusei Tahara's avatar
Yusei Tahara committed
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

  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

65
event = newTempEvent(context, 'subobject', data=context.getData())
Yusei Tahara's avatar
Yusei Tahara committed
66 67 68 69 70 71 72 73

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)
74
    transaction.commit()
Yusei Tahara's avatar
Yusei Tahara committed
75 76 77 78
    self.tic()

  def setUpMimeType(self):
    portal_categories = self.portal.portal_categories
Yusei Tahara's avatar
Yusei Tahara committed
79
    if getattr(portal_categories, 'mime_type', None) is None:
Yusei Tahara's avatar
Yusei Tahara committed
80 81 82
      mime_type = portal_categories.newContent(portal_type='Base Category',
                                               id='mime_type')
      text = mime_type.newContent(portal_type='Category', id='text')
Yusei Tahara's avatar
Yusei Tahara committed
83
      text.newContent(portal_type='Category', id='html')
84
      transaction.commit()
Yusei Tahara's avatar
Yusei Tahara committed
85 86
      self.tic()

Yusei Tahara's avatar
Yusei Tahara committed
87
    if getattr(portal_categories, 'mime_type', None) is None:
Yusei Tahara's avatar
Yusei Tahara committed
88 89
      mime_type = portal_categories.newContent(portal_type='Base Category',
                                               id='mime_type')
Yusei Tahara's avatar
Yusei Tahara committed
90 91
      message = mime_type.newContent(portal_type='Category', id='message')
      message.newContent(portal_type='Category', id='rfc822')
92
      transaction.commit()
Yusei Tahara's avatar
Yusei Tahara committed
93 94 95 96 97 98 99 100 101 102 103
      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')
104
      transaction.commit()
Yusei Tahara's avatar
Yusei Tahara committed
105 106 107 108 109 110 111 112 113 114 115
      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')
116
      transaction.commit()
Yusei Tahara's avatar
Yusei Tahara committed
117 118 119 120 121 122
      self.tic()

  def testFindPortalTypeName(self, quiet=0, run=run_all_test):
    tool = self.portal.portal_contribution_registry

    # Test extension matching
Nicolas Delaby's avatar
Nicolas Delaby committed
123 124 125 126 127 128
    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')
Yusei Tahara's avatar
Yusei Tahara committed
129
    # Unknown extension
Nicolas Delaby's avatar
Nicolas Delaby committed
130
    self.assertEqual(tool.findPortalTypeName(filename='index.xxx'), 'File')
Yusei Tahara's avatar
Yusei Tahara committed
131 132

    # Test mimetype matching
Nicolas Delaby's avatar
Nicolas Delaby committed
133
    self.assertEqual(tool.findPortalTypeName(content_type='text/html'), 'Web Page')
Yusei Tahara's avatar
Yusei Tahara committed
134 135

    # Unknown mimetype
Nicolas Delaby's avatar
Nicolas Delaby committed
136
    self.assertEqual(tool.findPortalTypeName(content_type='application/octet-stream'), 'File')
Yusei Tahara's avatar
Yusei Tahara committed
137 138

    # Test both of extension and mimetype
Nicolas Delaby's avatar
Nicolas Delaby committed
139
    self.assertNotEqual(tool.findPortalTypeName(filename='message.eml'),
Yusei Tahara's avatar
Yusei Tahara committed
140
                        'Mail Message')
Nicolas Delaby's avatar
Nicolas Delaby committed
141
    self.assertNotEqual(tool.findPortalTypeName(content_type='message/rfc822'),
Yusei Tahara's avatar
Yusei Tahara committed
142
                        'Mail Message')
Nicolas Delaby's avatar
Nicolas Delaby committed
143 144
    self.assertEqual(tool.findPortalTypeName(filename='message.eml',
                                             content_type='message/rfc822'),
Yusei Tahara's avatar
Yusei Tahara committed
145 146 147 148 149 150
                     'Mail Message')

    # Test test script
    data = """\
Subject: Fax
"""
Nicolas Delaby's avatar
Nicolas Delaby committed
151 152
    self.assertEqual(tool.findPortalTypeName(filename='message.eml',
                                             content_type='message/rfc822',
Yusei Tahara's avatar
Yusei Tahara committed
153 154 155 156 157 158 159
                                             data=data),
                     'Fax Message')

def test_suite():
  suite = unittest.TestSuite()
  suite.addTest(unittest.makeSuite(TestContributionRegistryTool))
  return suite