Ejemplo n.º 1
0
    def setUp(self):
        cleanUp()

        # Set up a dummy wiki
        from karl.content.interfaces import IWiki
        from karl.testing import DummyCommunity
        from karl.testing import DummyProfile
        from zope.interface import directlyProvides

        community = DummyCommunity()
        wiki = community["wiki"] = testing.DummyModel()
        directlyProvides(wiki, IWiki)
        wiki.title = "Wiki Title"

        site = community.__parent__.__parent__
        profiles = site["profiles"] = testing.DummyModel()
        chris = profiles["chris"] = DummyProfile()
        chris.title = "Chris Rossi"

        self.context = wiki

        # Register dummy catalog
        from zope.interface import Interface
        from karl.models.interfaces import ICatalogSearch

        testing.registerAdapter(dummy_catalog_search, Interface, ICatalogSearch)

        # Register atom entry adapter
        from karl.views.interfaces import IAtomEntry
        from karl.views.atom import GenericAtomEntry

        testing.registerAdapter(GenericAtomEntry, (Interface, Interface), IAtomEntry)
Ejemplo n.º 2
0
    def setUp(self):
        cleanUp()

        # Set up a dummy calendar
        from karl.content.interfaces import ICalendar
        from karl.testing import DummyCommunity
        from karl.testing import DummyProfile
        from zope.interface import directlyProvides

        community = DummyCommunity()
        cal = community["calendar"] = testing.DummyModel()
        directlyProvides(cal, ICalendar)
        cal.title = "Calendar"

        site = community.__parent__.__parent__
        profiles = site["profiles"] = testing.DummyModel()
        chris = profiles["chris"] = DummyProfile()
        chris.title = "Chris Rossi"

        self.context = cal

        # Register dummy catalog
        from zope.interface import Interface
        from karl.models.interfaces import ICatalogSearch

        testing.registerAdapter(dummy_catalog_search, Interface, ICatalogSearch)

        # Register atom entry adapter
        from karl.views.interfaces import IAtomEntry
        from karl.content.views.atom import CalendarEventAtomEntry

        testing.registerAdapter(CalendarEventAtomEntry, (Interface, Interface), IAtomEntry)
Ejemplo n.º 3
0
    def test_user_home_path_w_subpath(self):
        from zope.interface import Interface
        from zope.interface import directlyProvides
        from repoze.bfg.interfaces import ITraverserFactory
        from karl.testing import DummyCommunity
        from karl.testing import DummyProfile
        testing.registerDummySecurityPolicy("userid")
        c = DummyCommunity()
        site = c.__parent__.__parent__
        directlyProvides(site, Interface)
        c["foo"] = foo = testing.DummyModel()
        site["profiles"] = profiles = testing.DummyModel()
        profiles["userid"] = profile = DummyProfile()
        profile.home_path = "/communities/community/foo/bar/baz"
        testing.registerAdapter(
            dummy_traverser_factory, Interface, ITraverserFactory
        )

        from karl.views.utils import get_user_home
        request = testing.DummyRequest()

        # Test from site root
        target, extra_path = get_user_home(site, request)
        self.failUnless(foo is target)
        self.assertEqual(['bar', 'baz'], extra_path)

        # Test from arbitrary point in tree
        target, extra_path = get_user_home(c, request)
        self.failUnless(foo is target)
        self.assertEqual(['bar', 'baz'], extra_path)
Ejemplo n.º 4
0
    def test_with_parameter_withresults(self):
        def dummy_factory1(context, request, term):
            pass
        def dummy_factory2(context, request, term):
            def results():
                return 1, [1], lambda x: testing.DummyModel(title='yo')
            return results
        dummy_factory1.livesearch = dummy_factory2.livesearch = True

        from repoze.lemonade.testing import registerListItem
        from karl.models.interfaces import IGroupSearchFactory
        registerListItem(IGroupSearchFactory, dummy_factory1, 'dummy1',
                         title='Dummy1', sort_key=1)
        registerListItem(IGroupSearchFactory, dummy_factory2, 'dummy2',
                         title='Dummy2', sort_key=2)
        context = testing.DummyModel()
        request = testing.DummyRequest()
        request.params = {
            'val': 'somesearch',
            }
        def dummy_adapter(context, request):
            return dict(title=context.title)
        from karl.views.interfaces import ILiveSearchEntry
        testing.registerAdapter(dummy_adapter,
                                (testing.DummyModel, testing.DummyRequest),
                                ILiveSearchEntry)
        response = self._callFUT(context, request)
        self.assertEqual(response.status, '200 OK')
        from simplejson import loads
        results = loads(response.body)
        self.assertEqual(len(results), 1)
        self.assertEqual(results[0]['title'], 'yo')
        self.assertEqual(response.content_type, 'application/json')
Ejemplo n.º 5
0
    def test_processMessage_report(self):
        from zope.interface import directlyProvides
        from repoze.bfg.testing import DummyModel
        from repoze.bfg.testing import registerAdapter
        from karl.adapters.interfaces import IMailinHandler
        from karl.models.interfaces import IPeopleDirectory
        INFO = {'report': 'section+testing',
                'community': None,
                'tool': None,
                'author': 'phreddy',
                'subject': 'Feedback'
               }
        handler = DummyHandler()
        def _handlerFactory(context):
            handler.context = context
            return handler
        registerAdapter(_handlerFactory, DummyModel, IMailinHandler)
        mailin = self._makeOne()
        catalog = mailin.root.catalog = DummyCatalog()
        pd = mailin.root['people'] = DummyModel()
        directlyProvides(pd, IPeopleDirectory)
        section = pd['section'] = DummyModel()
        testing = section['testing'] = DummyModel()
        message = DummyMessage()
        text = 'This entry stinks!'
        attachments = [('foo.txt', 'text/plain', 'My attachment')]

        mailin.processMessage(message, INFO, text, attachments)

        self.failUnless(handler.context is testing)
        self.assertEqual(handler.handle_args,
                         (message, INFO, text, attachments))
Ejemplo n.º 6
0
 def _register(self):
     from karl.testing import registerCatalogSearch
     registerCatalogSearch()
     from karl.models.interfaces import ILetterManager
     from zope.interface import Interface
     testing.registerAdapter(DummyLetterManager, Interface,
                             ILetterManager)
Ejemplo n.º 7
0
    def test_handle_submit_valid_nofile_withremove(self):
        from repoze.bfg.formish import ValidationError
        from karl.models.interfaces import ISite
        from zope.interface import directlyProvides
        from schemaish.type import File as SchemaFile
        from karl.models.interfaces import IObjectModifiedEvent
        from karl.content.interfaces import ICommunityFile
        from repoze.lemonade.interfaces import IContentFactory

        self._register()

        context = DummyFile(title='oldtitle')
        context.__name__ = None
        context.__parent__ = None
        context.mimetype = 'old/type'
        context.filename = 'old_name'
        context.stream = 'old'
        context.sessions = DummySessions()
        context.catalog = DummyCatalog()
        directlyProvides(context, ISite)
        converted = {
            'title': 'new title',
            'file': SchemaFile(None, None, None, metadata={'remove':True}),
            'security_state': 'public',
            'tags': ['thetesttag'],
            }
        testing.registerAdapter(lambda *arg: DummyCommunityFile,
                                (ICommunityFile,),
                                IContentFactory)
        testing.registerDummySecurityPolicy('testeditor')
        request = self._makeRequest()
        controller = self._makeOne(context, request)
        self.assertRaises(ValidationError, controller.handle_submit, converted)
Ejemplo n.º 8
0
    def test_with_content(self):
        search_args = {}
        def searcher(context):
            def search(**args):
                search_args.update(args)
                doc1 = testing.DummyModel(title='doc1')
                doc2 = testing.DummyModel(title='doc2')
                docids = [doc1, None, doc2]
                return len(docids), docids, lambda docid: docid
            return search
        from karl.models.interfaces import ICatalogSearch
        from repoze.bfg.testing import registerAdapter
        from zope.interface import Interface
        registerAdapter(searcher, (Interface), ICatalogSearch)
        from karl.models.interfaces import IGridEntryInfo
        testing.registerAdapter(DummyGridEntryAdapter, (Interface, Interface),
                                IGridEntryInfo)

        context = DummyProfile()
        context.title = 'Z'
        request = testing.DummyRequest()
        renderer = testing.registerDummyRenderer(
            'templates/profile_recent_content.pt')
        self._callFUT(context, request)
        self.assert_(renderer.api is not None)
        self.assertEquals(len(renderer.recent_items), 2)
        self.assertEquals(renderer.recent_items[0].context.title, 'doc1')
        self.assertEquals(renderer.recent_items[1].context.title, 'doc2')
        self.assertFalse(renderer.batch_info['batching_required'])
Ejemplo n.º 9
0
    def setUp(self):
        cleanUp()

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

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

        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 opencore.models.interfaces import ICatalogSearch
        testing.registerAdapter(DummySearchAdapter, (Interface, Interface),
                                ICatalogSearch)
        testing.registerAdapter(DummySearchAdapter, (Interface,),
                                ICatalogSearch)

        root.catalog = catalog = octesting.DummyModel()
        catalog['creator'] =  DummyCatalogIndex()
        catalog['modified_by'] =  DummyCatalogIndex()
Ejemplo n.º 10
0
    def test_handle_submit(self):
        controller = self._makeOne(self.context, self.request)
        converted = {}
        # first set up the simple fields to submit
        for fieldname, value in profile_data.items():
            if fieldname == 'photo':
                continue
            converted[fieldname] = value
        # then set up with the photo
        from karl.models.interfaces import IImageFile
        from karl.models.tests.test_image import one_pixel_jpeg as dummy_photo
        from karl.testing import DummyUpload
        from karl.views.tests.test_file import DummyImageFile
        from repoze.lemonade.interfaces import IContentFactory
        testing.registerAdapter(lambda *arg: DummyImageFile, (IImageFile,),
                                IContentFactory)
        converted['photo'] = DummyUpload(filename='test.jpg',
                                         mimetype='image/jpeg',
                                         data=dummy_photo)
        # finally submit
        controller.handle_submit(converted)
        for fieldname, value in profile_data.items():
            if fieldname == 'photo':
                continue
            self.assertEqual(getattr(self.context, fieldname), value)
        self.failUnless('photo.jpg' in self.context)
        self.failUnless(len(self.context['photo.jpg'].stream.read()) > 1)

        # make sure the www. URLs get prepended
        converted['website'] = 'www.example.com'
        controller.handle_submit(converted)
        self.assertEqual(self.context.website, 'http://www.example.com')
Ejemplo n.º 11
0
    def test_handle_submit(self):
        self._register()
        self._registerDummyWorkflow()

        testing.registerDummySecurityPolicy('userid')
        context = testing.DummyModel()
        context.catalog = DummyCatalog()
        context.tags = DummyTagEngine()
        converted = {
            'title':'a title',
            'security_state': 'private',
            'tags': ['thetesttag'],
            }
        from karl.content.interfaces import ICommunityFolder
        from repoze.lemonade.interfaces import IContentFactory
        testing.registerAdapter(lambda *arg: DummyCommunityFolder,
                                (ICommunityFolder,),
                                IContentFactory)
        request = testing.DummyRequest()
        controller = self._makeOne(context, request)
        response = controller.handle_submit(converted)
        self.assertEqual(response.location, 'http://example.com/a-title/')
        self.assertEqual(context['a-title'].title, u'a title')
        self.assertEqual(context['a-title'].userid, 'userid')
        self.assertEqual(context.tags.updated,
            [(None, 'userid', ['thetesttag'])])
Ejemplo n.º 12
0
    def test_processMessage_reply_no_attachments(self):
        from repoze.bfg.testing import DummyModel
        from repoze.bfg.testing import registerAdapter
        from repoze.bfg.testing import registerModels
        from karl.adapters.interfaces import IMailinHandler
        INFO = {'community': 'testing',
                'tool': 'random',
                'in_reply_to': '7FFFFFFF', # token for docid 0
                'author': 'phreddy',
                'subject': 'Feedback'
               }
        handler = DummyHandler()
        def _handlerFactory(context):
            handler.context = context
            return handler
        registerAdapter(_handlerFactory, DummyModel, IMailinHandler)
        mailin = self._makeOne()
        catalog = mailin.root.catalog = DummyCatalog()
        cf = mailin.root['communities'] = DummyModel()
        testing = cf['testing'] = DummyModel()
        tool = testing['random'] = DummyModel()
        entry = tool['entry'] = DummyModel()
        comments = entry['comments'] = DummyModel()
        catalog.document_map._map[0] = '/communities/testing/random/entry'
        registerModels({'/communities/testing/random/entry': entry})
        message = DummyMessage()
        text = 'This entry stinks!'
        attachments = ()

        mailin.processMessage(message, INFO, text, attachments)

        self.assertEqual(handler.context, entry)
        self.assertEqual(handler.handle_args,
                         (message, INFO, text, attachments))
Ejemplo n.º 13
0
 def test_set_preferred_communities(self):
     from zope.interface import Interface
     from opencore.models.interfaces import ICommunityInfo
     from opencore.views.communities import get_preferred_communities
     context = testing.DummyModel()
     yo = testing.DummyModel()
     yo.title = 'Yo'
     yi = testing.DummyModel()
     yi.title = 'Yi'
     context['yo'] = yo
     context['yi'] = yi
     profiles = context['profiles'] = testing.DummyModel()
     foo = profiles['foo'] = testing.DummyModel()
     foo.preferred_communities = None
     request = testing.DummyRequest()
     testing.registerDummySecurityPolicy(
         'foo',
         groupids=[
         'group.community:yo:members',
         'group.community:yo:moderators',
         'group.community:yi:moderators',
         'group.community:yang:moderators'
         ]
         )
     testing.registerAdapter(DummyAdapter, (Interface, Interface),
                             ICommunityInfo)
     communities = ['yi']
     self._callFUT(context, request, communities)
     result = get_preferred_communities(context, request)
     self.assertEqual(len(result), 1)
     self.assertEqual(result[0], 'yi')
Ejemplo n.º 14
0
    def test_creator_field(self):
        from zope.interface import Interface
        from zope.interface import implements
        from opencore.models.interfaces import ICatalogSearch
        from opencore.models.interfaces import IProfile

        searched_for = {}

        class Profile:
            implements(IProfile)
        profile = Profile()
        profile.__name__ = 'admin'

        class ProfileSearch:
            def __init__(self, context):
                pass
            def __call__(self, **kw):
                searched_for.update(kw)
                return 1, [1], lambda x: profile

        testing.registerAdapter(ProfileSearch, (Interface),
                                ICatalogSearch)
        query, terms = self._callFUT({'creator': 'Ad'})
        self.assertEquals(searched_for,
            {'texts': 'Ad', 'interfaces': [IProfile]})
        from repoze.lemonade.interfaces import IContent
        self.assertEqual(query, {
            'creator': {'query': ['admin'], 'operator': 'or'},
            'interfaces': {'operator': 'or', 'query': []},
            })
        self.assertEqual(terms, ['Ad'])
Ejemplo n.º 15
0
    def test_it(self):
        from zope.interface import Interface
        from zope.interface import directlyProvides
        from opencore.models.interfaces import ICatalogSearch
        from opencore.models.interfaces import ICommunity
        context = testing.DummyModel()
        directlyProvides(context, ICommunity)
        context.member_names = set('a',)
        context.moderator_names = set()
        request = testing.DummyRequest(params={'tag':'a'})
        profiles = testing.DummyModel()
        profile_1 = oitesting.DummyProfile(__name__='a',
                                             security_state='active')
        profile_2 = oitesting.DummyProfile(__name__='b',
                                             security_state='active')
        profile_3 = oitesting.DummyProfile(__name__='c',
                                             security_state='active')
        profile_4 = oitesting.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
        testing.registerAdapter(dummy_catalog_search, (Interface),
                                ICatalogSearch)
        response = self._callFUT(context, request)

        self.assertEqual(
            response.body,
            '[{"value": "title", "key": "b"}, '
            '{"value": "title", "key": "c"}]')
Ejemplo n.º 16
0
 def test_community_search(self):
     context = testing.DummyModel()
     context.title = 'Citizens'
     context.catalog = {}
     context['profiles'] = profiles = testing.DummyModel()
     profiles['tweedle dee'] = testing.DummyModel(title='Tweedle Dee')
     from webob.multidict import MultiDict
     from karl.models.interfaces import ICommunity
     from zope.interface import directlyProvides
     directlyProvides(context, ICommunity)
     request = testing.DummyRequest(params=MultiDict({'body':'yo'}))
     from zope.interface import Interface
     from karl.models.interfaces import ICatalogSearch
     from karl.views.interfaces import IAdvancedSearchResultsDisplay
     from repoze.lemonade.testing import registerContentFactory
     registerContentFactory(DummyContent, IDummyContent)
     testing.registerAdapter(DummySearch, (Interface),
                             ICatalogSearch)
     testing.registerAdapter(DummySearchResultsDisplay,
                             (Interface, Interface),
                             IAdvancedSearchResultsDisplay)
     result = self._callFUT(context, request)
     self.assertEqual(result['community'], 'Citizens')
     self.assertEqual(result['terms'], ['yo'])
     self.assertEqual(len(result['results']), 1)
Ejemplo n.º 17
0
    def test_with_security_policy(self):
        self._register()
        self._registerLayoutProvider()
        import datetime
        _NOW = datetime.datetime.now()
        context = testing.DummyModel(title='title')
        from karl.content.interfaces import IForum
        alsoProvides(context, IForum)
        context['profiles'] = profiles = testing.DummyModel()
        profiles['dummy'] = DummyProfile()
        context['comments'] = testing.DummyModel()
        comment = testing.DummyModel(text='sometext')
        comment.creator = 'dummy'
        comment.created = _NOW
        context['comments']['1'] = comment
        context['attachments'] = testing.DummyModel()
        request = testing.DummyRequest()
        def dummy_byline_info(context, request):
            return context
        from karl.content.views.interfaces import IBylineInfo
        testing.registerAdapter(dummy_byline_info, (Interface, Interface),
                                IBylineInfo)
        self._register()
        testing.registerDummySecurityPolicy(permissive=False)

        renderer = testing.registerDummyRenderer(
            'templates/show_forum_topic.pt')
        self._callFUT(context, request)

        self.assertEqual(renderer.comments[0]['edit_url'], None)
Ejemplo n.º 18
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'})
     profiles = testing.DummyModel()
     profile_1 = karltesting.DummyProfile(__name__='a')
     profile_2 = karltesting.DummyProfile(__name__='b')
     profile_3 = karltesting.DummyProfile(__name__='c')
     def resolver(docid):
         d = {1:profile_1, 2:profile_2, 3:profile_3}
         return d.get(docid)
     def dummy_catalog_search(context):
         def search(**kw):
             return 3, [1,2,3], resolver
         return search
     testing.registerAdapter(dummy_catalog_search, (Interface),
                             ICatalogSearch)
     response = self._callFUT(context, request)
     self.assertEqual(response.body, '[{"text": "firstname lastname", "id": "b"}, {"text": "firstname lastname", "id": "c"}]')
Ejemplo n.º 19
0
    def setUp(self):
        cleanUp()

        # Set up a dummy community files folder
        from karl.content.interfaces import ICommunityRootFolder
        from karl.testing import DummyCommunity
        from karl.testing import DummyProfile
        from zope.interface import directlyProvides

        community = DummyCommunity()
        files = community["files"] = testing.DummyModel()
        directlyProvides(files, ICommunityRootFolder)

        site = community.__parent__.__parent__
        profiles = site["profiles"] = testing.DummyModel()
        chris = profiles["chris"] = DummyProfile()
        chris.title = "Chris Rossi"

        self.context = files

        # Register dummy catalog
        from zope.interface import Interface
        from karl.models.interfaces import ICatalogSearch
        testing.registerAdapter(dummy_catalog_search, Interface,
                                ICatalogSearch)

        # Register atom entry adapter
        from karl.views.interfaces import IAtomEntry
        from karl.content.views.atom import CommunityFileAtomEntry
        testing.registerAdapter(CommunityFileAtomEntry, (Interface, Interface),
                                IAtomEntry)
        testing.registerDummyRenderer('karl.views:templates/atomfeed.pt')
Ejemplo n.º 20
0
    def setUp(self):
        cleanUp()

        # Set up a dummy blog
        from karl.content.interfaces import IBlog
        from karl.testing import DummyCommunity
        from karl.testing import DummyProfile
        from zope.interface import directlyProvides

        community = DummyCommunity()
        blog = community["blog"] = testing.DummyModel()
        directlyProvides(blog, IBlog)
        blog.title = "Blog Title"

        site = community.__parent__.__parent__
        profiles = site["profiles"] = testing.DummyModel()
        chris = profiles["chris"] = DummyProfile()
        chris.title = "Chris Rossi"

        self.context = blog

        # Register dummy catalog
        from zope.interface import Interface
        from karl.models.interfaces import ICatalogSearch
        testing.registerAdapter(dummy_catalog_search, Interface,
                                ICatalogSearch)

        # Register blog entry adapter
        from karl.views.interfaces import IAtomEntry
        from karl.content.interfaces import IBlogEntry
        from karl.views.atom import GenericAtomEntry
        testing.registerAdapter(GenericAtomEntry, (IBlogEntry, Interface),
                                IAtomEntry)
        testing.registerDummyRenderer('karl.views:templates/atomfeed.pt')
Ejemplo n.º 21
0
 def _registerLayoutProvider(self, **kw):
     from repoze.bfg.testing import registerAdapter
     from zope.interface import Interface
     from karl.views.interfaces import ILayoutProvider
     registerAdapter(DummyLayoutProvider,
                     (Interface, Interface),
                     ILayoutProvider)
Ejemplo n.º 22
0
 def test_jquery_set_preferred_view(self):
     from zope.interface import Interface
     from opencore.models.interfaces import ICommunityInfo
     context = testing.DummyModel(communities_name='communities')
     communities = context['communities'] = testing.DummyModel()
     yo = testing.DummyModel()
     yo.title = 'Yo'
     yi = testing.DummyModel()
     yi.title = 'Yi'
     communities['yo'] = yo
     communities['yi'] = yi
     profiles = context['profiles'] = testing.DummyModel()
     foo = profiles['foo'] = testing.DummyModel()
     foo.preferred_communities = None
     request = testing.DummyRequest()
     request.params = RequestParamsWithGetall()
     request.params['preferred[]'] = ['Yi']
     testing.registerDummySecurityPolicy(
         'foo',
         [
         'group.community:yo:members',
         'group.community:yo:moderators',
         'group.community:yi:moderators',
         ]
         )
     testing.registerAdapter(DummyAdapterWithTitle, (Interface, Interface),
                             ICommunityInfo)
     result = self._callFUT(context, request)
     self.assertEqual(result['my_communities'][0].context, yi)
Ejemplo n.º 23
0
    def test_no_security_policy(self):
        context = DummyBlogEntry()
        from karl.models.interfaces import ISite
        from zope.interface import directlyProvides
        from karl.testing import DummyProfile
        directlyProvides(context, ISite)
        from karl.content.interfaces import IBlog
        from zope.interface import alsoProvides

        alsoProvides(context, IBlog)
        context['profiles'] = profiles = testing.DummyModel()
        profiles['dummy'] = DummyProfile(title='Dummy Profile')
        request = testing.DummyRequest()
        def dummy_byline_info(context, request):
            return context
        from zope.interface import Interface
        from karl.content.views.interfaces import IBylineInfo
        testing.registerAdapter(dummy_byline_info, (Interface, Interface),
                                IBylineInfo)
        self._register()
        from karl.utilities.interfaces import IKarlDates
        testing.registerUtility(dummy, IKarlDates)
        renderer = testing.registerDummyRenderer('templates/show_blogentry.pt')
        self._callFUT(context, request)
        self.assertEqual(len(renderer.comments), 1)
        c0 = renderer.comments[0]
        self.assertEqual(c0['text'], 'sometext')

        self.assertEqual(d1, renderer.comments[0]['date'])
        self.assertEqual(c0['author_name'], 'Dummy Profile')
        self.assertEqual(renderer.comments[0]['edit_url'],
                         'http://example.com/blogentry/comments/1/edit.html')
Ejemplo n.º 24
0
 def test_jquery_list_my_communities_view(self):
     from zope.interface import Interface
     from opencore.models.interfaces import ICommunityInfo
     context = testing.DummyModel(communities_name='communities')
     communities = context['communities'] = testing.DummyModel()
     yo = testing.DummyModel()
     yo.title = 'Yo'
     yi = testing.DummyModel()
     yi.title = 'Yi'
     communities['yo'] = yo
     communities['yi'] = yi
     profiles = context['profiles'] = testing.DummyModel()
     foo = profiles['foo'] = testing.DummyModel()
     foo.preferred_communities = ['Yi']
     request = testing.DummyRequest()
     testing.registerDummySecurityPolicy(
         'foo',
         groupids=[
         'group.community:yo:members',
         'group.community:yo:moderators',
         'group.community:yi:moderators',
         'group.community:yang:moderators'
         ]
         )
     testing.registerAdapter(DummyAdapterWithTitle, (Interface, Interface),
                             ICommunityInfo)
     result = self._callFUT(context, request)
     self.assertEqual(result['preferred'], ['Yi'])
     self.assertEqual(result['show_all'], True)
     self.assertEqual(len(result['my_communities']), 2)
Ejemplo n.º 25
0
    def test_comment_ordering(self):
        context = DummyBlogEntry()
        context['comments']['2'] = DummyComment(now=1233149510, text=u'before')
        from karl.models.interfaces import ISite
        from zope.interface import directlyProvides
        from karl.testing import DummyProfile
        directlyProvides(context, ISite)
        from karl.content.interfaces import IBlog
        from zope.interface import alsoProvides

        alsoProvides(context, IBlog)
        context['profiles'] = profiles = testing.DummyModel()
        profiles['dummy'] = DummyProfile(title='Dummy Profile')
        request = testing.DummyRequest()
        def dummy_byline_info(context, request):
            return context
        from zope.interface import Interface
        from karl.content.views.interfaces import IBylineInfo
        testing.registerAdapter(dummy_byline_info, (Interface, Interface),
                                IBylineInfo)
        self._register()
        from karl.utilities.interfaces import IKarlDates
        testing.registerUtility(dummy, IKarlDates)
        renderer = testing.registerDummyRenderer('templates/show_blogentry.pt')
        self._callFUT(context, request)
        self.assertEqual(len(renderer.comments), 2)
        self.assertEqual('before', renderer.comments[0]['text'])
        self.assertEqual('sometext', renderer.comments[1]['text'])
Ejemplo n.º 26
0
 def test_w_overflow(self):
     from zope.interface import Interface
     from opencore.models.interfaces import ICommunityInfo
     context = testing.DummyModel()
     profiles = context['profiles'] = testing.DummyModel()
     profiles['foo'] = testing.DummyModel()
     yo = testing.DummyModel()
     yo.title = 'Yo'
     yi = testing.DummyModel()
     yi.title = 'Yi'
     context['yo'] = yo
     context['yi'] = yi
     request = testing.DummyRequest()
     testing.registerDummySecurityPolicy(
         'foo',
         groupids=[
         'group.community:yo:members',
         'group.community:yo:moderators',
         'group.community:yi:moderators',
         'group.community:yang:moderators'
         ]
         )
     testing.registerAdapter(DummyAdapter, (Interface, Interface),
                             ICommunityInfo)
     result = self._callFUT(context, request)
     self.assertEqual(len(result), 2)
     self.assertEqual(result[0].context, yi)
Ejemplo n.º 27
0
 def _register(self):
     from zope.interface import Interface
     from karl.models.interfaces import ITagQuery
     testing.registerAdapter(DummyTagQuery, (Interface, Interface),
                             ITagQuery)
     from repoze.workflow.testing import registerDummyWorkflow
     return registerDummyWorkflow('security')
Ejemplo n.º 28
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
        testing.registerDummySecurityPolicy('userid')
        workflow = self._registerDummyWorkflow()
        testing.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)
Ejemplo n.º 29
0
    def test_respect_alert_prefs(self):
        from repoze.sendmail.interfaces import IMailDelivery
        from repoze.bfg.interfaces import IRequest
        from karl.models.interfaces import IProfile
        from karl.testing import DummyMailer

        mailer = DummyMailer()
        testing.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_DIGEST)
        profiles["c"] = DummyProfile()
        profiles["c"].set_alerts_preference(community.__name__,
                                            IProfile.ALERT_NEVER)

        community.member_names = set(("a","c",))
        community.moderator_names = set(("b",))

        request = testing.DummyRequest()
        testing.registerAdapter(DummyEmailAlertAdapter,
                                (IDummy, IProfile, IRequest), IAlert)

        self._get_instance().emit(context, request)
        self.assertEqual(1, len(mailer))
        self.assertEqual(1, len(profiles["b"]._pending_alerts))
Ejemplo n.º 30
0
 def test_known_kind_no_text_term(self):
     from webob.multidict import MultiDict
     from karl.models.interfaces import IGroupSearchFactory
     from repoze.lemonade.testing import registerContentFactory
     from zope.interface import Interface
     content = DummyCommunityContent()
     def search_factory(*arg, **kw):
         return DummySearchFactory(content)
     search_factory.icon = 'foo.jpg'
     search_factory.advanced_search = True
     testing.registerUtility(
         search_factory, IGroupSearchFactory, name='People')
     context = testing.DummyModel()
     context.catalog = {}
     context['profiles'] = profiles = testing.DummyModel()
     profiles['tweedle dee'] = testing.DummyModel(title='Tweedle Dee')
     request = testing.DummyRequest(
         params=MultiDict({'kind':'People'}))
     from karl.models.interfaces import ICatalogSearch
     from karl.views.interfaces import IAdvancedSearchResultsDisplay
     registerContentFactory(DummyContent, IDummyContent)
     testing.registerAdapter(DummySearch, (Interface),
                             ICatalogSearch)
     testing.registerAdapter(DummySearchResultsDisplay,
                             (Interface, Interface),
                             IAdvancedSearchResultsDisplay)
     result = self._callFUT(context, request)
     self.assertEqual(result['terms'], ['People'])
     self.assertEqual(len(result['results']), 1)
Ejemplo n.º 31
0
from repoze.bfg import testing as bfg_reg
import logging

import interfaces
import views
import schema
from gae.utils import BREAKPOINT

bfg_reg.registerView("@tmp",view=views.fileupload_cache_view)
bfg_reg.registerView("edit",view=views.edit_view)
bfg_reg.registerView("add",view=views.add_view)
bfg_reg.registerView("delete_content",view=views.delete_content,for_=(interfaces.IContent))
bfg_reg.registerView("delete_content", view=views.delete_content,for_=(interfaces.IFolder)) 

bfg_reg.registerAdapter(schema.FolderStructure,(interfaces.IFolder),schema.IStructure)
bfg_reg.registerAdapter(schema.RootStructure,(interfaces.IRoot),schema.IStructure)
bfg_reg.registerAdapter(schema.PageStructure,(interfaces.IPage),schema.IStructure)
bfg_reg.registerAdapter(schema.NewsStructure,(interfaces.INews),schema.IStructure)
bfg_reg.registerAdapter(schema.FileStructure,(interfaces.IFile),schema.IStructure)
bfg_reg.registerAdapter(schema.ImageStructure,(interfaces.IImage),schema.IStructure)
bfg_reg.registerAdapter(schema.PicassaGalleryStructure,(interfaces.IPicassaGallery),schema.IStructure)
bfg_reg.registerAdapter(schema.StaticListStructure,(interfaces.IStaticListView),schema.IStructure)
bfg_reg.registerAdapter(schema.QueryViewStructure,(interfaces.IQueryView),schema.IStructure)
bfg_reg.registerAdapter(schema.ActionStructure,(interfaces.IAction),schema.IStructure)
bfg_reg.registerAdapter(schema.PortletStructure,(interfaces.IPortlet),schema.IStructure)
logging.info('Editing registered')