Beispiel #1
0
    def test_handle_submit_success(self):
        self._register()
        from zope.interface import directlyProvides
        from karl.models.interfaces import ISite
        from karl.models.interfaces import ICommunity
        from repoze.lemonade.interfaces import IContentFactory
        context = testing.DummyModel()
        directlyProvides(context, ISite)
        tags = context.tags = testing.DummyModel()
        _tagged = []
        def _update(item, user, tags):
            _tagged.append((item, user, tags))
        tags.update = _update
        karltesting.registerDummySecurityPolicy('userid')
        workflow = self._registerDummyWorkflow()
        karltesting.registerAdapter(lambda *arg: DummyCommunity,
                                    (ICommunity,),
                                    IContentFactory)
        dummy_tool_factory = DummyToolFactory()
        self._registerAddables([{'name':'blog', 'title':'blog',
                                 'component':dummy_tool_factory}])
        context.users = karltesting.DummyUsers({})
        context.catalog = karltesting.DummyCatalog({1:'/foo'})
        request = testing.DummyRequest()
        controller = self._makeOne(context, request)
        converted = {'title':'Thetitle yo',
                     'description':'thedescription',
                     'text':'thetext',
                     'tools': ['blog'],
                     'security_state': 'private',
                     'tags': ['foo'],
                     'default_tool': 'blog',
                     }
        result = controller.handle_submit(converted)
        rl = 'http://example.com/thetitle-yo/members/add_existing.html'
        self.failUnless(result.location.startswith(rl))
        community = context['thetitle-yo']
        self.assertEqual(community.title, 'Thetitle yo')
        self.assertEqual(community.description, 'thedescription')
        self.assertEqual(community.text, 'thetext')
        self.assertEqual(community.default_tool, 'blog')
        self.assertEqual(community.creator, 'userid')
        self.assertEqual(community.modified_by, 'userid')
        self.assertEqual(
            context.users.added_groups,
            [('userid', 'moderators'), ('userid', 'members') ]
        )
        self.assertEqual(dummy_tool_factory.added, True)
        self.assertEqual(len(_tagged), 1)
        self.assertEqual(_tagged[0][0], None)
        self.assertEqual(_tagged[0][1], 'userid')
        self.assertEqual(_tagged[0][2], ['foo'])
        self.assertEqual(workflow.transitioned[0]['to_state'], 'private')

        # try again w/ an invalid default_tool
        converted['title'] = 'Another title yo'
        converted['default_tool'] = 'wiki'
        result = controller.handle_submit(converted)
        community = context['another-title-yo']
        self.failUnless(community.default_tool is None)
Beispiel #2
0
 def _makeCommunity(self):
     from karl.models.interfaces import ICommunity
     from karl.models.interfaces import IInvitation
     from zope.interface import directlyProvides
     community = testing.DummyModel()
     community.member_names = set(['a'])
     community.moderator_names = set(['b', 'c'])
     site = testing.DummyModel()
     site['communities'] = testing.DummyModel()
     site['communities']['community'] = community
     profiles = testing.DummyModel()
     profiles['a'] = karltesting.DummyProfile()
     profiles['b'] = karltesting.DummyProfile()
     profiles['c'] = karltesting.DummyProfile()
     invitation = testing.DummyModel(email='*****@*****.**',
                                     message='message')
     directlyProvides(invitation, IInvitation)
     community['invitation'] = invitation
     site['profiles'] = profiles
     users = karltesting.DummyUsers(community)
     site.users = users
     directlyProvides(community, ICommunity)
     community.moderators_group_name = 'moderators'
     community.members_group_name = 'members'
     return community
Beispiel #3
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))
Beispiel #4
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'}]
        )
Beispiel #5
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/')
Beispiel #6
0
 def _makeCommunity(self):
     from karl.models.interfaces import ICommunity
     from zope.interface import directlyProvides
     community = testing.DummyModel()
     community.member_names = set(['a'])
     community.moderator_names = set(['b', 'c'])
     users = karltesting.DummyUsers(community)
     community.users = users
     directlyProvides(community, ICommunity)
     community.moderators_group_name = 'group:community:moderators'
     community.members_group_name = 'group:community:members'
     community.title = 'community'
     community.description = 'description'
     return community
Beispiel #7
0
    def _getContext(self):
        context = testing.DummyModel()
        from karl.models.interfaces import ICommunity
        from zope.interface import directlyProvides
        directlyProvides(context, ICommunity)
        context.users = karltesting.DummyUsers()
        context.title = 'thetitle'
        context.description = 'description'
        context.members_group_name = 'members'
        context['profiles'] = testing.DummyModel()
        admin = testing.DummyModel()
        admin.email = '*****@*****.**'
        context['profiles']['admin'] = admin

        return context
Beispiel #8
0
    def test_it_dont_inform_moderators(self):
        site = karltesting.DummyModel()
        site['fred'] = profile = karltesting.DummyProfile()
        site.users = karltesting.DummyUsers()
        site.users.add('fred', 'fred', 'password', set(
            ('group.community:Test1:members',
             'group.community:Test2:moderators',
             'group.SomeGroup')))

        self._call_fut(profile, False)

        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)
Beispiel #9
0
    def setUp(self):
        testing.cleanUp()

        from karl.models.contentfeeds import SiteEvents

        self.root = root = karltesting.DummyModel()
        root['profiles'] = karltesting.DummyModel()
        root.users = karltesting.DummyUsers()

        root['a'] = karltesting.DummyModel(creator='chris')
        root['b'] = karltesting.DummyModel(modified_by='chris')

        root.events = events = SiteEvents()
        events.push(userid='chris', profile_url='/profiles/chris',
                    name='Chris R', anumber=123)

        class DummySearchAdapter(object):
            def __init__(self, context):
                pass

            def __call__(self, **kw):
                resolver = lambda x: root.get(x)
                if kw.get('creator') == 'chris':
                    return 1, ['a'], resolver
                if kw.get('modified_by') == 'chris':
                    return 1, ['b'], resolver
                return 0, [], resolver

        from zope.interface import Interface
        from karl.models.interfaces import ICatalogSearch
        karltesting.registerAdapter(DummySearchAdapter, (Interface, Interface),
                                ICatalogSearch)
        karltesting.registerAdapter(DummySearchAdapter, (Interface,),
                                ICatalogSearch)

        root.catalog = catalog = karltesting.DummyModel()
        catalog['creator'] =  DummyCatalogIndex()
        catalog['modified_by'] =  DummyCatalogIndex()
Beispiel #10
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)