Skip to content

Commit

Permalink
Merge pull request #14 from collective/fulv-issue-13
Browse files Browse the repository at this point in the history
Fulv issue #13
  • Loading branch information
fulv committed Nov 8, 2016
2 parents 813c1d3 + 17d7ed7 commit cca41ae
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 23 deletions.
3 changes: 3 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ Changelog
1.6 (unreleased)
-------------------

- Add test case for empty recipients.
[fulv]

- Add support for Plone 5.0 and 5.1. On Plone 5.x we use z3c.form instead of formlib.
[fulv]

Expand Down
12 changes: 7 additions & 5 deletions collective/contentrules/mailtogroup/actions/mail.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,11 @@
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
from Products.statusmessages.interfaces import IStatusMessage
from zope import schema
from zope.component import adapts
from zope.component import adapter
from zope.component import getUtility
from zope.component.interfaces import ComponentLookupError
from zope.globalrequest import getRequest
from zope.interface import implements
from zope.interface import implementer
from zope.interface import Interface

import logging
Expand Down Expand Up @@ -74,9 +74,9 @@ class IMailGroupAction(Interface):
)


@implementer(IMailGroupAction, IRuleElementData)
class MailGroupAction(SimpleItem):
""" The implementation of the action defined before """
implements(IMailGroupAction, IRuleElementData)

subject = u''
source = u''
Expand All @@ -95,10 +95,10 @@ def summary(self):
mapping=dict(groups=groups, both=both, members=members))


@implementer(IExecutable)
@adapter(Interface, IMailGroupAction, Interface)
class MailActionExecutor(object):
""" The executor for this action. """
implements(IExecutable)
adapts(Interface, IMailGroupAction, Interface)

def __init__(self, context, element, event):
self.context = context
Expand Down Expand Up @@ -150,6 +150,8 @@ def __call__(self):
self.subject = interpolator(self.element.subject)

mime_msg = self.create_mime_msg()
if not mime_msg:
return False

# Finally send mail.
# Plone-4
Expand Down
10 changes: 5 additions & 5 deletions collective/contentrules/mailtogroup/actions_formlib/mail.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@
from Products.CMFCore.utils import getToolByName
from Products.CMFPlone import PloneMessageFactory as _
from zope import schema
from zope.component import adapts
from zope.component import adapter
from zope.component.interfaces import ComponentLookupError
from zope.formlib import form
from zope.interface import implements
from zope.interface import implementer
from zope.interface import Interface


Expand Down Expand Up @@ -63,9 +63,9 @@ class IMailGroupAction(Interface):
)


@implementer(IMailGroupAction, IRuleElementData)
class MailGroupAction(SimpleItem):
""" The implementation of the action defined before """
implements(IMailGroupAction, IRuleElementData)

subject = u''
source = u''
Expand All @@ -83,10 +83,10 @@ def summary(self):
${members}', mapping=dict(groups=groups, members=members))


@implementer(IExecutable)
@adapter(Interface, IMailGroupAction, Interface)
class MailActionExecutor(object):
""" The executor for this action. """
implements(IExecutable)
adapts(Interface, IMailGroupAction, Interface)

def __init__(self, context, element, event):
self.context = context
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,8 @@ def afterSetUp(self):
groups.addPrincipalToGroup('member2', 'group2')
groups.addPrincipalToGroup('member3', 'group2')

groups.addGroup('group3')

def _setup_mockmail(self):
sm = getSiteManager(self.portal)
sm.unregisterUtility(provided=IMailHost)
Expand All @@ -142,10 +144,10 @@ def _setup_mockmail(self):

def testRegistered(self):
element = getUtility(IRuleAction, name='plone.actions.MailGroup')
self.assertEquals('plone.actions.MailGroup', element.addview)
self.assertEquals('edit', element.editview)
self.assertEquals(None, element.for_)
self.assertEquals(None, element.event)
self.assertEqual('plone.actions.MailGroup', element.addview)
self.assertEqual('edit', element.editview)
self.assertEqual(None, element.for_)
self.assertEqual(None, element.event)

def testInvokeAddView(self):
element = getUtility(IRuleAction, name='plone.actions.MailGroup')
Expand All @@ -156,7 +158,7 @@ def testInvokeAddView(self):
adding = getMultiAdapter((rule, self.portal.REQUEST), name='+action')
addview = getMultiAdapter((adding, self.portal.REQUEST),
name=element.addview)
self.failUnless(isinstance(addview, MailGroupAddFormView))
self.assertTrue(isinstance(addview, MailGroupAddFormView))

if IS_PLONE_5:
addview.form_instance.update()
Expand All @@ -176,19 +178,19 @@ def testInvokeAddView(self):
'message': 'Hey, Oh!'})

e = rule.actions[0]
self.failUnless(isinstance(e, MailGroupAction))
self.assertEquals('My Subject', e.subject)
self.assertEquals('foo@bar.be', e.source)
self.assertEquals(['group1', 'group2'], e.groups)
self.assertEquals([default_user, ], e.members)
self.assertEquals('Hey, Oh!', e.message)
self.assertTrue(isinstance(e, MailGroupAction))
self.assertEqual('My Subject', e.subject)
self.assertEqual('foo@bar.be', e.source)
self.assertEqual(['group1', 'group2'], e.groups)
self.assertEqual([default_user, ], e.members)
self.assertEqual('Hey, Oh!', e.message)

def testInvokeEditView(self):
element = getUtility(IRuleAction, name='plone.actions.MailGroup')
e = MailGroupAction()
editview = getMultiAdapter((e, self.folder.REQUEST),
name=element.editview)
self.failUnless(isinstance(editview, MailGroupEditFormView))
self.assertTrue(isinstance(editview, MailGroupEditFormView))

def testExecute(self):
setRoles(self.portal, TEST_USER_ID, ['Manager'])
Expand Down Expand Up @@ -267,7 +269,7 @@ def testExecuteMultiGroupsAndUsers(self):
mailFrom = mailSent.get('From')
mailType = mailSent.get('Content-Type')
self.assertEqual(len(mailTo), 4)
self.failUnless(isinstance(mailSent, Message))
self.assertTrue(isinstance(mailSent, Message))
self.assertTrue(mailType.startswith('multipart/related'))

self.assertEqual('foo@bar.be', mailFrom)
Expand All @@ -277,6 +279,23 @@ def testExecuteMultiGroupsAndUsers(self):
self.assertIn('member2@dummy.org', mailTo)
self.assertIn('Document created !', str(mailSent))

def testExecuteEmptyGroup(self):
setRoles(self.portal, TEST_USER_ID, ['Manager'])
dummyMailHost = self._setup_mockmail()

e = MailGroupAction()
e.source = 'foo@bar.be'
e.groups = ['group3']
e.members = []
e.message = 'Document created !'
ex = getMultiAdapter((self.folder, e, DummyEvent(self.folder.d1)),
IExecutable)
ret = ex()

self.assertFalse(ret)

self.assertEqual(len(dummyMailHost.messages), 0)


def test_suite():
from unittest import TestSuite, makeSuite
Expand Down

0 comments on commit cca41ae

Please sign in to comment.