def test_handle_submit(self): context = self.context request = self.request # fake the mailer from repoze.sendmail.interfaces import IMailDelivery from karl.testing import DummyMailer mailer = DummyMailer() karl.testing.registerUtility(mailer, IMailDelivery) # fake catalog search from karl.models.interfaces import ICatalogSearch from zope.interface import Interface karl.testing.registerAdapter(DummyProfileSearch, (Interface, ), ICatalogSearch) # fake a staff user from karl.testing import DummyUsers context.users = DummyUsers() context.users.add('me', 'me', 'password', ['group.KarlStaff']) # register dummy renderer for email template reg = get_current_registry() config = Configurator(reg, autocommit=True) renderer = config.testing_add_template( 'templates/email_reset_password.pt') # register dummy profile search profile_search = DummyProfileSearch(context) def search_adapter(context): return profile_search karl.testing.registerAdapter(search_adapter, (Interface, ), ICatalogSearch) # convert to non-staff user and test controller = self._makeOne(context, request) converted = {'email': '*****@*****.**'} context.users._by_id['me']['groups'] = [] response = controller.handle_submit(converted) self.assertEqual( response.location, 'http://example.com/reset_sent.html?email=me%40example.com') profile = profile_search.profile self.failUnless(profile.password_reset_key) self.failUnless(profile.password_reset_time) self.assertEqual(len(mailer), 1) msg = mailer.pop() self.assertEqual(len(msg.mto), 1) self.assertEqual(msg.mto[0], '*****@*****.**') self.assertEqual( dict(msg.msg._headers)['Subject'], 'karl3test Password Reset Request') renderer.assert_(login='******', system_name='karl3test') self.failUnless(hasattr(renderer, 'reset_url')) self.failUnless( renderer.reset_url.startswith( 'http://example.com/reset_confirm.html?key='), renderer.reset_url)
def test_emit(self): from repoze.sendmail.interfaces import IMailDelivery from pyramid.interfaces import IRequest from karl.models.interfaces import IProfile from karl.testing import DummyMailer mailer = DummyMailer() self.config.registry.registerUtility(mailer, IMailDelivery) community = DummyCommunity() community["foo"] = context = testing.DummyModel() directlyProvides(context, IDummy) site = community.__parent__.__parent__ site["profiles"] = profiles = testing.DummyModel() profiles["a"] = DummyProfile() profiles["b"] = DummyProfile() profiles["c"] = DummyProfile() community.member_names = set(( "a", "c", )) community.moderator_names = set(("b", )) request = testing.DummyRequest() self.config.registry.registerAdapter(DummyEmailAlertAdapter, (IDummy, IProfile, IRequest), IAlert) self._get_instance().emit(context, request) self.assertEqual(3, len(mailer))
def test_weekly_digests(self): from repoze.sendmail.interfaces import IMailDelivery from pyramid.interfaces import IRequest from karl.models.interfaces import IProfile from karl.testing import DummyMailer mailer = DummyMailer() self.config.registry.registerUtility(mailer, IMailDelivery) community = DummyCommunity() community["foo"] = context = testing.DummyModel() directlyProvides(context, IDummy) site = community.__parent__.__parent__ site["profiles"] = profiles = testing.DummyModel() profiles["a"] = DummyProfile() profiles["a"].set_alerts_preference(community.__name__, IProfile.ALERT_DAILY_DIGEST) profiles["b"] = DummyProfile() profiles["b"].set_alerts_preference(community.__name__, IProfile.ALERT_WEEKLY_DIGEST) profiles["c"] = DummyProfile() profiles["c"].set_alerts_preference(community.__name__, IProfile.ALERT_BIWEEKLY_DIGEST) community.member_names = set(("a", "b", "c")) community.moderator_names = set() request = testing.DummyRequest() self.config.registry.registerAdapter(DummyEmailAlertAdapter, (IDummy, IProfile, IRequest), IAlert) tool = self._get_instance() tool.emit(context, request) tool.emit(context, request) self.assertEqual(0, len(mailer)) self.assertEqual(2, len(list(profiles["a"]._pending_alerts))) self.assertEqual(2, len(list(profiles["b"]._pending_alerts))) self.assertEqual(2, len(list(profiles["c"]._pending_alerts))) self.config.testing_add_renderer('karl.utilities:email_digest.pt') tool.send_digests(site, "weekly") self.assertEqual(0, len(list(profiles["a"]._pending_alerts))) self.assertEqual(0, len(list(profiles["b"]._pending_alerts))) self.assertEqual(2, len(list(profiles["c"]._pending_alerts))) self.assertEqual(2, len(mailer)) self.assertEqual(0, len(list(list(profiles["a"]._pending_alerts)))) self.assertEqual(0, len(list(list(profiles["b"]._pending_alerts)))) mtos = [x.mto for x in mailer] self.assertTrue([ '*****@*****.**', ] in mtos) self.assertTrue([ '*****@*****.**', ] in mtos)
def _callFUT(self, context, request): # fake the mailer from repoze.sendmail.interfaces import IMailDelivery from karl.testing import DummyMailer mailer = DummyMailer() karl.testing.registerUtility(mailer, IMailDelivery) from karl.views.login import login_view return login_view(context, request)
def setUp(self): cleanUp() # Register mail utility from repoze.sendmail.interfaces import IMailDelivery from karl.testing import DummyMailer self.mailer = DummyMailer() karl.testing.registerUtility(self.mailer, IMailDelivery) # Register BlogCommentAlert adapter from karl.models.interfaces import IProfile from karl.models.interfaces import IComment from karl.content.views.adapters import BlogCommentAlert from karl.utilities.interfaces import IAlert from pyramid.interfaces import IRequest karl.testing.registerAdapter(BlogCommentAlert, (IComment, IProfile, IRequest), IAlert) # Register IShowSendAlert adapter self.show_sendalert = True from karl.content.views.interfaces import IShowSendalert class DummyShowSendalert(object): def __init__(myself, context, request): myself.show_sendalert = self.show_sendalert karl.testing.registerAdapter(DummyShowSendalert, (Interface, Interface), IShowSendalert) # Create dummy site skel from karl.testing import DummyCommunity from karl.testing import DummyProfile community = DummyCommunity() site = community.__parent__.__parent__ site.sessions = DummySessions() profiles = testing.DummyModel() site["profiles"] = profiles profiles["a"] = DummyProfile() profiles["b"] = DummyProfile() profiles["c"] = DummyProfile() community.member_names = set([ "b", "c", ]) community.moderator_names = set([ "a", ]) blog = testing.DummyModel() community["blog"] = blog blogentry = blog["foo"] = DummyBlogEntry() self.context = blogentry["comments"] # Create dummy request request = testing.DummyRequest() request.environ['repoze.browserid'] = '1' self.request = request
def test_success(self): from karl.testing import DummyUsers context = DummyProfile() context.__name__ = 'me' parent = testing.DummyModel() parent.__name__ = '' parent.__parent__ = None context.__parent__ = parent context.title = 'Me' context.email = '*****@*****.**' parent.users = DummyUsers() parent.users.add('me', 'me', self._old_password(), []) request = testing.DummyRequest({ 'form.submitted': 1, 'old_password': '******', 'password': '******', 'password_confirm': 'newnewnew', }) renderer = testing.registerDummyRenderer( 'templates/change_password.pt') from repoze.sendmail.interfaces import IMailDelivery from karl.testing import DummyMailer mailer = DummyMailer() testing.registerUtility(mailer, IMailDelivery) response = self._callFUT(context, request) from repoze.who.plugins.zodb.users import get_sha_password new_enc = get_sha_password('newnewnew') self.assertEqual(parent.users.get_by_id('me')['password'], new_enc) self.assertEqual(response.location, 'http://example.com/me/?status_message=Password%20changed') self.assertEqual(len(mailer), 1) msg = mailer.pop() self.assertEqual(msg.mto, ['*****@*****.**']) self.assertEqual(msg.mfrom, "*****@*****.**")
def setUp(self): # Register mail utility from repoze.sendmail.interfaces import IMailDelivery from karl.testing import DummyMailer self.mailer = DummyMailer() from pyramid.threadlocal import manager from pyramid.registry import Registry manager.stack[0]['registry'] = Registry('testing') karl.testing.registerUtility(self.mailer, IMailDelivery) # Register BlogEntryAlert adapter from karl.models.interfaces import IProfile from karl.content.interfaces import IBlogEntry from karl.content.views.adapters import BlogEntryAlert from karl.utilities.interfaces import IAlert from pyramid.interfaces import IRequest karl.testing.registerAdapter(BlogEntryAlert, (IBlogEntry, IProfile, IRequest), IAlert) karl.testing.registerDummySecurityPolicy("a") # Create dummy site skel from karl.testing import DummyCommunity self.community = DummyCommunity() self.site = self.community.__parent__.__parent__ self.profiles = testing.DummyModel() self.site["profiles"] = self.profiles from karl.testing import DummyProfile self.profiles["a"] = DummyProfile() self.profiles["b"] = DummyProfile() self.profiles["c"] = DummyProfile() for profile in self.profiles.values(): profile["alerts"] = testing.DummyModel() self.community.member_names = set([ "b", "c", ]) self.community.moderator_names = set([ "a", ]) self.blog = self._makeContext() self.community["blog"] = self.blog
def test_respect_alert_prefs(self): from repoze.sendmail.interfaces import IMailDelivery from pyramid.interfaces import IRequest from karl.models.interfaces import IProfile from karl.testing import DummyMailer mailer = DummyMailer() self.config.registry.registerUtility(mailer, IMailDelivery) community = DummyCommunity() community["foo"] = context = testing.DummyModel() directlyProvides(context, IDummy) site = community.__parent__.__parent__ site["profiles"] = profiles = testing.DummyModel() profiles["a"] = DummyProfile() profiles["b"] = DummyProfile() profiles["b"].set_alerts_preference(community.__name__, IProfile.ALERT_DAILY_DIGEST) profiles["c"] = DummyProfile() profiles["c"].set_alerts_preference(community.__name__, IProfile.ALERT_NEVER) profiles["d"] = DummyProfile() profiles["d"].set_alerts_preference(community.__name__, IProfile.ALERT_WEEKLY_DIGEST) profiles["e"] = DummyProfile() profiles["e"].set_alerts_preference(community.__name__, IProfile.ALERT_BIWEEKLY_DIGEST) community.member_names = set(( "a", "c", )) community.moderator_names = set(("b", )) request = testing.DummyRequest() self.config.registry.registerAdapter(DummyEmailAlertAdapter, (IDummy, IProfile, IRequest), IAlert) self._get_instance().emit(context, request) self.assertEqual(1, len(mailer)) self.assertEqual(1, len(list(profiles["b"]._pending_alerts)))
def test_handle_submit(self): context = self.context request = self.request # fake the mailer from repoze.sendmail.interfaces import IMailDelivery from karl.testing import DummyMailer mailer = DummyMailer() karl.testing.registerUtility(mailer, IMailDelivery) # fake catalog search from karl.models.interfaces import ICatalogSearch from zope.interface import Interface karl.testing.registerAdapter( DummyProfileSearch, (Interface,), ICatalogSearch) # fake a staff user from karl.testing import DummyUsers context.users = DummyUsers() context.users.add('me', 'me', 'password', ['group.KarlStaff']) # register dummy renderer for email template reg = get_current_registry() config = Configurator(reg, autocommit=True) renderer = config.testing_add_template( 'templates/email_reset_password.pt') # test w/ staff user controller = self._makeOne(context, request) converted = {'email': '*****@*****.**'} response = controller.handle_submit(converted) self.failIf(len(mailer)) self.assertEqual(response.location, 'http://login.example.com/resetpassword?email=me%40example.com' '&came_from=http%3A%2F%2Fexample.com%2Flogin.html') # register dummy profile search profile_search = DummyProfileSearch(context) def search_adapter(context): return profile_search karl.testing.registerAdapter( search_adapter, (Interface,), ICatalogSearch) # convert to non-staff user and test again, email should # go out this time context.users._by_id['me']['groups'] = [] response = controller.handle_submit(converted) self.assertEqual(response.location, 'http://example.com/reset_sent.html?email=me%40example.com') profile = profile_search.profile self.failUnless(profile.password_reset_key) self.failUnless(profile.password_reset_time) self.assertEqual(len(mailer), 1) msg = mailer.pop() self.assertEqual(len(msg.mto), 1) self.assertEqual(msg.mto[0], '*****@*****.**') self.assertEqual(dict(msg.msg._headers)['Subject'], 'karl3test Password Reset Request') renderer.assert_(login='******', system_name='karl3test') self.failUnless(hasattr(renderer, 'reset_url')) self.failUnless(renderer.reset_url.startswith( 'http://example.com/reset_confirm.html?key='), renderer.reset_url)