Example #1
0
    def setUp(self):
        from zope.interface import directlyProvides
        from karl.content.interfaces import ICommunityFile

        config = cleanUp()
        config.setup_registry()  # this is not a unit test

        karltesting.registerSettings()

        # Create dummy site skel
        community = karltesting.DummyCommunity()
        site = community.__parent__.__parent__

        profiles = testing.DummyModel()
        site["profiles"] = profiles
        self.profile = profiles["member"] = karltesting.DummyProfile()
        profiles["creator"] = karltesting.DummyProfile()

        community["files"] = testing.DummyModel()

        f = testing.DummyModel(text="This is a test",
                               description="Some description")
        community["files"]["file"] = f
        f.title = "An interesting file"
        f.docid = 0
        directlyProvides(f, ICommunityFile)
        self.f = f
        f.creator = "creator"
Example #2
0
 def test_it(self):
     from zope.interface import Interface
     from zope.interface import directlyProvides
     from karl.models.interfaces import ICatalogSearch
     from karl.models.interfaces import ICommunity
     context = testing.DummyModel()
     directlyProvides(context, ICommunity)
     context.member_names = set('a',)
     context.moderator_names = set()
     request = testing.DummyRequest(params={'val': 'a'})
     profile_1 = karltesting.DummyProfile(__name__='a',
                                          security_state='active')
     profile_2 = karltesting.DummyProfile(__name__='b',
                                          security_state='active')
     profile_3 = karltesting.DummyProfile(__name__='c',
                                          security_state='active')
     profile_4 = karltesting.DummyProfile(__name__='d',
                                          security_state='inactive')
     def resolver(docid):
         d = {1: profile_1, 2: profile_2, 3: profile_3, 4: profile_4}
         return d.get(docid)
     def dummy_catalog_search(context):
         def search(**kw):
             return 3, [1, 2, 3], resolver
         return search
     karltesting.registerAdapter(
         dummy_catalog_search, (Interface), ICatalogSearch)
     data = self._callFUT(context, request)
     self.assertEqual(data, [{"text": "title", "id": "b"},
                             {"text": "title", "id": "c"}])
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 setUp(self):
        from zope.interface import directlyProvides
        from karl.content.interfaces import IBlogEntry

        config = cleanUp()
        config.setup_registry()  # this is not a unit test

        karltesting.registerSettings()

        # Create dummy site skel
        self.community = community = karltesting.DummyCommunity()
        site = community.__parent__.__parent__

        profiles = testing.DummyModel()
        site["profiles"] = profiles
        self.profile = profiles["member"] = karltesting.DummyProfile()
        profiles["creator"] = karltesting.DummyProfile()

        community["blog"] = testing.DummyModel()

        blogentry = testing.DummyModel(text="This is a test")
        community["blog"]["blogentry"] = blogentry
        blogentry["attachments"] = testing.DummyModel()
        blogentry.title = "Blog Entry"
        blogentry.docid = 0
        directlyProvides(blogentry, IBlogEntry)
        self.blogentry = blogentry
        blogentry.creator = "creator"
Example #5
0
    def setUp(self):
        import datetime
        from zope.interface import directlyProvides
        from karl.content.interfaces import IBlogEntry

        cleanUp()
        karltesting.registerSettings()

        # Create dummy site skel
        community = karltesting.DummyCommunity()
        site = community.__parent__.__parent__

        profiles = testing.DummyModel()
        site["profiles"] = profiles
        self.profile = profiles["member"] = karltesting.DummyProfile()
        profiles["creator"] = karltesting.DummyProfile()

        community["blog"] = testing.DummyModel()

        blogentry = testing.DummyModel(text="This is a test")
        blogentry.created = datetime.datetime(2010, 5, 12, 2, 42)
        blogentry.creator = 'member'
        community["blog"]["blogentry"] = blogentry
        blogentry["attachments"] = testing.DummyModel()
        blogentry.title = "Blog Entry"
        blogentry.docid = 0
        directlyProvides(blogentry, IBlogEntry)
        self.blogentry = blogentry

        blogentry["comments"] = testing.DummyModel()
        self.comment = self._add_comment(blogentry)
Example #6
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
Example #7
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'}]
        )
Example #8
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 #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')])
Example #10
0
    def test_handle_submit_already_in_community(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()
        profile.__name__ = 'a'
        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',
        }
        response = controller.handle_submit(converted)
        self.assertEqual(
            response.location,
            'http://example.com/manage.html?status_message=One+user+already+member.'
        )
        self.failIf('A' * 6 in context)
        self.assertEqual(context.users.added_groups, [])
Example #11
0
    def test_merge_old_user_does_not_exist(self):
        profiles = self.root['profiles']
        profiles['chris'] = karltesting.DummyProfile(title='Chris R')
        profiles['rodrigo'] = karltesting.DummyProfile(title='Rodrigo R')

        self.call_fut('chris', 'rodrigo', True, DummyOutputStream())
        self.failIf('chris' in profiles)
        self.failUnless('rodrigo' in profiles)
        catalog = self.root.catalog
        self.assertEqual(catalog['creator'].reindexed, [('a', 'a')])
        self.assertEqual(catalog['modified_by'].reindexed, [('b', 'b')])

        event = list(self.root.events)[0][2]
        self.assertEqual(event['userid'], 'rodrigo')
        self.assertEqual(event['profile_url'], '/profiles/rodrigo')
        self.assertEqual(event['name'], 'Rodrigo R')
Example #12
0
    def test_merge_user(self):
        users = self.root.users
        profiles = self.root['profiles']
        users.add('chris', 'chris', 'password', set(('group1', 'group2')))
        profiles['chris'] = karltesting.DummyProfile()
        users.add('rodrigo', 'rodrigo', 'password', set(('group3',)))
        profiles['rodrigo'] = karltesting.DummyProfile()

        self.call_fut('chris', 'rodrigo', True, DummyOutputStream())
        self.failIf('chris' in profiles)
        self.failUnless('rodrigo' in profiles)
        self.assertEqual(users.removed_users, ['chris'])
        self.assertEqual(users.added_groups,
                         [('rodrigo', 'group1'), ('rodrigo', 'group2')])
        catalog = self.root.catalog
        self.assertEqual(catalog['creator'].reindexed, [('a', 'a')])
        self.assertEqual(catalog['modified_by'].reindexed, [('b', 'b')])
Example #13
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()
        request.view_name = 'list_view.html'
        request.layout_manager = mock.Mock()
        response = self._callFUT(context, request)
        actions = [('Manage Members', 'manage.html'),
                   ('Add Existing', 'add_existing.html'),
                   ('Invite New', 'invite_new.html')]
        self.assertEqual(response['actions'], actions)
        self.assertEqual(len(response['members']), 2)
        self.assertEqual(len(response['moderators']), 1)
        self.assertEqual(response['hide_pictures'], True)
        self.assertEqual(len(response['submenu']), 2)
        self.assertEqual(response['submenu'][0]['make_link'], True)
        self.assertEqual(response['submenu'][1]['make_link'], False)
        self.assertEqual(searchkw['sort_index'], 'lastfirst')
Example #14
0
 def test_handle_submit_username_exists(self):
     from pyramid_formish import ValidationError
     context = self._makeContext()
     request = self._makeRequest()
     profiles = testing.DummyModel()
     profiles['a'] = karltesting.DummyProfile()
     context['profiles'] = profiles
     controller = self._makeOne(context, request)
     converted = {'password': '******', 'password_confirm': '1', 'username': '******'}
     self.assertRaises(ValidationError, controller.handle_submit, converted)
Example #15
0
 def test_show_form(self):
     c = karltesting.DummyCommunity()
     site = c.__parent__.__parent__
     profiles = site["profiles"] = testing.DummyModel()
     profiles["user"] = karltesting.DummyProfile()
     karltesting.registerDummySecurityPolicy("user")
     request = testing.DummyRequest()
     response = self._callFUT(c, request)
     self.assertEqual(response['profile'], profiles["user"])
     self.assertEqual(response['community'], c)
     self.assertEqual(response['post_url'],
                      "http://example.com/communities/community/join.html")
Example #16
0
    def test_rename_old_user_does_not_exist(self):
        users = self.root.users
        profiles = self.root['profiles']
        profiles['chris'] = karltesting.DummyProfile()

        self.call_fut('chris', 'rodrigo', out=DummyOutputStream())
        self.failIf('chris' in profiles)
        self.failUnless('rodrigo' in profiles)
        self.assertEqual(users.get_by_id('rodrigo'), None)

        catalog = self.root.catalog
        self.assertEqual(catalog['creator'].reindexed, [('a', 'a')])
        self.assertEqual(catalog['modified_by'].reindexed, [('b', 'b')])
Example #17
0
    def setUp(self):
        from zope.interface import directlyProvides
        from karl.content.interfaces import ICalendarEvent

        config = cleanUp()
        config.setup_registry()  # this is not a unit test

        karltesting.registerSettings()
        karltesting.registerKarlDates()

        # Create dummy site skel
        community = karltesting.DummyCommunity()
        site = community.__parent__.__parent__

        profiles = testing.DummyModel()
        site["profiles"] = profiles
        self.profile = profiles["member"] = karltesting.DummyProfile()
        profiles["creator"] = karltesting.DummyProfile()

        community["calendar"] = testing.DummyModel()

        event = testing.DummyModel(
            text="This is a test",
            description="Some description",
            startDate=datetime(2009, 8, 5, 10, 0),
            endDate=datetime(2009, 8, 5, 11, 0),
            attendees=['alice', 'bob'],
            location='NYC',
            contact_name='Alice W',
            contact_email='*****@*****.**',
        )
        community["calendar"]["event"] = event
        event.title = "An Exciting Event!"
        event.docid = 0
        directlyProvides(event, ICalendarEvent)
        self.event = event
        event.creator = "creator"
Example #18
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)
Example #19
0
    def test_rename_user(self):
        users = self.root.users
        profiles = self.root['profiles']
        users.add('chris', 'chris', 'password', set(('group1', 'group2')))
        profiles['chris'] = karltesting.DummyProfile()

        self.call_fut('chris', 'rodrigo')
        self.failIf('chris' in profiles)
        self.failUnless('rodrigo' in profiles)
        self.assertEqual(users.removed_users, ['chris'])
        self.assertEqual(users.get_by_id('rodrigo'),
                         {'id': 'rodrigo', 'login': '******',
                           'password': '******', 'groups':
                           set(('group1', 'group2'))})

        catalog = self.root.catalog
        self.assertEqual(catalog['creator'].reindexed, [('a', 'a')])
        self.assertEqual(catalog['modified_by'].reindexed, [('b', 'b')])
Example #20
0
 def test_new_profile_already_exists(self):
     self.root.users.add('chris', 'chris', 'password', set())
     self.root['profiles']['chris'] = karltesting.DummyProfile()
     self.root['profiles']['rodrigo'] = karltesting.DummyProfile()
     self.assertRaises(ValueError, self.call_fut, 'chris', 'rodrigo')
Example #21
0
 def test_merge_new_profile_does_not_exist(self):
     self.root.users.add('chris', 'chris', 'password', set())
     self.root['profiles']['chris'] = karltesting.DummyProfile()
     self.root.users.add('rodrigo', 'rodrigo', 'password', set())
     self.assertRaises(ValueError, self.call_fut, 'chris', 'rodrigo',
                       merge=True)