Beispiel #1
0
    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)
Beispiel #2
0
    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))
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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
Beispiel #6
0
    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, "*****@*****.**")
Beispiel #7
0
    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
Beispiel #8
0
    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)))
Beispiel #9
0
    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)