Example #1
0
    def test_handle_submit_new_to_karl(self):
        from repoze.lemonade.testing import registerContentFactory
        from karl.models.interfaces import IInvitation
        from karl.utilities.interfaces import IRandomId
        request = testing.DummyRequest()
        context = self._makeCommunity()
        mailer = self._registerMailer()
        registerCatalogSearch()

        def nonrandom(size=6):
            return 'A' * size

        karltesting.registerUtility(nonrandom, IRandomId)
        registerContentFactory(DummyInvitation, IInvitation)
        controller = self._makeOne(context, request)
        converted = {
            'email_addresses': [u'*****@*****.**'],
            'text': u'some text',
        }

        karltesting.registerDummyRenderer(
            'karl.views:templates/email_invite_new.pt')
        response = controller.handle_submit(converted)
        self.assertEqual(
            response.location,
            'http://example.com/manage.html?status_message=One+user+invited.++'
        )
        invitation = context['A' * 6]
        self.assertEqual(invitation.email, '*****@*****.**')
        self.assertEqual(1, len(mailer))
        self.assertEqual(mailer[0].mto, [
            u"*****@*****.**",
        ])
Example #2
0
    def test_handle_submit_inactive_user(self):
        from repoze.lemonade.testing import registerContentFactory
        from karl.models.interfaces import IInvitation
        from karl.utilities.interfaces import IRandomId
        request = testing.DummyRequest()
        context = self._makeCommunity()
        self._registerMailer()
        registerCatalogSearch()
        profile = karltesting.DummyProfile(security_state='inactive')
        profile.__name__ = 'd'
        registerCatalogSearch(results={'[email protected]': [
            profile,
        ]})

        def nonrandom(size=6):
            return 'A' * size

        karltesting.registerUtility(nonrandom, IRandomId)
        registerContentFactory(DummyInvitation, IInvitation)
        controller = self._makeOne(context, request)
        converted = {
            'email_addresses': [u'*****@*****.**'],
            'text': u'some text',
        }
        karltesting.registerDummyRenderer(
            'karl.views:templates/email_add_existing.pt')
        from pyramid_formish import ValidationError
        self.assertRaises(ValidationError, controller.handle_submit, converted)
Example #3
0
    def test_submit_form(self):
        from repoze.sendmail.interfaces import IMailDelivery
        karltesting.registerDummyRenderer("templates/join_community.pt")

        c = karltesting.DummyCommunity()
        c.moderator_names = set(["moderator1", "moderator2"])
        site = c.__parent__.__parent__
        profiles = site["profiles"] = testing.DummyModel()
        profiles["user"] = karltesting.DummyProfile()
        profiles["moderator1"] = karltesting.DummyProfile()
        profiles["moderator2"] = karltesting.DummyProfile()

        mailer = karltesting.DummyMailer()
        karltesting.registerUtility(mailer, IMailDelivery)

        karltesting.registerDummySecurityPolicy("user")
        request = testing.DummyRequest({
            "form.submitted": "1",
            "message": "Message text.",
        })
        karltesting.registerDummyRenderer(
            'karl.views:templates/email_join_community.pt')
        response = self._callFUT(c, request)

        self.assertEqual(response.location,
                         "http://example.com/communities/community/"
                         "?status_message=Your+request+has+been+sent+"
                         "to+the+moderators.")
        self.assertEqual(len(mailer), 1)
        msg = mailer.pop()
        self.assertEqual(msg.mto, ["*****@*****.**",
                                   "*****@*****.**"])
Example #4
0
 def test_handle_submit_resend(self):
     karltesting.registerDummyRenderer(
         'karl.views:templates/email_invite_new.pt')
     context = self._makeCommunity()
     context.title = 'community'
     context.description = 'description'
     request = testing.DummyRequest()
     controller = self._makeOne(context, request)
     converted = {
         'members': [{
             'remove': False,
             'name': 'invitation',
             'resend': True,
             'moderator': False,
             'title': 'buz'
         }]
     }
     mailer = self._registerMailer()
     response = controller.handle_submit(converted)
     self.assertEqual(len(mailer), 1)
     self.assertEqual(
         response.location, 'http://example.com/communities/community/'
         'manage.html?status_message='
         'Membership+information+changed%3A+'
         'Resent+invitation+to+buz')
Example #5
0
    def test_submit_form(self):
        from repoze.sendmail.interfaces import IMailDelivery
        karltesting.registerDummyRenderer("templates/join_community.pt")

        c = karltesting.DummyCommunity()
        c.moderator_names = set(["moderator1", "moderator2"])
        site = c.__parent__.__parent__
        profiles = site["profiles"] = testing.DummyModel()
        profiles["user"] = karltesting.DummyProfile()
        profiles["moderator1"] = karltesting.DummyProfile()
        profiles["moderator2"] = karltesting.DummyProfile()

        mailer = karltesting.DummyMailer()
        karltesting.registerUtility(mailer, IMailDelivery)

        karltesting.registerDummySecurityPolicy("user")
        request = testing.DummyRequest({
            "form.submitted": "1",
            "message": "Message text.",
        })
        karltesting.registerDummyRenderer(
            'karl.views:templates/email_join_community.pt')
        response = self._callFUT(c, request)

        self.assertEqual(response.location,
                         "http://example.com/communities/community/"
                         "?status_message=Your+request+has+been+sent+"
                         "to+the+moderators.")
        self.assertEqual(len(mailer), 1)
        msg = mailer.pop()
        self.assertEqual(msg.mto, ["*****@*****.**",
                                   "*****@*****.**"])
    def test_handle_submit_new_to_karl(self):
        from repoze.lemonade.testing import registerContentFactory
        from karl.models.interfaces import IInvitation
        from karl.utilities.interfaces import IRandomId
        request = testing.DummyRequest()
        context = self._makeCommunity()
        mailer = self._registerMailer()
        registerCatalogSearch()
        def nonrandom(size=6):
            return 'A' * size
        karltesting.registerUtility(nonrandom, IRandomId)
        registerContentFactory(DummyInvitation, IInvitation)
        controller = self._makeOne(context, request)
        converted = {
            'email_addresses': [u'*****@*****.**'],
            'text': u'some text',
            }

        karltesting.registerDummyRenderer(
            'karl.views:templates/email_invite_new.pt')
        response = controller.handle_submit(converted)
        self.assertEqual(response.location,
          'http://example.com/manage.html?status_message=One+user+invited.++'
                         )
        invitation = context['A'*6]
        self.assertEqual(invitation.email, '*****@*****.**')
        self.assertEqual(1, len(mailer))
        self.assertEqual(mailer[0].mto, [u"*****@*****.**",])
 def test_handle_submit_already_in_karl(self):
     from repoze.lemonade.testing import registerContentFactory
     from karl.models.interfaces import IInvitation
     from karl.utilities.interfaces import IRandomId
     request = testing.DummyRequest()
     context = self._makeCommunity()
     mailer = self._registerMailer()
     registerCatalogSearch()
     profile = karltesting.DummyProfile(security_state='active')
     profile.__name__ = 'd'
     registerCatalogSearch(results={'[email protected]': [profile,]})
     def nonrandom(size=6):
         return 'A' * size
     karltesting.registerUtility(nonrandom, IRandomId)
     registerContentFactory(DummyInvitation, IInvitation)
     controller = self._makeOne(context, request)
     converted = {
         'email_addresses': [u'*****@*****.**'],
         'text': u'some text',
         }
     karltesting.registerDummyRenderer(
         'karl.views:templates/email_add_existing.pt')
     response = controller.handle_submit(converted)
     self.assertEqual(response.location,
       'http://example.com/manage.html?status_message=One+existing+Karl+user+added+to+community.++'
                      )
     self.failIf('A'*6 in context)
     self.assertEqual(context.users.added_groups,
                      [('d', 'group:community:members')])
Example #8
0
 def test_workflow_transition_from_custom(self):
     registerDummyRenderer('templates/edit_acl.pt')
     from repoze.workflow.testing import DummyWorkflow
     from zope.interface import Interface
     from zope.interface import directlyProvides
     workflow = DummyWorkflow()
     def state_info(context, request):
         return [{'name': 'foo', 'current': True, 'transitions': True},
                 {'name': 'bar', 'current': False, 'transitions': True}]
     workflow.state_info = state_info
     def get_dummy_workflow(*args, **kw):
         return workflow
     import karl.views.acl
     old_f = karl.views.acl.get_context_workflow
     karl.views.acl.get_context_workflow = get_dummy_workflow
     try:
         context = testing.DummyModel()
         context.state = 'foo'
         context.__custom_acl__ = []
         directlyProvides(Interface)
         request = testing.DummyRequest()
         request.POST['form.security_state'] = 1
         request.POST['security_state'] = 'bar'
         self._callFUT(context, request)
         self.assertEqual(workflow.transitioned[0]['to_state'], 'bar')
         self.assertEqual(workflow.resetted, [context,])
         self.failIf(hasattr(context, '__custom_acl__'))
     finally:
         karl.views.acl.get_context_workflow = old_f
Example #9
0
    def test_handle_submit_already_in_karl(self):
        from repoze.lemonade.testing import registerContentFactory
        from karl.models.interfaces import IInvitation
        from karl.utilities.interfaces import IRandomId
        request = testing.DummyRequest()
        context = self._makeCommunity()
        self._registerMailer()
        registerCatalogSearch()
        profile = karltesting.DummyProfile(security_state='active')
        profile.__name__ = 'd'
        registerCatalogSearch(results={'[email protected]': [
            profile,
        ]})

        def nonrandom(size=6):
            return 'A' * size

        karltesting.registerUtility(nonrandom, IRandomId)
        registerContentFactory(DummyInvitation, IInvitation)
        controller = self._makeOne(context, request)
        converted = {
            'email_addresses': [u'*****@*****.**'],
            'text': u'some text',
        }
        karltesting.registerDummyRenderer(
            'karl.views:templates/email_add_existing.pt')
        response = controller.handle_submit(converted)
        self.assertEqual(
            response.location,
            'http://example.com/manage.html?status_message=One+existing+Karl+user+added+to+community.++'
        )
        self.failIf('A' * 6 in context)
        self.assertEqual(context.users.added_groups,
                         [('d', 'group:community:members')])
 def test_handle_submit_success(self):
     from karl.models.interfaces import IProfile
     from repoze.lemonade.testing import registerContentFactory
     from repoze.sendmail.interfaces import IMailDelivery
     from repoze.workflow.testing import registerDummyWorkflow
     from karl.models.interfaces import ICommunity
     from zope.interface import directlyProvides
     workflow = registerDummyWorkflow('security')
     mailer = karltesting.DummyMailer()
     karltesting.registerUtility(mailer, IMailDelivery)
     registerContentFactory(DummyContent, IProfile)
     class DummyWhoPlugin(object):
         def remember(self, environ, identity):
             self.identity = identity
             return []
     request = self._makeRequest()
     community = testing.DummyModel()
     profiles = testing.DummyModel()
     community['profiles'] = profiles
     community.users = karltesting.DummyUsers()
     community.members_group_name = 'community:members'
     directlyProvides(community, ICommunity)
     context = self._makeContext()
     community['invite'] = context
     community.title = 'Community'
     community.description = 'Community'
     community.sessions = DummySessions()
     context.email = '*****@*****.**'
     controller = self._makeOne(context, request)
     converted = {'password':'******', 'password_confirm':'1',
                  'username':'******',
                  'firstname':'firstname', 'lastname':'lastname',
                  'phone':'phone', 'extension':'extension',
                  'department':'department', 'position':'position',
                  'organization':'organization', 'location':'location',
                  'country':'country', 'websites':['website'],
                  'languages':'languages', 'date_format':'en-US',
                  'biography':'bio',
                  }
     karltesting.registerDummyRenderer(
         'karl.views:templates/email_accept_invitation.pt')
     response = controller.handle_submit(converted)
     self.assertEqual(response.location,
                      'http://example.com/?status_message=Welcome%21')
     self.assertEqual(community.users.added,
                      ('username', 'username', '1', ['community:members']))
     profiles = community['profiles']
     self.failUnless('username' in profiles)
     self.assertEqual(workflow.initialized,[profiles['username']])
     profile = profiles['username']
     self.assertEqual('phone', profile.phone)
     self.assertEqual('firstname', profile.firstname)
     self.assertEqual('lastname', profile.lastname)
     self.assertEqual('bio', profile.biography)
     self.failIf('invite' in community)
     self.assertEqual(len(mailer), 1)
Example #11
0
 def test_confirmed(self):
     request = testing.DummyRequest({'confirm':'1'})
     context = testing.DummyModel(title='oldtitle')
     parent = DummyParent()
     parent['thename'] = context
     parent.catalog = karltesting.DummyCatalog({})
     parent.users = karltesting.DummyUsers({})
     karltesting.registerDummyRenderer('templates/delete_resource.pt')
     self._register()
     karltesting.registerDummySecurityPolicy('userid')
     response = self._callFUT(context, request)
     self.assertEqual(parent.deleted, 'thename')
     self.assertEqual(response.location, 'http://example.com/')
Example #12
0
 def test_show_form(self):
     c = karltesting.DummyCommunity()
     site = c.__parent__.__parent__
     profiles = site["profiles"] = testing.DummyModel()
     profiles["user"] = karltesting.DummyProfile()
     renderer = karltesting.registerDummyRenderer("templates/join_community.pt")
     karltesting.registerDummySecurityPolicy("user")
     request = testing.DummyRequest()
     karltesting.registerDummyRenderer("karl.views:templates/formfields.pt")
     self._callFUT(c, request)
     self.assertEqual(renderer.profile, profiles["user"])
     self.assertEqual(renderer.community, c)
     self.assertEqual(renderer.post_url, "http://example.com/communities/community/join.html")
Example #13
0
    def test_not_confirmed(self):
        from karl.testing import registerLayoutProvider
        registerLayoutProvider()

        request = testing.DummyRequest()
        context = testing.DummyModel(title='oldtitle')
        context.__name__  = 'thename'
        context.catalog = karltesting.DummyCatalog({})
        context.users = karltesting.DummyUsers({})
        karltesting.registerDummyRenderer('templates/delete_resource.pt')
        self._register()
        response = self._callFUT(context, request)
        self.assertTrue(isinstance(response, dict))
Example #14
0
    def test_not_confirmed(self):
        from karl.testing import registerLayoutProvider
        registerLayoutProvider()

        request = testing.DummyRequest()
        context = testing.DummyModel(title='oldtitle')
        context.__name__  = 'thename'
        context.catalog = karltesting.DummyCatalog({})
        context.users = karltesting.DummyUsers({})
        karltesting.registerDummyRenderer('templates/delete_resource.pt')
        self._register()
        response = self._callFUT(context, request)
        self.assertTrue(isinstance(response, dict))
Example #15
0
    def test_not_confirmed(self):
        from karl.testing import registerLayoutProvider

        registerLayoutProvider()

        request = testing.DummyRequest()
        context = testing.DummyModel(title="oldtitle")
        context.__name__ = "thename"
        context.catalog = karltesting.DummyCatalog({})
        context.users = karltesting.DummyUsers({})
        karltesting.registerDummyRenderer("templates/delete_resource.pt")
        self._register()
        response = self._callFUT(context, request)
        self.assertEqual(response.status, "200 OK")
Example #16
0
 def test___call__with_userid_get(self):
     from repoze.sendmail.interfaces import IMailDelivery
     request = testing.DummyRequest({"user_id": "admin"})
     context = self._getContext()
     mailer = karltesting.DummyMailer()
     karltesting.registerUtility(mailer, IMailDelivery)
     controller = self._makeOne(context, request)
     karltesting.registerDummyRenderer(
         'karl.views:templates/email_add_existing.pt')
     response = controller()
     self.assertEqual(context.users.added_groups, [('admin','members')])
     self.assertEqual(mailer[0].mto[0], '*****@*****.**')
     self.failUnless(
         response.location.startswith('http://example.com/manage.html'))
Example #17
0
 def test_confirmed(self):
     request = testing.DummyRequest({"confirm": "1"})
     context = testing.DummyModel(title="oldtitle")
     parent = DummyParent()
     parent["thename"] = context
     parent.catalog = karltesting.DummyCatalog({})
     parent.users = karltesting.DummyUsers({})
     parent["profiles"] = testing.DummyModel()
     karltesting.registerDummyRenderer("templates/delete_resource.pt")
     self._register()
     karltesting.registerDummySecurityPolicy("userid")
     response = self._callFUT(context, request)
     self.assertEqual(parent.deleted, "thename")
     self.assertEqual(response.location, "http://example.com/")
Example #18
0
 def test___call__with_userid_get(self):
     from repoze.sendmail.interfaces import IMailDelivery
     request = testing.DummyRequest({"user_id": "admin"})
     context = self._getContext()
     mailer = karltesting.DummyMailer()
     karltesting.registerUtility(mailer, IMailDelivery)
     controller = self._makeOne(context, request)
     karltesting.registerDummyRenderer(
         'karl.views:templates/email_add_existing.pt')
     response = controller()
     self.assertEqual(context.users.added_groups, [('admin', 'members')])
     self.assertEqual(mailer[0].mto[0], '*****@*****.**')
     self.failUnless(
         response.location.startswith('http://example.com/manage.html'))
Example #19
0
 def test_confirmed(self):
     request = testing.DummyRequest({'confirm':'1'})
     context = testing.DummyModel(title='oldtitle')
     parent = DummyParent()
     parent['thename'] = context
     parent.catalog = karltesting.DummyCatalog({})
     parent.users = karltesting.DummyUsers({})
     parent['profiles'] = testing.DummyModel()
     karltesting.registerDummyRenderer('templates/delete_resource.pt')
     self._register()
     karltesting.registerDummySecurityPolicy('userid')
     response = self._callFUT(context, request)
     self.assertEqual(parent.deleted, 'thename')
     self.assertEqual(response.location, 'http://example.com/')
 def test_handle_submit_success(self):
     from repoze.sendmail.interfaces import IMailDelivery
     request = testing.DummyRequest()
     context = self._getContext()
     mailer = karltesting.DummyMailer()
     karltesting.registerUtility(mailer, IMailDelivery)
     controller = self._makeOne(context, request)
     converted = {'users': (u'admin',), 'text':'some_text'}
     karltesting.registerDummyRenderer(
         'karl.views:templates/email_add_existing.pt')
     response = controller.handle_submit(converted)
     self.assertEqual(context.users.added_groups, [('admin','members')])
     self.assertEqual(mailer[0].mto[0], '*****@*****.**')
     self.failUnless(
         response.location.startswith('http://example.com/manage.html'))
Example #21
0
 def test_handle_submit_success(self):
     from repoze.sendmail.interfaces import IMailDelivery
     request = testing.DummyRequest()
     context = self._getContext()
     mailer = karltesting.DummyMailer()
     karltesting.registerUtility(mailer, IMailDelivery)
     controller = self._makeOne(context, request)
     converted = {'users': (u'admin', ), 'text': 'some_text'}
     karltesting.registerDummyRenderer(
         'karl.views:templates/email_add_existing.pt')
     response = controller.handle_submit(converted)
     self.assertEqual(context.users.added_groups, [('admin', 'members')])
     self.assertEqual(mailer[0].mto[0], '*****@*****.**')
     self.failUnless(
         response.location.startswith('http://example.com/manage.html'))
Example #22
0
    def test_long_history(self):
        from repoze.postoffice.message import Message
        comments = []
        for i in xrange(6):
            comments.append(
                self._add_comment(self.blogentry, "comment%d" % i))

        renderer = karltesting.registerDummyRenderer(
            'templates/email_blog_comment_alert.pt')
        request = testing.DummyRequest()
        alert = self._makeOne(self.comment, self.profile, request)
        self.assertEqual(1, len(alert.mto))
        self.assertEqual("*****@*****.**", alert.mto[0])

        self.failUnless(isinstance(alert.message, Message))
        self.assertEqual(alert.message["reply-to"],
                         u'"Dummy Communit\xe0" <community+blog-7FFFFFFF'
                          '@karl3.example.com>'
                        )

        messages, n = renderer.history
        self.assertEqual(n, 7)
        self.assertEqual(len(messages), 7)
        self.assertEqual(messages[0], self.blogentry)
        self.assertEqual(messages[1], comments[0])
        self.assertEqual(messages[2], comments[1])
        self.assertEqual(messages[3], comments[2])
        self.assertEqual(messages[4], comments[3])
        self.assertEqual(messages[5], comments[4])
        self.assertEqual(messages[6], comments[5])
Example #23
0
    def test_long_history(self):
        from repoze.postoffice.message import Message
        comments = []
        for i in xrange(6):
            comments.append(self._add_comment(self.blogentry, "comment%d" % i))

        renderer = karltesting.registerDummyRenderer(
            'templates/email_blog_comment_alert.pt')
        request = testing.DummyRequest()
        alert = self._makeOne(self.comment, self.profile, request)
        self.assertEqual(1, len(alert.mto))
        self.assertEqual("*****@*****.**", alert.mto[0])

        self.failUnless(isinstance(alert.message, Message))
        self.assertEqual(
            alert.message["reply-to"],
            u'"Dummy Communit\xe0" <community+blog-7FFFFFFF'
            '@karl3.example.com>')

        messages, n = renderer.history
        self.assertEqual(n, 7)
        self.assertEqual(len(messages), 7)
        self.assertEqual(messages[0], self.blogentry)
        self.assertEqual(messages[1], comments[0])
        self.assertEqual(messages[2], comments[1])
        self.assertEqual(messages[3], comments[2])
        self.assertEqual(messages[4], comments[3])
        self.assertEqual(messages[5], comments[4])
        self.assertEqual(messages[6], comments[5])
Example #24
0
 def test_render_footer_no_adapter(self):
     context = testing.DummyModel()
     request = testing.DummyRequest()
     api = self._makeOne(context, request)
     renderer = karltesting.registerDummyRenderer('templates/footer.pt')
     api.render_footer()
     renderer.assert_(api=api)
Example #25
0
 def test_generic_layout(self):
     renderer = karltesting.registerDummyRenderer(
         'karl.views:templates/generic_layout.pt')
     context = testing.DummyModel()
     request = testing.DummyRequest()
     api = self._makeOne(context, request)
     api.generic_layout(a=1)
     renderer.assert_(a=1)
Example #26
0
 def test_generic_layout(self):
     renderer = karltesting.registerDummyRenderer(
         'karl.views:templates/generic_layout.pt')
     context = testing.DummyModel()
     request = testing.DummyRequest()
     api = self._makeOne(context, request)
     api.generic_layout(a=1)
     renderer.assert_(a=1)
Example #27
0
 def test_render_footer_no_adapter(self):
     context = testing.DummyModel()
     request = testing.DummyRequest()
     api = self._makeOne(context, request)
     renderer = karltesting.registerDummyRenderer(
         'templates/footer.pt')
     api.render_footer()
     renderer.assert_(api=api)
 def test_handle_submit_resend(self):
     karltesting.registerDummyRenderer(
         'karl.views:templates/email_invite_new.pt')
     context = self._makeCommunity()
     context.title = 'community'
     context.description = 'description'
     request = testing.DummyRequest()
     controller = self._makeOne(context, request)
     converted = {'members':[{'remove':False, 'name':'invitation',
                              'resend':True, 'moderator':False,
                              'title':'buz'}]}
     mailer = self._registerMailer()
     response = controller.handle_submit(converted)
     self.assertEqual(len(mailer), 1)
     self.assertEqual(response.location,
                      'http://example.com/communities/community/'
                      'manage.html?status_message='
                      'Membership+information+changed%3A+'
                      'Resent+invitation+to+buz')
Example #29
0
    def test_workflow_transition_from_custom(self):
        registerDummyRenderer('templates/edit_acl.pt')
        from repoze.workflow.testing import DummyWorkflow
        from zope.interface import Interface
        from zope.interface import directlyProvides
        workflow = DummyWorkflow()

        def state_info(context, request):
            return [{
                'name': 'foo',
                'current': True,
                'transitions': True
            }, {
                'name': 'bar',
                'current': False,
                'transitions': True
            }]

        workflow.state_info = state_info

        def get_dummy_workflow(*args, **kw):
            return workflow

        import karl.views.acl
        old_f = karl.views.acl.get_context_workflow
        karl.views.acl.get_context_workflow = get_dummy_workflow
        try:
            context = testing.DummyModel()
            context.state = 'foo'
            context.__custom_acl__ = []
            directlyProvides(Interface)
            request = testing.DummyRequest()
            request.POST['form.security_state'] = 1
            request.POST['security_state'] = 'bar'
            self._callFUT(context, request)
            self.assertEqual(workflow.transitioned[0]['to_state'], 'bar')
            self.assertEqual(workflow.resetted, [
                context,
            ])
            self.failIf(hasattr(context, '__custom_acl__'))
        finally:
            karl.views.acl.get_context_workflow = old_f
Example #30
0
 def test_it(self):
     from zope.interface import Interface
     from karl.models.interfaces import ICommunity
     import datetime
     context = testing.DummyModel(title='thetitle')
     directlyProvides(context, ICommunity)
     context.member_names = context.moderator_names = set()
     context.title = "Community"
     foo = testing.DummyModel()
     foo.modified = datetime.datetime(2009, 9, 2, 10, 28, 0)
     request = testing.DummyRequest()
     karltesting.registerDummyRenderer(
         'karl.views:templates/atomfeed.pt')
     from karl.models.interfaces import ICatalogSearch
     from karl.models.adapters import CatalogSearch
     catalog = karltesting.DummyCatalog({1:'/foo'})
     karltesting.registerModels({'/foo':foo})
     context.catalog = catalog
     karltesting.registerAdapter(CatalogSearch, (Interface), ICatalogSearch)
     self._callFUT(context, request)
Example #31
0
    def test_it_inform_moderators(self):
        from pyramid.interfaces import ISettings
        karltesting.registerUtility(karltesting.DummySettings(), ISettings)

        site = karltesting.DummyModel()
        site['fred'] = profile = karltesting.DummyProfile()
        profile.title = 'Fred Flintstone'
        profile.email = '*****@*****.**'
        site['clint'] = moderator = karltesting.DummyProfile()
        moderator.title = 'Clint'
        moderator.email = '*****@*****.**'

        site.users = karltesting.DummyUsers()
        site.users.add('fred', 'fred', 'password', set(
            ('group.community:Test1:members',
             'group.community:Test2:members',
             'group.community:Test2:moderators',
             'group.SomeGroup')))
        site.users.add('clint', 'clint', 'password', set(
            ('group.community:Test1:moderators',
             'group.community:Test2:moderators')))

        site['communities'] = communities = karltesting.DummyModel()
        communities['Test1'] = karltesting.DummyModel(title='Test One')
        communities['Test2'] = karltesting.DummyModel(title='Test Two')

        mailer = karltesting.registerDummyMailer()
        renderer = karltesting.registerDummyRenderer(
            'templates/email_notify_former_staff.pt'
        )

        self._call_fut(profile)

        removed = site.users.removed_groups
        self.failIf(('fred', 'group.SomeGroup') in removed)
        self.failUnless(('fred', 'group.community:Test1:members') in removed)
        self.failUnless(('fred', 'group.community:Test2:moderators')
                        in removed)

        self.assertEqual(len(mailer), 1, mailer)
        sent = mailer[0]
        self.assertEqual(sent.mto, ['Clint <*****@*****.**>'])
        self.assertEqual(renderer.name, 'Fred Flintstone')
        self.assertEqual(renderer.communities, [
            {'unremove_url': 'http://offline.example.com/app/communities/Test1'
                             '/members/add_existing.html?user_id=fred',
             'title': 'Test One'},
            {'unremove_url': 'http://offline.example.com/app/communities/Test2'
                             '/members/add_existing.html?user_id=fred',
             'title': 'Test Two'}]
        )
 def test_handle_submit_inactive_user(self):
     from repoze.lemonade.testing import registerContentFactory
     from karl.models.interfaces import IInvitation
     from karl.utilities.interfaces import IRandomId
     request = testing.DummyRequest()
     context = self._makeCommunity()
     mailer = self._registerMailer()
     registerCatalogSearch()
     profile = karltesting.DummyProfile(security_state='inactive')
     profile.__name__ = 'd'
     registerCatalogSearch(results={'[email protected]': [profile,]})
     def nonrandom(size=6):
         return 'A' * size
     karltesting.registerUtility(nonrandom, IRandomId)
     registerContentFactory(DummyInvitation, IInvitation)
     controller = self._makeOne(context, request)
     converted = {
         'email_addresses': [u'*****@*****.**'],
         'text': u'some text',
         }
     karltesting.registerDummyRenderer(
         'karl.views:templates/email_add_existing.pt')
     from pyramid_formish import ValidationError
     self.assertRaises(ValidationError, controller.handle_submit, converted)
Example #33
0
    def test_digest(self):
        from repoze.postoffice.message import Message
        renderer = karltesting.registerDummyRenderer(
            'templates/email_blog_comment_alert.pt')
        renderer.string_response = "<body>Dummy message body.</body>"

        request = testing.DummyRequest()
        alert = self._makeOne(self.comment, self.profile, request)
        alert.alert.digest = True
        self.assertEqual(1, len(alert.mto))
        self.assertEqual("*****@*****.**", alert.mto[0])

        self.failUnless(isinstance(alert.message, Message))
        self.assertEqual(alert.message["reply-to"],
                         u'"Dummy Communit\xe0" <community+blog-7FFFFFFF'
                         u'@karl3.example.com>')
Example #34
0
    def test_digest(self):
        from repoze.postoffice.message import Message
        renderer = karltesting.registerDummyRenderer(
            'templates/email_blog_comment_alert.pt')
        renderer.string_response = "<body>Dummy message body.</body>"

        request = testing.DummyRequest()
        alert = self._makeOne(self.comment, self.profile, request)
        alert.alert.digest = True
        self.assertEqual(1, len(alert.mto))
        self.assertEqual("*****@*****.**", alert.mto[0])

        self.failUnless(isinstance(alert.message, Message))
        self.assertEqual(
            alert.message["reply-to"],
            u'"Dummy Communit\xe0" <community+blog-7FFFFFFF'
            u'@karl3.example.com>')
Example #35
0
    def test_alert(self):
        from repoze.postoffice.message import Message
        renderer = karltesting.registerDummyRenderer(
            'templates/email_blog_comment_alert.pt')
        request = testing.DummyRequest()
        alert = self._makeOne(self.comment, self.profile, request)
        self.assertEqual(1, len(alert.alert.mto))
        self.assertEqual("*****@*****.**", alert.alert.mto[0])

        self.failUnless(isinstance(alert.message, Message))
        self.assertEqual(alert.message["reply-to"],
                         u'"Dummy Communit\xe0" <community+blog-7FFFFFFF'
                         u'@karl3.example.com>')
        self.assertEqual(alert.message['Precedence'], 'bulk')

        messages, n = renderer.history
        self.assertEqual(n, 1)
        self.assertEqual(messages[0], self.blogentry)
Example #36
0
    def test_alert(self):
        from repoze.postoffice.message import Message
        renderer = karltesting.registerDummyRenderer(
            'templates/email_blog_comment_alert.pt')
        request = testing.DummyRequest()
        alert = self._makeOne(self.comment, self.profile, request)
        self.assertEqual(1, len(alert.mto))
        self.assertEqual("*****@*****.**", alert.mto[0])

        self.failUnless(isinstance(alert.message, Message))
        self.assertEqual(
            alert.message["reply-to"],
            u'"Dummy Communit\xe0" <community+blog-7FFFFFFF'
            '@karl3.example.com>')
        self.assertEqual(alert.message['Precedence'], 'bulk')

        messages, n = renderer.history
        self.assertEqual(n, 1)
        self.assertEqual(messages[0], self.blogentry)
Example #37
0
 def test_show_members(self):
     from zope.interface import Interface
     from karl.models.interfaces import ICatalogSearch
     context = testing.DummyModel()
     context.member_names = ['a']
     context.moderator_names = ['b']
     profiles = testing.DummyModel()
     profiles['a'] = karltesting.DummyProfile()
     profiles['b'] = karltesting.DummyProfile()
     context['profiles'] = profiles
     d = {1:profiles['a'], 2:profiles['b']}
     searchkw = {}
     def resolver(docid):
         return d.get(docid)
     def dummy_catalog_search(context):
         def search(**kw):
             searchkw.update(kw)
             return 2, [1,2], resolver
         return search
     karltesting.registerAdapter(dummy_catalog_search, (Interface),
                             ICatalogSearch)
     from karl.models.interfaces import ICommunity
     from zope.interface import directlyProvides
     directlyProvides(context, ICommunity)
     request = testing.DummyRequest(params={'hide_pictures':True})
     renderer = karltesting.registerDummyRenderer('templates/show_members.pt')
     self._callFUT(context, request)
     actions = [('Manage Members', 'manage.html'),
                ('Add Existing', 'add_existing.html'),
                ('Invite New', 'invite_new.html')]
     self.assertEqual(renderer.actions, actions)
     self.assertEqual(len(renderer.members), 2)
     self.assertEqual(len(renderer.moderators), 1)
     self.assertEqual(renderer.hide_pictures, True)
     self.assertEqual(len(renderer.submenu), 2)
     self.assertEqual(renderer.submenu[0]['make_link'], True)
     self.assertEqual(renderer.submenu[1]['make_link'], False)
     self.assertEqual(searchkw['sort_index'], 'lastfirst')
    def test_it(self):
        import mock
        from zope.interface import Interface
        from zope.interface import alsoProvides
        from pyramid.testing import DummyModel
        from pyramid.testing import DummyRequest
        from karl.models.interfaces import ICommunity
        from karl.models.interfaces import ISite
        from karl.models.interfaces import IIntranet
        from karl.models.interfaces import IIntranets
        from karl.views.interfaces import IIntranetPortlet
        from karl.testing import registerAdapter
        from karl.testing import registerDummyRenderer
        ANY = (Interface, Interface)
        WELL = u'<h1>WELL</h1>'
        BODY = u'<h1>BODY</h1>'
        FEATURE = u'<p>FEATURE</p>'
        root = DummyModel()
        alsoProvides(root, ISite)
        offices = root['offices'] = DummyModel()
        alsoProvides(offices, IIntranets)
        offices.feature = FEATURE
        context = offices['nice'] = DummyModel(title='nice office')
        context['foo'] = DummyModel()
        context['bar'] = DummyModel()
        context['spam'] = DummyModel()
        alsoProvides(context, ICommunity)
        alsoProvides(context, IIntranet)
        context.middle_portlets = ['foo', 'bar|baz']
        context.right_portlets = ['spam|qux']
        request = DummyRequest()
        request.layout_manager = mock.Mock()

        class _Portlet(object):
            def __init__(self, text):
                self._text = text
            @property
            def asHTML(self):
                return self._text

        _nameless_contexts = []
        NAMELESS = '<p>NAMELESS</p>'
        def _nameless(context, req):
            assert req is request
            _nameless_contexts.append(context)
            return _Portlet(NAMELESS)
        registerAdapter(_nameless, ANY, IIntranetPortlet)

        _baz_contexts = []
        BAZ = '<p>BAZ</p>'
        def _baz(context, req):
            assert req is request
            _baz_contexts.append(context)
            return _Portlet(BAZ)
        registerAdapter(_baz, ANY, IIntranetPortlet, name='baz')

        _qux_contexts = []
        QUX = '<p>QUX</p>'
        def _qux(context, req):
            assert req is request
            _qux_contexts.append(context)
            return _Portlet(QUX)
        registerAdapter(_qux, ANY, IIntranetPortlet, name='qux')

        _ihb_data = []
        def _IHB(data, _):
            _ihb_data.append(data)
            return WELL
        registerDummyRenderer(
            'karl.views:templates/intranethome_body.pt', _IHB)

        _ihp_data = []
        def _IHP(data, _):
            _ihp_data.append(data)
            return BODY
        registerDummyRenderer(
            'karl.views:templates/intranet_homepage.pt', _IHP)

        response = self._callFUT(context, request)
        self.assertEqual(response.body, BODY)
        self.assertEqual(len(_ihp_data), 1)
        self.assertEqual(_ihp_data[0]['body'], WELL)
        self.assertEqual(len(_ihb_data), 1)
        self.assertTrue(_ihb_data[0]['current_intranet'] is context)
        self.assertEqual(_ihb_data[0]['feature'], FEATURE)
        self.assertEqual(_ihb_data[0]['middle_portlet_html'], NAMELESS + BAZ)
        self.assertEqual(_ihb_data[0]['right_portlet_html'], QUX)
Example #39
0
    def test_it(self):
        from zope.interface import Interface
        from zope.interface import alsoProvides
        from pyramid.testing import DummyModel
        from pyramid.testing import DummyRequest
        from karl.models.interfaces import ICommunity
        from karl.models.interfaces import ISite
        from karl.models.interfaces import IIntranet
        from karl.models.interfaces import IIntranets
        from karl.views.interfaces import IIntranetPortlet
        from karl.testing import registerAdapter
        from karl.testing import registerDummyRenderer

        ANY = (Interface, Interface)
        WELL = u"<h1>WELL</h1>"
        BODY = u"<h1>BODY</h1>"
        FEATURE = u"<p>FEATURE</p>"
        root = DummyModel()
        alsoProvides(root, ISite)
        offices = root["offices"] = DummyModel()
        alsoProvides(offices, IIntranets)
        offices.feature = FEATURE
        context = offices["nice"] = DummyModel(title="nice office")
        context["foo"] = DummyModel()
        context["bar"] = DummyModel()
        context["spam"] = DummyModel()
        alsoProvides(context, ICommunity)
        alsoProvides(context, IIntranet)
        context.middle_portlets = ["foo", "bar|baz"]
        context.right_portlets = ["spam|qux"]
        request = DummyRequest()

        class _Portlet(object):
            def __init__(self, text):
                self._text = text

            @property
            def asHTML(self):
                return self._text

        _nameless_contexts = []
        NAMELESS = "<p>NAMELESS</p>"

        def _nameless(context, req):
            assert req is request
            _nameless_contexts.append(context)
            return _Portlet(NAMELESS)

        registerAdapter(_nameless, ANY, IIntranetPortlet)

        _baz_contexts = []
        BAZ = "<p>BAZ</p>"

        def _baz(context, req):
            assert req is request
            _baz_contexts.append(context)
            return _Portlet(BAZ)

        registerAdapter(_baz, ANY, IIntranetPortlet, name="baz")

        _qux_contexts = []
        QUX = "<p>QUX</p>"

        def _qux(context, req):
            assert req is request
            _qux_contexts.append(context)
            return _Portlet(QUX)

        registerAdapter(_qux, ANY, IIntranetPortlet, name="qux")

        _ihb_data = []

        def _IHB(data, _):
            _ihb_data.append(data)
            return WELL

        registerDummyRenderer("karl.views:templates/intranethome_body.pt", _IHB)

        _ihp_data = []

        def _IHP(data, _):
            _ihp_data.append(data)
            return BODY

        registerDummyRenderer("karl.views:templates/intranet_homepage.pt", _IHP)

        response = self._callFUT(context, request)
        self.assertEqual(response.body, BODY)
        self.assertEqual(len(_ihp_data), 1)
        self.assertEqual(_ihp_data[0]["body"], WELL)
        self.assertEqual(len(_ihb_data), 1)
        self.assertTrue(_ihb_data[0]["current_intranet"] is context)
        self.assertEqual(_ihb_data[0]["feature"], FEATURE)
        self.assertEqual(_ihb_data[0]["middle_portlet_html"], NAMELESS + BAZ)
        self.assertEqual(_ihb_data[0]["right_portlet_html"], QUX)
Example #40
0
 def setUp(self):
     cleanUp()
     karltesting.registerDummyRenderer(
         'karl.views:templates/generic_layout.pt')
     karltesting.registerDummyRenderer(
         'karl.views:templates/community_layout.pt')
Example #41
0
 def setUp(self):
     cleanUp()
     karltesting.registerDummyRenderer(
         'karl.views:templates/generic_layout.pt')
     karltesting.registerDummyRenderer(
         'karl.views:templates/community_layout.pt')
Example #42
0
    def test_handle_submit_success(self):
        from karl.models.interfaces import IProfile
        from repoze.lemonade.testing import registerContentFactory
        from repoze.sendmail.interfaces import IMailDelivery
        from repoze.workflow.testing import registerDummyWorkflow
        from karl.models.interfaces import ICommunity
        from zope.interface import directlyProvides
        workflow = registerDummyWorkflow('security')
        mailer = karltesting.DummyMailer()
        karltesting.registerUtility(mailer, IMailDelivery)
        registerContentFactory(DummyContent, IProfile)

        class DummyWhoPlugin(object):
            def remember(self, environ, identity):
                self.identity = identity
                return []

        request = self._makeRequest()
        community = testing.DummyModel()
        profiles = testing.DummyModel()
        community['profiles'] = profiles
        community.users = karltesting.DummyUsers()
        community.members_group_name = 'community:members'
        directlyProvides(community, ICommunity)
        context = self._makeContext()
        community['invite'] = context
        community.title = 'Community'
        community.description = 'Community'
        community.sessions = DummySessions()
        context.email = '*****@*****.**'
        controller = self._makeOne(context, request)
        converted = {
            'password': '******',
            'password_confirm': '1',
            'username': '******',
            'firstname': 'firstname',
            'lastname': 'lastname',
            'phone': 'phone',
            'extension': 'extension',
            'department': 'department',
            'position': 'position',
            'organization': 'organization',
            'location': 'location',
            'country': 'country',
            'websites': ['website'],
            'languages': 'languages',
            'date_format': 'en-US',
            'biography': 'bio',
        }
        karltesting.registerDummyRenderer(
            'karl.views:templates/email_accept_invitation.pt')
        response = controller.handle_submit(converted)
        self.assertEqual(response.location,
                         'http://example.com/?status_message=Welcome%21')
        self.assertEqual(community.users.added,
                         ('username', 'username', '1', ['community:members']))
        profiles = community['profiles']
        self.failUnless('username' in profiles)
        self.assertEqual(workflow.initialized, [profiles['username']])
        profile = profiles['username']
        self.assertEqual('phone', profile.phone)
        self.assertEqual('firstname', profile.firstname)
        self.assertEqual('lastname', profile.lastname)
        self.assertEqual('bio', profile.biography)
        self.failIf('invite' in community)
        self.assertEqual(len(mailer), 1)
Example #43
0
 def setUp(self):
     testing.cleanUp()
     renderer = karltesting.registerDummyRenderer(
         "karl.views:templates/generic_layout.pt")
Example #44
0
    def test_it(self):
        from zope.interface import Interface
        from zope.interface import alsoProvides
        from pyramid.testing import DummyModel
        from pyramid.testing import DummyRequest
        from karl.models.interfaces import ICommunity
        from karl.models.interfaces import ISite
        from karl.models.interfaces import IIntranet
        from karl.models.interfaces import IIntranets
        from karl.views.interfaces import IIntranetPortlet
        from karl.testing import registerAdapter
        from karl.testing import registerDummyRenderer
        ANY = (Interface, Interface)
        WELL = u'<h1>WELL</h1>'
        BODY = u'<h1>BODY</h1>'
        FEATURE = u'<p>FEATURE</p>'
        root = DummyModel()
        alsoProvides(root, ISite)
        offices = root['offices'] = DummyModel()
        alsoProvides(offices, IIntranets)
        offices.feature = FEATURE
        context = offices['nice'] = DummyModel(title='nice office')
        context['foo'] = DummyModel()
        context['bar'] = DummyModel()
        context['spam'] = DummyModel()
        alsoProvides(context, ICommunity)
        alsoProvides(context, IIntranet)
        context.middle_portlets = ['foo', 'bar|baz']
        context.right_portlets = ['spam|qux']
        request = DummyRequest()

        class _Portlet(object):
            def __init__(self, text):
                self._text = text
            @property
            def asHTML(self):
                return self._text

        _nameless_contexts = []
        NAMELESS = '<p>NAMELESS</p>'
        def _nameless(context, req):
            assert req is request
            _nameless_contexts.append(context)
            return _Portlet(NAMELESS)
        registerAdapter(_nameless, ANY, IIntranetPortlet)

        _baz_contexts = []
        BAZ = '<p>BAZ</p>'
        def _baz(context, req):
            assert req is request
            _baz_contexts.append(context)
            return _Portlet(BAZ)
        registerAdapter(_baz, ANY, IIntranetPortlet, name='baz')

        _qux_contexts = []
        QUX = '<p>QUX</p>'
        def _qux(context, req):
            assert req is request
            _qux_contexts.append(context)
            return _Portlet(QUX)
        registerAdapter(_qux, ANY, IIntranetPortlet, name='qux')

        _ihb_data = []
        def _IHB(data, _):
            _ihb_data.append(data)
            return WELL
        registerDummyRenderer(
            'karl.views:templates/intranethome_body.pt', _IHB)

        _ihp_data = []
        def _IHP(data, _):
            _ihp_data.append(data)
            return BODY
        registerDummyRenderer(
            'karl.views:templates/intranet_homepage.pt', _IHP)

        response = self._callFUT(context, request)
        self.assertEqual(response.body, BODY)
        self.assertEqual(len(_ihp_data), 1)
        self.assertEqual(_ihp_data[0]['body'], WELL)
        self.assertEqual(len(_ihb_data), 1)
        self.assertTrue(_ihb_data[0]['current_intranet'] is context)
        self.assertEqual(_ihb_data[0]['feature'], FEATURE)
        self.assertEqual(_ihb_data[0]['middle_portlet_html'], NAMELESS + BAZ)
        self.assertEqual(_ihb_data[0]['right_portlet_html'], QUX)