Commit 2199ab29 authored by Jérome Perrin's avatar Jérome Perrin

Initial import of a test for email ingestion in CRM.

Ideally, things done in afterSetup should be done automatically.



git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@17084 20353a03-c40f-0410-a6d1-a30d3c3de9de
parent 26862009
##############################################################################
#
# Copyright (c) 2007 Nexedi SA and Contributors. All Rights Reserved.
#
# 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
import os
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
class TestCRMMailIngestion(ERP5TypeTestCase):
"""Test Mail Ingestion for CRM.
"""
def getBusinessTemplateList(self):
return ('erp5_base', 'erp5_web', 'erp5_dms', 'erp5_crm')
def afterSetUp(self):
portal = self.portal
if 'portal_transforms' not in portal.objectIds():
# XXX this should be done in bt5 (or ERP5Site, as install order is
# important)
# install needed tools
dispatcher = portal.manage_addProduct
dispatcher['MimetypesRegistry'].manage_addTool('MimeTypes Registry')
dispatcher['PortalTransforms'].manage_addTool('Portal Transforms')
# XXX this should not be necessary either
# set prefered file name regular expression
pref = portal.portal_preferences.default_site_preference
pref.setPreferredDocumentFileNameRegularExpression('.*')
pref.enable()
# XXX do this in ERP5Site.py ?
# sets up content type registry
ctr = self.portal.content_type_registry
ctr.addPredicate('mail_message', 'extension')
ctr.getPredicate('mail_message').edit(extensions='eml')
ctr.assignTypeName('mail_message', 'Mail Message')
ctr.reorderPredicate('mail_message', 0)
# create customer organisation and person
if 'customer' not in portal.organisation_module.objectIds():
customer_organisation = portal.organisation_module.newContent(
id='customer',
portal_type='Organisation',
title='Customer')
portal.person_module.newContent(
id='sender',
title='Sender',
subordination_value=customer_organisation,
default_email_text='sender@customer.com')
# also create the recipient
portal.person_module.newContent(
id='me',
title='Me',
default_email_text='me@erp5.org')
# make sure customers are available to catalog
get_transaction().commit()
self.tic()
def beforeTearDown(self):
get_transaction().abort()
# clear modules if necessary
for module in (self.portal.event_module,):
module.manage_delObjects(list(module.objectIds()))
get_transaction().commit()
self.tic()
def _ingestMail(self, filename):
"""ingest an email from the mail in data dir named `filename`"""
data = file(os.path.join(os.path.dirname(__file__),
'test_data', 'crm_emails', filename)).read()
return self.portal.portal_contributions.newContent(
portal_type='Mail Message',
container_path='event_module',
file_name='postfix_mail.eml',
data=data)
def test_findTypeByName_MailMessage(self):
# without this, ingestion will not work
registry = self.portal.content_type_registry
self.assertEquals('Mail Message',
registry.findTypeName('postfix_mail.eml', 'message/rfc822', ''))
def test_document_creation(self):
# CRM email ingestion creates a Mail Message in event_module
event = self._ingestMail('simple')
self.assertEquals(len(self.portal.event_module), 1)
self.assertEquals(event, self.portal.event_module.contentValues()[0])
self.assertEquals('Mail Message', event.getPortalType())
self.assertEquals('message/rfc822', event.getContentType())
def test_title(self):
# tite is found automatically, based on the Subject: header in the mail
event = self._ingestMail('simple')
self.assertEquals('Simple Mail Test', event.getTitle())
def test_asText(self):
# asText requires portal_transforms
event = self._ingestMail('simple')
self.assertEquals('Hello,\nContent of the mail.\n', str(event.asText()))
# not working ? a script seems missing
## def test_sender(self):
## # source is found automatically, based on the From: header in the mail
## event = self._ingestMail('simple')
## self.assertEquals('person_module/sender', event.getSource())
##
## def test_recipient(self):
## # destination is found automatically, based on the To: header in the mail
## event = self._ingestMail('simple')
## self.assertEquals('person_module/me', event.getDestination())
## TODO:
## def test_forwarder_mail(self):
## # if there is a forwarded email, import the forwarded email
## event = self._ingestMail('forwarded')
##
## def test_attachements(self):
## event = self._ingestMail('with_attachements')
##
## def test_encoding(self):
## event = self._ingestMail('utf8')
##
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestCRMMailIngestion))
return suite
Return-Path: <me@erp5.org>
X-Original-To: me@erp5.org
Delivered-To: me@erp5.org
Message-ID: <4719FE4D.2070403@erp5.org>
Date: Sat, 20 Oct 2007 15:10:37 +0200
From: Sender <sender@customer.com>
User-Agent: Thunderbird 2.0.0.6 (X11/20070728)
To: Me <me@erp5.org>
Subject: Simple Mail Test
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Hello,
Content of the mail.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment