# Copyright (c) 2005-2006 Simplistix Ltd # # This Software is released under the MIT License: # http://www.opensource.org/licenses/mit-license.html # See license.txt for more details. import os from AccessControl.SecurityManagement import newSecurityManager from AccessControl.SecurityManagement import noSecurityManager from AccessControl.User import system as SystemUser,SimpleUser from OFS.Folder import Folder from test_MailTemplate import DummyMailHost,Zope,get_transaction from Testing.makerequest import makerequest from unittest import TestCase,TestSuite,makeSuite,main try: import Products.CMFCore except ImportError: # no CMF, no use ;-) class TestFSMailTemplate(TestCase): pass else: from Products.CMFCore.DirectoryView import addDirectoryViews from Products.CMFCore.tests.base.testcase import FSDVTest from AccessControl import ClassSecurityInfo from App.class_init import default__class_init__ as InitializeClass class DummyMember: security = ClassSecurityInfo() security.declareObjectPublic() security.setDefaultAccess('allow') security.declarePublic('getUserName') def getUserName(self): return 'Test Member' security.declarePublic('getProperty') def getProperty(self,name): return 'member@example.com' InitializeClass(DummyMember) class DummyMembershipTool: security = ClassSecurityInfo() security.declareObjectPublic() security.setDefaultAccess('allow') security.declarePublic('listMembers') def listMembers(self): return (DummyMember(),) InitializeClass(DummyMembershipTool) class TestFSMailTemplate(FSDVTest): _sourceprefix = os.path.dirname(__file__) def setUp(self): FSDVTest.setUp(self) self.app = makerequest(Zope.app()) self._registerDirectory() ob = self.ob = self.app addDirectoryViews(ob, self._skinname, self.tempname) self.r = self.app.REQUEST self.r.other['URL1'] = 'http://foo/test_mt' self._add= self.app.manage_addProduct['MailTemplates'].addMailTemplate self.folder = Folder('folder') if getattr(self.app,'test_mt',None): self.app.manage_delObjects(ids=['test_mt']) if getattr(self.app,'MailHost',None): self.app.manage_delObjects(ids=['MailHost']) self.MailHost = self.app.MailHost = DummyMailHost() newSecurityManager( None, SystemUser ) def tearDown(self): noSecurityManager() get_transaction().abort() self.app._p_jar.close() try: FSDVTest.tearDown(self) except OSError: # waggh, on windows, files in .svn get locked for some reason :-( pass def test_render(self): self.MailHost.setExpected(mfrom='from@example.com', mto=('to@example.com','to2@example.com'), filename='mail_FSSendSimple.txt') self.ob.fake_skin.test.send(subject=self.ob.fake_skin.test.subject % 'out', mcc=('cc@example.com',), mbcc=('bcc@example.com',), headers={ 'To':('to@example.com','to2@example.com'), 'Subject':'cheese', }) self.MailHost.checkSent() # check we're not setting a content type self.assertFalse(self.r.RESPONSE.headers.get('content-type'), self.r.RESPONSE.headers) def test_properties(self): self.assertEqual(self.ob.fake_skin.test.mailhost,'MailHost') self.assertEqual(self.ob.fake_skin.test.subject,'Hello %s there') self.assertEqual(self.ob.fake_skin.test.mfrom,'from@example.com') def test_zodbclone(self): from Products.MailTemplates.MailTemplate import MailTemplate clone = self.ob.fake_skin.test._createZODBClone() self.assertTrue(isinstance(clone,MailTemplate),'Clone not a MailTemplate!') self.assertEqual(self.ob.fake_skin.test.read(),clone.read()) self.assertEqual(clone.getProperty('mailhost'),None) self.assertEqual(clone.mailhost,'MailHost') self.assertEqual(clone.getProperty('subject'),'Hello %s there') self.assertEqual(clone.getProperty('mfrom'),'from@example.com') self.assertEqual(clone.content_type,'text/notplain') def test_view_manage_workspace(self): from zExceptions import Redirect try: self.assertRaises(self.ob.fake_skin.test.manage_workspace(self.r)) except Redirect,r: # this may appear to be incorrect, but http://foo/test_mt # is what we set as REQUEST['URL1'] self.assertEqual(r.args,('http://foo/test_mt/manage_main',)) self.ob.fake_skin.test.manage_main() # ugh, okay, so we can't really test for security, but lets # test for the missing docstring that was causing problems! self.assertTrue(self.ob.fake_skin.test.__doc__) def test_example2(self): # login noSecurityManager() self.app.aq_chain[-1].id = 'testing' newSecurityManager( None, SimpleUser('Test User','',('Manager',),[]).__of__(self.app) ) try: # setup self.app.portal_membership = DummyMembershipTool() # set expected self.MailHost.setExpected(mfrom='webmaster@example.com', mto='member@example.com', filename='example2.txt') # test self.ob.fake_skin.send_mails() finally: # logout noSecurityManager() newSecurityManager( None, SystemUser ) def test_suite(): return TestSuite(( makeSuite(TestFSMailTemplate), )) if __name__ == '__main__': main(defaultTest='test_suite')