from Products.CMFCore.utils import getToolByName from Products.Five.browser import BrowserView from ftw.builder import Builder from ftw.builder import create from ftw.mail.testing import FTW_MAIL_FUNCTIONAL_TESTING from plone.app.testing import TEST_USER_ID from plone.app.testing import setRoles from plone.uuid.interfaces import IUUID from unittest2 import TestCase from zope.component import queryMultiAdapter from zope.viewlet.interfaces import IViewletManager class TestMailInViewlet(TestCase): layer = FTW_MAIL_FUNCTIONAL_TESTING def setUp(self): self.portal = self.layer.get('portal') setRoles(self.portal, TEST_USER_ID, ['Manager', 'Member']) self.folder = create(Builder('folder')) def get_viewlet(self, context): view = BrowserView(context, context.REQUEST) manager_name = 'plone.belowcontenttitle' manager = queryMultiAdapter( (context, context.REQUEST, view), IViewletManager, manager_name) self.failUnless(manager) # Set up viewlets manager.update() name = 'ftw.mail.mail-in' viewlets = [v for v in manager.viewlets if v.__name__ == name] if len(viewlets): return viewlets[0] else: return None def test_viewlet_registered(self): self.assertNotEquals(None, self.get_viewlet(self.folder), 'The ftw.mail.mail-in viewlet is not registered properly') def test_viewlet_is_present_if_mail_is_addable(self): portal_types = getToolByName(self.portal, 'portal_types') portal_types.get('Folder').allowed_content_types = ['ftw.mail.mail'] viewlet = self.get_viewlet(self.folder) self.assertTrue(viewlet.available(), 'Expect the ftw.mail-mail-in viewlet on %s' % ( self.folder.absolute_url())) def test_viewlet_is_not_present_if_mail_is_not_addable(self): portal_types = getToolByName(self.portal, 'portal_types') portal_types.get('Folder').allowed_content_types = [] viewlet = self.get_viewlet(self.folder) self.assertFalse(viewlet.available(), 'Did not expect the ftw.mail-mail-in viewlet on %s' % ( self.folder.absolute_url())) def test_mailin_email(self): viewlet = self.get_viewlet(self.folder) expect = "%s@example.org" % IUUID(self.folder) self.assertEquals(expect, viewlet.email())