
Product
Introducing Module Reachability: Focus on the Vulnerabilities That Matter
Module Reachability filters out unreachable CVEs so you can focus on vulnerabilities that actually matter to your application.
collective.MockMailHost
Advanced tools
collective.MockMailHost
enables integration testing of email functionality
from Plone_. Simply add this egg to your [test] runner section, and install
this product through your Layer
or TestCase
.
Note THIS IS FOR TESTING PURPOSE ONLY, do not use this product on your running Plone site. It replaces the standard MailHost with a Mock MailHost that you can poke at to check email content and recipients.
Has been tested with Plone 4 but should also work with earlier versions.
Example how to integrate collective.MockMailHost
to your testing setup
based on plone.app.testing
_. Add the package to your extras_requires section
in your package's setup.py
file, so buildout will automatically download
the package for you.::
setup(name='my.package',
...
extras_require={
'test': [
'plone.app.testing',
'collective.MockMailHost',
]
},
...
)
Your test layer setup could look like this example below::
from plone.app.testing import helpers, layers
from plone.testing import z2
class MyLayer(helpers.PloneSandboxLayer):
defaultBases = (layers.PLONE_FIXTURE, )
def setUpZope(self, app, configurationContext):
# Load zcml
import collective.MockMailHost
self.loadZCML(package=collective.MockMailHost)
# Install product and call its initialize() function
z2.installProduct(app, 'collective.MockMailHost')
# Note: you can skip this if my.product is not a Zope 2-style
# product, i.e. it is not in the Products.* namespace and it
# does not have a <five:registerPackage /> directive in its
# configure.zcml.
def tearDownZope(self, app):
# Uninstall product
z2.uninstallProduct(app, 'collective.MockMailHost')
# Note: Again, you can skip this if my.product is not a Zope 2-
# style product
def setUpPloneSite(self, portal):
helpers.quickInstallProduct(portal, 'collective.MockMailHost')
helpers.applyProfile(portal, 'collective.MockMailHost:default')
MY_FIXTURE = MyLayer()
.. _Plone: http://plone.org
.. _plone.app.testing
: http://pypi.python.org/pypi/plone.app.testing
>>> from Products.CMFCore.utils import getToolByName
>>> from Products.MailHost.interfaces import IMailHost
>>> from zope.component import getUtility
>>> app = layer['app']
>>> portal = layer['portal']
Test starting conversations, replying and modifying comments in a default member-posting forum.
Let us log all exceptions, which is useful for debugging. Also, clear portlet slots, to make the test browser less confused by things like the recent portlet and the navtree.
>>> portal.error_log._ignored_exceptions = ()
>>> portal.left_slots = portal.right_slots = []
>>> workflow = portal.portal_workflow
>>> portal.MailHost
<collective.MockMailHost.MockMailHost.MockMailHost object at ...>
>>> getToolByName(portal, 'MailHost')
<collective.MockMailHost.MockMailHost.MockMailHost object at ...>
>>> getUtility(IMailHost)
<collective.MockMailHost.MockMailHost.MockMailHost object at ...>
>>> to_ = "member@example.com"
>>> from_ = "admin@example.com"
>>> msg = """
...
... Dear Sir:
...
... Thank you"""
>>> portal.MailHost.send(msg, to_, from_)
>>> len(portal.MailHost.messages)
1
>>> b'To: member@example.com' in portal.MailHost.messages[0]
True
>>> b'From: admin@example.com' in portal.MailHost.messages[0]
True
>>> b'Dear Sir:' in portal.MailHost.messages[0]
True
>>> portal.MailHost.messages_from
['admin@example.com']
>>> portal.MailHost.messages_to
[['member@example.com']]
>>> portal.MailHost.reset()
>>> len(portal.MailHost.messages)
0
Send an email.message.EmailMessage
object with cc/bcc recipients
>>> from email.message import EmailMessage
>>> msg = EmailMessage()
>>> msg["Subject"] = "Hello"
>>> msg["From"] = "me@example.com"
>>> msg["To"] = "you@example.com"
>>> msg["Cc"] = "foo@example.com"
>>> msg["Bcc"] = "bar@example.com"
>>> msg.set_content("""
... This message is for you, foo, and bar.
... """)
>>> portal.MailHost.send(msg)
>>> len(portal.MailHost.messages)
1
>>> b'To: you@example.com' in portal.MailHost.messages[0]
True
>>> b'From: me@example.com' in portal.MailHost.messages[0]
True
>>> b'Cc: foo@example.com' in portal.MailHost.messages[0]
True
>>> b'bar@example.com' in portal.MailHost.messages[0]
False
>>> b'This message is for you, foo, and bar.' in portal.MailHost.messages[0]
True
>>> len(portal.MailHost.messages)
1
>>> portal.MailHost.messages_from
['me@example.com']
>>> portal.MailHost.messages_to
[['you@example.com', 'foo@example.com', 'bar@example.com']]
>>> portal.MailHost.reset()
>>> len(portal.MailHost.messages)
0
Breaking changes:
New features:
messages_from
, and messages_to
to record senders and recipients.
This is useful for testing bcc
that is not present in the message.
[mamico]Bug fixes:
Breaking changes:
New features:
Fix import location, Globals has been removed. [gforcada]
Rework tests setup. [gforcada]
Track msg_type also. [sureshvv]
Behave more like collective.testcaselayer
's MockMailHost.
[saily]
Documentation updates [saily]
Remove ZopeSkel and Paster dependency from setup.py [saily]
Moved to github and changed to README.rst, links in setup.py [saily]
Allow multiple paramters for send
and secureSend
method in
MockMailHost class. [saily]
Register MockMailHost in SiteManager to get MockMailHost when using
getToolByName(context, 'MailHost')
or getUtility(IMailHost)
.
[saily]
Inherit from MailHost instead of SimpleItem [saily]
Implement the secureSend method [saily]
Add **kwargs
to MockMailHost's send method to support mto, mfrom, ...
keyword arguments as default MailHost does. [saily]
Added file for generic setup various handlers [sureshvv]
FAQs
Used for integration testing with Plone
We found that collective.MockMailHost demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 5 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Product
Module Reachability filters out unreachable CVEs so you can focus on vulnerabilities that actually matter to your application.
Company News
Socket is bringing best-in-class reachability analysis into the platform — cutting false positives, accelerating triage, and cementing our place as the leader in software supply chain security.
Product
Socket is introducing a new way to organize repositories and apply repository-specific security policies.