예제 #1
0
    def test_weekly_digests(self):
        from repoze.sendmail.interfaces import IMailDelivery
        from pyramid.interfaces import IRequest
        from karl.models.interfaces import IProfile
        from karl.testing import DummyMailer

        mailer = DummyMailer()
        self.config.registry.registerUtility(mailer, IMailDelivery)

        community = DummyCommunity()
        community["foo"] = context = testing.DummyModel()
        directlyProvides(context, IDummy)

        site = community.__parent__.__parent__
        site["profiles"] = profiles = testing.DummyModel()
        profiles["a"] = DummyProfile()
        profiles["a"].set_alerts_preference(community.__name__,
                                            IProfile.ALERT_DAILY_DIGEST)
        profiles["b"] = DummyProfile()
        profiles["b"].set_alerts_preference(community.__name__,
                                            IProfile.ALERT_WEEKLY_DIGEST)
        profiles["c"] = DummyProfile()
        profiles["c"].set_alerts_preference(community.__name__,
                                            IProfile.ALERT_BIWEEKLY_DIGEST)

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

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

        tool = self._get_instance()
        tool.emit(context, request)
        tool.emit(context, request)

        self.assertEqual(0, len(mailer))
        self.assertEqual(2, len(list(profiles["a"]._pending_alerts)))
        self.assertEqual(2, len(list(profiles["b"]._pending_alerts)))
        self.assertEqual(2, len(list(profiles["c"]._pending_alerts)))

        self.config.testing_add_renderer('karl.utilities:email_digest.pt')

        tool.send_digests(site, "weekly")

        self.assertEqual(0, len(list(profiles["a"]._pending_alerts)))
        self.assertEqual(0, len(list(profiles["b"]._pending_alerts)))
        self.assertEqual(2, len(list(profiles["c"]._pending_alerts)))

        self.assertEqual(2, len(mailer))
        self.assertEqual(0, len(list(list(profiles["a"]._pending_alerts))))
        self.assertEqual(0, len(list(list(profiles["b"]._pending_alerts))))
        mtos = [x.mto for x in mailer]
        self.assertTrue([
            '*****@*****.**',
        ] in mtos)
        self.assertTrue([
            '*****@*****.**',
        ] in mtos)
예제 #2
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'])
예제 #3
0
    def test_emit(self):
        from repoze.sendmail.interfaces import IMailDelivery
        from pyramid.interfaces import IRequest
        from karl.models.interfaces import IProfile
        from karl.testing import DummyMailer

        mailer = DummyMailer()
        self.config.registry.registerUtility(mailer, IMailDelivery)

        community = DummyCommunity()
        community["foo"] = context = testing.DummyModel()
        directlyProvides(context, IDummy)

        site = community.__parent__.__parent__
        site["profiles"] = profiles = testing.DummyModel()
        profiles["a"] = DummyProfile()
        profiles["b"] = DummyProfile()
        profiles["c"] = DummyProfile()

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

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

        self._get_instance().emit(context, request)
        self.assertEqual(3, len(mailer))
예제 #4
0
    def test_tags(self):
        from karl.testing import DummyUsers
        self._registerTagbox()
        self._registerCatalogSearch()
        testing.registerDummySecurityPolicy('eddie')
        TAGS = {'beaver': 1, 'wally': 3}
        context = DummyProfile()
        context.title = "Eddie"
        context.__name__ = "eddie"
        users = context.users = DummyUsers()
        users.add("eddie", "eddie", "password", [])
        tags = context.tags = testing.DummyModel()
        def _getTags(items=None, users=None, community=None):
            assert items is None
            assert list(users) == ['eddie']
            assert community is None
            return TAGS.keys()
        tags.getTags = _getTags
        def _getFrequency(tags=None, community=None, user=None):
            assert community is None
            assert tags is not None
            assert user == 'eddie'
            return TAGS.items()
        tags.getFrequency = _getFrequency
        request = testing.DummyRequest()
        renderer = testing.registerDummyRenderer('templates/profile.pt')

        response = self._callFUT(context, request)

        self.assertEqual(len(renderer.tags), 2)
        self.failUnless(renderer.tags[0], {'name': 'wally', 'count': 3})
        self.failUnless(renderer.tags[1], {'name': 'beaver', 'count': 1})
예제 #5
0
 def test_noconfirm(self):
     context = DummyProfile(firstname='Mori', lastname='Turi')
     context.title = 'Context'
     request = testing.DummyRequest()
     renderer = testing.registerDummyRenderer(
         'templates/delete_profile.pt')
     response = self._callFUT(context, request)
     self.assertEqual(response.status, '200 OK')
예제 #6
0
 def setUp(self):
     cleanUp()
     sessions = DummySessions()
     context = DummyProfile(sessions=sessions)
     context.title = 'title'
     self.context = context
     request = testing.DummyRequest()
     request.environ['repoze.browserid'] = '1'
     self.request = request
예제 #7
0
    def setUp(self):
        cleanUp()
        # Register mail utility
        from repoze.sendmail.interfaces import IMailDelivery
        from karl.testing import DummyMailer
        self.mailer = DummyMailer()
        karl.testing.registerUtility(self.mailer, IMailDelivery)

        # Register BlogCommentAlert adapter
        from karl.models.interfaces import IProfile
        from karl.models.interfaces import IComment
        from karl.content.views.adapters import BlogCommentAlert
        from karl.utilities.interfaces import IAlert
        from pyramid.interfaces import IRequest
        karl.testing.registerAdapter(BlogCommentAlert,
                                     (IComment, IProfile, IRequest), IAlert)

        # Register IShowSendAlert adapter
        self.show_sendalert = True
        from karl.content.views.interfaces import IShowSendalert

        class DummyShowSendalert(object):
            def __init__(myself, context, request):
                myself.show_sendalert = self.show_sendalert

        karl.testing.registerAdapter(DummyShowSendalert,
                                     (Interface, Interface), IShowSendalert)

        # Create dummy site skel
        from karl.testing import DummyCommunity
        from karl.testing import DummyProfile
        community = DummyCommunity()
        site = community.__parent__.__parent__
        site.sessions = DummySessions()
        profiles = testing.DummyModel()
        site["profiles"] = profiles
        profiles["a"] = DummyProfile()
        profiles["b"] = DummyProfile()
        profiles["c"] = DummyProfile()
        community.member_names = set([
            "b",
            "c",
        ])
        community.moderator_names = set([
            "a",
        ])
        blog = testing.DummyModel()
        community["blog"] = blog
        blogentry = blog["foo"] = DummyBlogEntry()
        self.context = blogentry["comments"]

        # Create dummy request
        request = testing.DummyRequest()
        request.environ['repoze.browserid'] = '1'
        self.request = request
예제 #8
0
 def setUp(self):
     cleanUp()
     self.sessions = sessions = DummySessions()
     context = DummyProfile(sessions=sessions)
     context.title = 'title'
     self.context = context
     request = testing.DummyRequest()
     request.environ['repoze.browserid'] = '1'
     self.request = request
     # this initializes the available groups
     karltesting.registerSettings()
예제 #9
0
 def test_without_content(self):
     context = DummyProfile()
     context.title = 'Z'
     request = testing.DummyRequest()
     renderer = testing.registerDummyRenderer(
         'templates/profile_recent_content.pt')
     from karl.testing import registerCatalogSearch
     registerCatalogSearch()
     self._callFUT(context, request)
     self.assert_(renderer.api is not None)
     self.assertEquals(len(renderer.recent_items), 0)
     self.assertFalse(renderer.batch_info['batching_required'])
예제 #10
0
파일: test_stats.py 프로젝트: iotest3/new
    def _mk_context(self):
        import datetime
        from karl.testing import DummyCommunity
        from karl.testing import DummyModel
        from karl.testing import DummyProfile
        from karl.testing import DummyRoot
        from karl.testing import registerCatalogSearch

        site = DummyRoot()
        site.users = DummyUsers()
        site.tags = DummyTags()
        profiles = site['profiles'] = DummyModel()

        chet = profiles['chet'] = DummyProfile(
            firstname='Chet',
            lastname='Baker',
            created=datetime.datetime(2010, 5, 12, 2, 43),
            location='bathroom',
            department='Crooning',
        )

        chuck = profiles['chuck'] = DummyProfile(
            firstname='Chuck',
            lastname='Mangione',
            created=datetime.datetime(2010, 5, 12, 2, 42),
            location='kitchen',
            department='Blowing',
        )

        chuck = profiles['admin'] = DummyProfile(
            firstname='System',
            lastname='User',
            created=datetime.datetime(2010, 5, 12, 2, 42),
            location='The Machine',
            department='Big Brother',
        )

        communities = site['communities'] = DummyModel()
        dandies = communities['dandies'] = DummyModel()
        dandies.member_names = ['chet', 'chuck']
        dandies.moderator_names = ['chuck']

        loners = communities['loners'] = DummyModel()
        loners.member_names = ['chet']
        loners.moderator_names = ['chet']

        lads = communities['lads'] = DummyModel()
        lads.member_names = ['chet', 'chip', 'charlie']
        lads.moderator_names = ['chet', 'chip']

        return site
예제 #11
0
    def test_not_editable(self):
        self._registerTagbox()
        self._registerCatalogSearch()

        from karl.testing import DummyUsers
        testing.registerDummySecurityPolicy('userid')
        renderer = testing.registerDummyRenderer('templates/profile.pt')
        request = testing.DummyRequest()
        context = DummyProfile()
        context.__name__ = 'chris'
        context.users = DummyUsers()
        context.users.add("userid", "userlogin", "password", [])
        context.users.add("chris", "chrislogin", "password", [])
        self._callFUT(context, request)
        self.assertEqual(len(renderer.actions), 1)
        self.assertEqual(renderer.actions[0][1], 'admin_edit_profile.html')
예제 #12
0
    def test_comment_ordering(self):
        context = DummyBlogEntry()
        context.sessions = DummySessions()
        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()
        request.environ['repoze.browserid'] = 1

        def dummy_byline_info(context, request):
            return context

        from zope.interface import Interface
        from karl.content.views.interfaces import IBylineInfo
        karl.testing.registerAdapter(dummy_byline_info, (Interface, Interface),
                                     IBylineInfo)
        self._register()
        from karl.utilities.interfaces import IKarlDates
        karl.testing.registerUtility(dummy, IKarlDates)
        response = self._callFUT(context, request)
        self.assertEqual(len(response['comments']), 2)
        self.assertEqual('before', response['comments'][0]['text'])
        self.assertEqual('sometext', response['comments'][1]['text'])
예제 #13
0
    def test_no_security_policy(self):
        context = DummyBlogEntry()
        context.sessions = DummySessions()
        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()
        request.environ['repoze.browserid'] = 1

        def dummy_byline_info(context, request):
            return context

        from zope.interface import Interface
        from karl.content.views.interfaces import IBylineInfo
        karl.testing.registerAdapter(dummy_byline_info, (Interface, Interface),
                                     IBylineInfo)
        self._register()
        from karl.utilities.interfaces import IKarlDates
        karl.testing.registerUtility(dummy, IKarlDates)
        response = self._callFUT(context, request)
        self.assertEqual(len(response['comments']), 1)
        c0 = response['comments'][0]
        self.assertEqual(c0['text'], 'sometext')

        self.assertEqual(d1, response['comments'][0]['date'])
        self.assertEqual(c0['author_name'], 'Dummy Profile')
        self.assertEqual(response['comments'][0]['edit_url'],
                         'http://example.com/blogentry/comments/1/edit.html')
예제 #14
0
파일: test_forum.py 프로젝트: lslaz1/karl
    def test_with_security_policy(self):
        self._register()
        registerLayoutProvider()
        import datetime
        _NOW = datetime.datetime.now()
        context = testing.DummyModel(title='title')
        context.sessions = DummySessions()
        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()
        request.environ['repoze.browserid'] = 1
        def dummy_byline_info(context, request):
            return context
        from karl.content.views.interfaces import IBylineInfo
        karl.testing.registerAdapter(dummy_byline_info, (Interface, Interface),
                                     IBylineInfo)
        self._register()
        karl.testing.registerDummySecurityPolicy(permissive=False)

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

        self.assertEqual(renderer.comments[0]['edit_url'], None)
예제 #15
0
    def test_user_home_path_w_subpath(self):
        from zope.interface import Interface
        from zope.interface import directlyProvides
        from pyramid.interfaces import ITraverserFactory
        from karl.testing import DummyCommunity
        from karl.testing import DummyProfile
        karl.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"
        karl.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)
예제 #16
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
        karl.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
        karl.testing.registerAdapter(GenericAtomEntry, (IBlogEntry, Interface),
                                     IAtomEntry)
        karl.testing.registerDummyRenderer('karl.views:templates/atomfeed.pt')
예제 #17
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
        karl.testing.registerAdapter(dummy_catalog_search, Interface,
                                     ICatalogSearch)

        # Register atom entry adapter
        from karl.views.interfaces import IAtomEntry
        from karl.content.views.atom import CommunityFileAtomEntry
        karl.testing.registerAdapter(CommunityFileAtomEntry,
                                     (Interface, Interface), IAtomEntry)
        karl.testing.registerDummyRenderer('karl.views:templates/atomfeed.pt')
예제 #18
0
    def test_new_password_mismatch(self):
        from karl.testing import DummyUsers
        context = DummyProfile()
        context.__name__ = 'me'
        context.users = DummyUsers()
        context.users.add('me', 'me', self._old_password(), [])

        request = testing.DummyRequest({
            'form.submitted': 1,
            'old_password': '******',
            'password': '******',
            'password_confirm': 'winwinwin',
            })
        renderer = testing.registerDummyRenderer('templates/change_password.pt')

        self._callFUT(context, request)
        self.failUnless(renderer.fielderrors)
예제 #19
0
    def setUp(self):
        # Register mail utility
        from repoze.sendmail.interfaces import IMailDelivery
        from karl.testing import DummyMailer
        self.mailer = DummyMailer()
        from pyramid.threadlocal import manager
        from pyramid.registry import Registry
        manager.stack[0]['registry'] = Registry('testing')
        karl.testing.registerUtility(self.mailer, IMailDelivery)

        # Register BlogEntryAlert adapter
        from karl.models.interfaces import IProfile
        from karl.content.interfaces import IBlogEntry
        from karl.content.views.adapters import BlogEntryAlert
        from karl.utilities.interfaces import IAlert
        from pyramid.interfaces import IRequest
        karl.testing.registerAdapter(BlogEntryAlert,
                                     (IBlogEntry, IProfile, IRequest), IAlert)

        karl.testing.registerDummySecurityPolicy("a")

        # Create dummy site skel
        from karl.testing import DummyCommunity
        self.community = DummyCommunity()
        self.site = self.community.__parent__.__parent__

        self.profiles = testing.DummyModel()
        self.site["profiles"] = self.profiles
        from karl.testing import DummyProfile
        self.profiles["a"] = DummyProfile()
        self.profiles["b"] = DummyProfile()
        self.profiles["c"] = DummyProfile()
        for profile in self.profiles.values():
            profile["alerts"] = testing.DummyModel()

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

        self.blog = self._makeContext()
        self.community["blog"] = self.blog
예제 #20
0
    def test_tags_capped_at_ten(self):
        from karl.testing import DummyUsers
        self._registerTagbox()
        self._registerCatalogSearch()
        testing.registerDummySecurityPolicy('eddie')
        TAGS = {'alpha': 1,
                'bravo': 2,
                'charlie': 3,
                'delta': 4,
                'echo': 5,
                'foxtrot': 6,
                'golf': 7,
                'hotel': 8,
                'india': 9,
                'juliet': 10,
                'kilo': 11,
               }
        context = DummyProfile()
        context.title = "Eddie"
        context.__name__ = "eddie"
        users = context.users = DummyUsers()
        users.add("eddie", "eddie", "password", [])
        tags = context.tags = testing.DummyModel()
        def _getTags(items=None, users=None, community=None):
            assert items is None
            assert list(users) == ['eddie']
            assert community is None
            return TAGS.keys()
        tags.getTags = _getTags
        def _getFrequency(tags=None, community=None, user=None):
            assert community is None
            assert tags is not None
            assert user == 'eddie'
            return TAGS.items()
        tags.getFrequency = _getFrequency
        request = testing.DummyRequest()
        renderer = testing.registerDummyRenderer('templates/profile.pt')

        response = self._callFUT(context, request)

        self.assertEqual(len(renderer.tags), 10)
        self.failUnless(renderer.tags[0], {'name': 'kilo', 'count': 11})
        self.failUnless(renderer.tags[1], {'name': 'juliet', 'count': 10})
        self.failUnless(renderer.tags[9], {'name': 'bravo', 'count': 2})
예제 #21
0
    def test_respect_alert_prefs(self):
        from repoze.sendmail.interfaces import IMailDelivery
        from pyramid.interfaces import IRequest
        from karl.models.interfaces import IProfile
        from karl.testing import DummyMailer

        mailer = DummyMailer()
        self.config.registry.registerUtility(mailer, IMailDelivery)

        community = DummyCommunity()
        community["foo"] = context = testing.DummyModel()
        directlyProvides(context, IDummy)

        site = community.__parent__.__parent__
        site["profiles"] = profiles = testing.DummyModel()
        profiles["a"] = DummyProfile()
        profiles["b"] = DummyProfile()
        profiles["b"].set_alerts_preference(community.__name__,
                                            IProfile.ALERT_DAILY_DIGEST)
        profiles["c"] = DummyProfile()
        profiles["c"].set_alerts_preference(community.__name__,
                                            IProfile.ALERT_NEVER)
        profiles["d"] = DummyProfile()
        profiles["d"].set_alerts_preference(community.__name__,
                                            IProfile.ALERT_WEEKLY_DIGEST)
        profiles["e"] = DummyProfile()
        profiles["e"].set_alerts_preference(community.__name__,
                                            IProfile.ALERT_BIWEEKLY_DIGEST)

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

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

        self._get_instance().emit(context, request)
        self.assertEqual(1, len(mailer))
        self.assertEqual(1, len(list(profiles["b"]._pending_alerts)))
예제 #22
0
    def test_success(self):
        from karl.testing import DummyUsers
        context = DummyProfile()
        context.__name__ = 'me'
        parent = testing.DummyModel()
        parent.__name__ = ''
        parent.__parent__ = None
        context.__parent__ = parent
        context.title = 'Me'
        context.email = '*****@*****.**'
        parent.users = DummyUsers()
        parent.users.add('me', 'me', self._old_password(), [])

        request = testing.DummyRequest({
            'form.submitted': 1,
            'old_password': '******',
            'password': '******',
            'password_confirm': 'newnewnew',
            })
        renderer = testing.registerDummyRenderer(
            'templates/change_password.pt')

        from repoze.sendmail.interfaces import IMailDelivery
        from karl.testing import DummyMailer
        mailer = DummyMailer()
        testing.registerUtility(mailer, IMailDelivery)

        response = self._callFUT(context, request)

        from repoze.who.plugins.zodb.users import get_sha_password
        new_enc = get_sha_password('newnewnew')
        self.assertEqual(parent.users.get_by_id('me')['password'], new_enc)

        self.assertEqual(response.location,
            'http://example.com/me/?status_message=Password%20changed')

        self.assertEqual(len(mailer), 1)
        msg = mailer.pop()
        self.assertEqual(msg.mto, ['*****@*****.**'])
        self.assertEqual(msg.mfrom, "*****@*****.**")
예제 #23
0
파일: test_blog.py 프로젝트: zagy/karl
    def test_it_two_comments(self):
        from karl.models.interfaces import ICommunity
        from karl.models.interfaces import ISite
        from zope.interface import directlyProvides
        from karl.testing import DummyProfile
        from repoze.workflow.testing import registerDummyWorkflow
        site = testing.DummyModel()
        site['test'] = context = testing.DummyModel()
        directlyProvides(context, ICommunity, ISite)
        registerDummyWorkflow('security')
        context.catalog = {'creation_date': DummyCreationDateIndex()}
        context['profiles'] = profiles = testing.DummyModel()
        profiles['dummy'] = DummyProfile(title='Dummy Creator')
        from webob.multidict import MultiDict
        request = testing.DummyRequest(params=MultiDict({
            'year': 2009,
            'month': 4
        }))
        request.layout_manager = mock.Mock()
        from karl.utilities.interfaces import IKarlDates
        karl.testing.registerUtility(dummy, IKarlDates)
        from datetime import datetime
        entry = testing.DummyModel(creator='dummy',
                                   title='Dummy Entry',
                                   description='Some words',
                                   created=datetime(2009, 4, 15))
        from zope.interface import directlyProvides
        from karl.content.interfaces import IBlogEntry
        directlyProvides(entry, IBlogEntry)
        entry['comments'] = testing.DummyModel()
        entry['comments']['1'] = DummyComment()
        entry['comments']['2'] = DummyComment()
        context['e1'] = entry

        def dummy_byline_info(context, request):
            return context

        from zope.interface import Interface
        from karl.content.views.interfaces import IBylineInfo
        karl.testing.registerAdapter(dummy_byline_info, (Interface, Interface),
                                     IBylineInfo)
        response = self._callFUT(context, request)
        self.assertEqual(len(response['entries']), 1)
        self.assertEqual(response['entries'][0]['title'], 'Dummy Entry')
        self.assertEqual(response['entries'][0]['creator_href'],
                         'http://example.com/test/e1/')
        self.assertEqual(response['entries'][0]['href'],
                         'http://example.com/test/e1/')
        self.assertEqual(response['entries'][0]['creator_title'],
                         'Dummy Creator')
예제 #24
0
 def test_from_profile(self):
     from karl.views.utils import get_user_date_format
     from karl.testing import DummyUsers
     from karl.testing import DummyProfile
     karl.testing.registerDummySecurityPolicy("userid")
     context = testing.DummyModel()
     profiles = context["profiles"] = testing.DummyModel()
     profile = profiles["userid"] = DummyProfile()
     profiles["userid"].date_format = 'en-CA'
     users = context.users = DummyUsers()
     users.add("userid", "userid", "password", [])
     request = testing.DummyRequest()
     date_format = get_user_date_format(context, request)
     self.assertEqual(date_format, 'en-CA')
예제 #25
0
    def test_comment_ordering(self):
        self._register()
        registerLayoutProvider()
        import datetime
        _NOW = datetime.datetime.now()
        _BEFORE = _NOW - datetime.timedelta(hours=1)

        context = testing.DummyModel()
        context.sessions = DummySessions()
        context.title = 'title'
        context['comments'] = testing.DummyModel()

        comment = testing.DummyModel()
        comment.creator = 'dummy'
        comment.created = _NOW
        comment.text = 'My dog has fleas.'
        context['comments']['1'] = comment

        comment2 = testing.DummyModel()
        comment2.creator = 'dummy'
        comment2.created = _BEFORE
        comment2.text = "My cat's breath smells like cat food."
        context['comments']['2'] = comment2

        context['attachments'] = testing.DummyModel()
        from karl.models.interfaces import ISite
        from karl.content.interfaces import IForum
        directlyProvides(context, ISite)
        alsoProvides(context, IForum)
        context['profiles'] = profiles = testing.DummyModel()
        profiles['dummy'] = DummyProfile(title='Dummy Profile')
        request = testing.DummyRequest()
        request.layout_manager = mock.Mock()
        request.layout_manager.layout.head_data = dict(panel_data={})
        request.environ['repoze.browserid'] = 1

        def dummy_byline_info(context, request):
            return context

        from karl.content.views.interfaces import IBylineInfo
        karl.testing.registerAdapter(dummy_byline_info, (Interface, Interface),
                                     IBylineInfo)
        renderer = karl.testing.registerDummyRenderer(
            'templates/show_forum_topic.pt')
        self._callFUT(context, request)

        self.assertEqual(len(renderer.comments), 2)
        self.assertEqual(renderer.comments[0]['text'],
                         "My cat's breath smells like cat food.")
        self.assertEqual(renderer.comments[1]['text'], 'My dog has fleas.')
예제 #26
0
    def test_show_recently_added(self):
        self._registerTagbox()

        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)

        from karl.testing import DummyUsers
        testing.registerDummySecurityPolicy('userid')
        renderer = testing.registerDummyRenderer('templates/profile.pt')
        request = testing.DummyRequest()
        context = DummyProfile()
        context.__name__ = 'chris'
        context.users = DummyUsers()
        context.users.add("userid", "userid", "password", [])
        context.users.add("chris", "chris", "password", [])
        self._callFUT(context, request)
        self.assertEqual(search_args['limit'], 5)
        self.assertEqual(search_args['creator'], 'chris')
        self.assertEqual(search_args['sort_index'], 'creation_date')
        self.assertEqual(search_args['reverse'], True)
        self.assertEqual(len(renderer.recent_items), 2)
        self.assertEqual(renderer.recent_items[0].context.title, 'doc1')
        self.assertEqual(renderer.recent_items[1].context.title, 'doc2')
예제 #27
0
 def test_no_communities(self):
     from karl.views.utils import get_user_home
     from karl.testing import DummyUsers
     from karl.testing import DummyProfile
     karl.testing.registerDummySecurityPolicy("userid")
     context = testing.DummyModel()
     communities = context["communities"] = testing.DummyModel()
     profiles = context["profiles"] = testing.DummyModel()
     profile = profiles["userid"] = DummyProfile()
     users = context.users = DummyUsers()
     users.add("userid", "userid", "password", [])
     request = testing.DummyRequest()
     target, extra_path = get_user_home(context, request)
     self.failUnless(target is communities)
     self.assertEqual(extra_path, [])
예제 #28
0
    def test_no_security_policy(self):
        self._register()
        registerLayoutProvider()
        import datetime
        _NOW = datetime.datetime.now()
        context = testing.DummyModel()
        context.sessions = DummySessions()
        context.title = 'title'
        context['comments'] = testing.DummyModel()
        comment = testing.DummyModel()
        comment.creator = 'dummy'
        comment.created = _NOW
        comment.text = 'sometext'
        context['comments']['1'] = comment
        context['attachments'] = testing.DummyModel()
        from karl.models.interfaces import ISite
        from karl.content.interfaces import IForum
        directlyProvides(context, ISite)
        alsoProvides(context, IForum)
        context['profiles'] = profiles = testing.DummyModel()
        profiles['dummy'] = DummyProfile(title='Dummy Profile')
        request = testing.DummyRequest()
        request.layout_manager = mock.Mock()
        request.layout_manager.layout.head_data = dict(panel_data={})
        request.environ['repoze.browserid'] = 1

        def dummy_byline_info(context, request):
            return context

        from karl.content.views.interfaces import IBylineInfo
        karl.testing.registerAdapter(dummy_byline_info, (Interface, Interface),
                                     IBylineInfo)
        renderer = karl.testing.registerDummyRenderer(
            'templates/show_forum_topic.pt')
        self._callFUT(context, request)
        self.assertEqual(len(renderer.comments), 1)
        c0 = renderer.comments[0]
        self.assertEqual(c0['text'], 'sometext')

        self.assertEqual(renderer.comments[0]['date'],
                         'Wednesday, January 28, 2009 08:32 AM')
        self.assertEqual(c0['author_name'], 'Dummy Profile')
        self.assertEqual(renderer.comments[0]['edit_url'],
                         'http://example.com/comments/1/edit.html')
예제 #29
0
파일: test_site.py 프로젝트: iotest3/new
 def test_user_home_path(self):
     from zope.interface.interfaces import IInterface
     from zope.interface import directlyProvides
     from pyramid.interfaces import ITraverserFactory
     from karl.testing import DummyCommunity
     from karl.testing import DummyProfile
     karl.testing.registerDummySecurityPolicy("userid")
     c = DummyCommunity()
     site = c.__parent__.__parent__
     directlyProvides(site, IInterface)
     c["foo"] = foo = testing.DummyModel()
     site["profiles"] = profiles = testing.DummyModel()
     profiles["userid"] = profile = DummyProfile()
     profile.home_path = "/communities/community/foo"
     karl.testing.registerAdapter(dummy_traverser_factory(foo), IInterface,
                                  ITraverserFactory)
     request = testing.DummyRequest()
     response = self._callFUT(site, request)
     self.assertEqual(response.location,
                      "http://example.com/communities/community/foo/")
예제 #30
0
    def test_space_as_home_path(self):
        from zope.interface import Interface
        from pyramid.interfaces import ITraverserFactory
        from karl.views.utils import get_user_home
        from karl.testing import DummyUsers
        from karl.testing import DummyProfile
        karl.testing.registerDummySecurityPolicy("userid")
        context = testing.DummyModel()
        communities = context["communities"] = testing.DummyModel()
        community = communities["community"] = testing.DummyModel()
        profiles = context["profiles"] = testing.DummyModel()
        profile = profiles["userid"] = DummyProfile()
        profile.home_path = ' '
        karl.testing.registerAdapter(dummy_traverser_factory, Interface,
                                     ITraverserFactory)

        users = context.users = DummyUsers()
        users.add("userid", "userid", "password", [
            "group.community:community:members",
        ])
        request = testing.DummyRequest()
        target, extra_path = get_user_home(context, request)
        self.failUnless(target is community)
        self.assertEqual(extra_path, [])
예제 #31
0
 def __init__(self):
     from karl.testing import DummyProfile
     testing.DummyModel.__init__(self)
     self['profiles'] = testing.DummyModel()
     self['profiles'][u'dummy'] = DummyProfile()
예제 #32
0
 def resolve(self, docid):
     from karl.testing import DummyProfile
     res = DummyProfile(__name__=docid.split('@')[0], email=docid)
     self.profile = res
     self.context[res.__name__] = res
     return res