示例#1
0
    def test_submit_form(self):
        from repoze.sendmail.interfaces import IMailDelivery
        testing.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()
        testing.registerUtility(mailer, IMailDelivery)

        testing.registerDummySecurityPolicy("user")
        request = testing.DummyRequest({
            "form.submitted": "1",
            "message": "Message text.",
        })
        testing.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, ["*****@*****.**",
                                   "*****@*****.**"])
示例#2
0
文件: test_acl.py 项目: boothead/karl
 def test_workflow_transition_from_custom(self):
     testing.registerDummyRenderer('templates/edit_acl.pt')
     from repoze.workflow.testing import DummyWorkflow
     from zope.interface import Interface
     from zope.interface import directlyProvides
     workflow = DummyWorkflow()
     def state_info(context, request):
         return [{'name': 'foo', 'current': True, 'transitions': True},
                 {'name': 'bar', 'current': False, 'transitions': True}]
     workflow.state_info = state_info
     def get_dummy_workflow(*args, **kw):
         return workflow
     import karl.views.acl
     old_f = karl.views.acl.get_context_workflow
     karl.views.acl.get_context_workflow = get_dummy_workflow
     try:
         context = testing.DummyModel()
         context.state = 'foo'
         context.__custom_acl__ = []
         directlyProvides(Interface)
         request = testing.DummyRequest()
         request.POST['form.security_state'] = 1
         request.POST['security_state'] = 'bar'
         self._callFUT(context, request)
         self.assertEqual(workflow.transitioned[0]['to_state'], 'bar')
         self.assertEqual(workflow.resetted, [context,])
         self.failIf(hasattr(context, '__custom_acl__'))
     finally:
         karl.views.acl.get_context_workflow = old_f
示例#3
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')
示例#4
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')
示例#5
0
 def test_get(self):
     context = testing.DummyModel()
     context.title = 'A title'
     context.text = 'Some text'
     request = testing.DummyRequest()
     request.api = get_template_api(context, request)
     testing.registerDummyRenderer('templates/page.pt')
     show_page(context, request)
示例#6
0
    def test_handle_submit(self):
        from karl.models.interfaces import IComment
        from karl.content.interfaces import ICommunityFile
        from repoze.lemonade.testing import registerContentFactory
        registerContentFactory(DummyComment, IComment)
        registerContentFactory(DummyFile, ICommunityFile)

        from karl.testing import DummyUpload
        attachment1 = DummyUpload(filename="test1.txt")
        attachment2 = DummyUpload(filename=r"C:\My Documents\Ha Ha\test2.txt")
        converted = {'add_comment': u'This is my comment',
                     'attachments': [attachment1, attachment2],
                     'sendalert': False}
        context = self.context
        controller = self._makeOne(context, self.request)
        response = controller.handle_submit(converted)
        location = ('http://example.com/communities/community/blog/foo/'
                    '?status_message=Comment%20added')
        self.assertEqual(response.location, location)
        self.failUnless(u'99' in context)
        comment = context[u'99']
        self.assertEqual(comment.title, 'Re: Dummy Blog Entry')
        self.assertEqual(comment.text, u'This is my comment')
        self.assertEqual(len(comment), 2)
        self.failUnless('test1.txt' in comment)
        self.failUnless('test2.txt' in comment)

        # try again w/ a workflow, and w/ sendalert == True
        del context[u'99']
        workflow = self._registerSecurityWorkflow()
        blogentry = context.__parent__
        blogentry.creator = 'b'
        blogentry.created = datetime.now()
        blogentry.text = u'Blog entry text'
        converted = {'add_comment': u'This is my OTHER comment',
                     'attachments': [],
                     'sendalert': True,
                     'security_state': 'public'}
        testing.registerDummyRenderer(
            'karl.content.views:templates/email_blog_comment_alert.pt')
        response = controller.handle_submit(converted)
        self.assertEqual(response.location, location)
        self.failUnless(u'99' in context)
        comment = context[u'99']
        self.assertEqual(len(comment), 0)
        mailer = self.mailer
        self.assertEqual(len(mailer), 3)
        recipients = [mail.mto[0] for mail in mailer]
        self.failUnless('*****@*****.**' in recipients)
        self.failUnless('*****@*****.**' in recipients)
        self.failUnless('*****@*****.**' in recipients)
        self.failUnless(comment in workflow.initialized)
        self.assertEqual(len(workflow.transitioned), 1)
        transition = workflow.transitioned[0]
        self.failUnless(transition['content'] is comment)
        self.assertEqual(transition['to_state'], 'public')
示例#7
0
 def setUp(self):
     testing.cleanUp()
     from karl.models.interfaces import ISite
     site = testing.DummyModel(sessions=DummySessions())
     directlyProvides(site, ISite)
     self.context = site
     request = testing.DummyRequest()
     request.environ['repoze.browserid'] = '1'
     self.request = request
     testing.registerDummyRenderer('karl.views:forms/templates/snippets.pt')
示例#8
0
    def test_handle_submit(self):
        from karl.testing import registerSettings
        registerSettings()

        context = self.blog
        self.site.system_email_domain = 'example.com'
        tags = DummyTags()
        self.site.tags = tags
        from karl.testing import DummyCatalog
        self.site.catalog = DummyCatalog()
        self.site.sessions = DummySessions()
        from karl.testing import DummyUpload
        attachment1 = DummyUpload(filename="test1.txt")
        attachment2 = DummyUpload(filename=r"C:\My Documents\Ha Ha\test2.txt")
        converted = {
            'title':'foo',
            'text':'text',
            'tags':['tag1', 'tag2'],
            'sendalert':True,
            'security_state':'public',
            'attachments':[attachment1, attachment2],
            }
        self._register()
        from karl.content.interfaces import IBlogEntry
        from karl.content.interfaces import ICommunityFile
        from repoze.lemonade.testing import registerContentFactory
        registerContentFactory(DummyBlogEntry, IBlogEntry)
        registerContentFactory(DummyFile, ICommunityFile)
        request = self._makeRequest()
        controller = self._makeOne(context, request)
        testing.registerDummyRenderer(
            'templates/email_blog_entry_alert.pt')
        response = controller.handle_submit(converted)
        self.assertEqual(response.location,
                         'http://example.com/communities/community/blog/foo/')
        self.assertEqual(3, len(self.mailer))
        recipients = reduce(lambda x,y: x+y, [x.mto for x in self.mailer])
        recipients.sort()
        self.assertEqual(["*****@*****.**", "*****@*****.**", "*****@*****.**",], recipients)

        blogentry_url = "http://example.com/communities/community/blog/foo/"

        attachments_url = "%sattachments" % blogentry_url
        self.failUnless(context['foo']['attachments']['test1.txt'])
        self.failUnless(context['foo']['attachments']['test2.txt'])

        body = self.mailer[0].msg.get_payload(decode=True)
        self.assertEqual(body, '')

        attachment1 = context['foo']['attachments']['test1.txt']
        self.assertEqual(attachment1.filename, "test1.txt")

        attachment2 = context['foo']['attachments']['test2.txt']
        self.assertEqual(attachment2.filename, "test2.txt")
示例#9
0
    def test_submitted_inherit_disabled_not_inherited(self):
        testing.registerDummyRenderer('templates/edit_acl.pt')
        context = testing.DummyModel()
        acl = context.__acl__ = self._makeACL(admins=('phred', 'bharney'))
        request = testing.DummyRequest()
        request.POST['form.inherit'] = 'Update Inherited'
        request.POST['inherit'] = 'disabled'

        self._callFUT(context, request)

        self.assertEqual(context.__acl__, acl)
示例#10
0
    def test_submitted_remove_no_inherit(self):
        testing.registerDummyRenderer('templates/edit_acl.pt')
        context = testing.DummyModel()
        acl = context.__acl__ = self._makeACL(admins=('phred', 'bharney'))
        request = testing.DummyRequest()
        request.POST['form.remove'] = 'X'
        request.POST['index'] = 0

        self._callFUT(context, request)

        self.assertEqual(context.__acl__, acl[1:])
示例#11
0
    def test_submitted_move_down_at_bottom_unchanged_no_inherit(self):
        testing.registerDummyRenderer('templates/edit_acl.pt')
        context = testing.DummyModel()
        acl = context.__acl__ = self._makeACL(admins=('phred', 'bharney'))
        request = testing.DummyRequest()
        request.POST['form.move_down'] = 'v'
        request.POST['index'] = 1

        self._callFUT(context, request)

        self.assertEqual(context.__acl__, acl)
示例#12
0
    def test_submitted_move_up_not_at_top_moves_up_inherit(self):
        context = testing.DummyModel()
        acl = context.__acl__ = self._makeACL(admins=('phred', 'bharney'),
                                              no_inherit=False)
        request = testing.DummyRequest()
        request.POST['form.move_up'] = '^'
        request.POST['index'] = 1

        testing.registerDummyRenderer('karl.views:templates/edit_acl.pt')
        self._callFUT(context, request)

        self.assertEqual(context.__acl__, acl[1:2] + acl[0:1] + acl[2:])
示例#13
0
    def test_submitted_inherit_disabled_inherited(self):
        testing.registerDummyRenderer('templates/edit_acl.pt')
        from opencore.security.policy import NO_INHERIT
        context = testing.DummyModel()
        acl = context.__acl__ = self._makeACL(admins=('phred', 'bharney'),
                                              no_inherit=False)
        request = testing.DummyRequest()
        request.POST['form.inherit'] = 'Update Inherited'
        request.POST['inherit'] = 'disabled'

        self._callFUT(context, request)

        self.assertEqual(context.__acl__, acl + [NO_INHERIT])
示例#14
0
 def test_confirmed(self):
     request = testing.DummyRequest({'confirm':'1'})
     context = testing.DummyModel(title='oldtitle')
     parent = DummyParent()
     parent['thename'] = context
     parent.catalog = karltesting.DummyCatalog({})
     parent.users = karltesting.DummyUsers({})
     testing.registerDummyRenderer('templates/delete_resource.pt')
     self._register()
     testing.registerDummySecurityPolicy('userid')
     response = self._callFUT(context, request)
     self.assertEqual(parent.deleted, 'thename')
     self.assertEqual(response.location, 'http://example.com/')
示例#15
0
    def test_not_confirmed(self):
        from karl.testing import registerLayoutProvider
        registerLayoutProvider()

        request = testing.DummyRequest()
        context = testing.DummyModel(title='oldtitle')
        context.__name__  = 'thename'
        context.catalog = karltesting.DummyCatalog({})
        context.users = karltesting.DummyUsers({})
        testing.registerDummyRenderer('templates/delete_resource.pt')
        self._register()
        response = self._callFUT(context, request)
        self.assertEqual(response.status, '200 OK')
示例#16
0
    def setUp(self):
        cleanUp()

        # When you see:
        #   AttributeError: 'NoneType' object has no attribute 'url'
        # ...it is often because you are pointed at the wrong .pt
        self.template_fn = 'templates/show_page.pt'

        self.parent = DummyModel(title='dummyparent')
        self.context = DummyModel(title='dummytitle', text='dummytext')
        self.context['attachments'] = DummyModel()
        self.parent['child'] = self.context
        self.parent.catalog = DummyCatalog()
        testing.registerDummyRenderer('karl.views:templates/formfields.pt')
示例#17
0
    def test_submitted_add_no_inherit(self):
        testing.registerDummyRenderer('templates/edit_acl.pt')
        context = testing.DummyModel()
        acl = context.__acl__ = self._makeACL(admins=('phred', 'bharney'))
        request = testing.DummyRequest()
        request.POST['form.add'] = 'Add'
        request.POST['verb'] = 'Allow'
        request.POST['principal'] = 'wylma'
        request.POST['permissions'] = 'view'

        self._callFUT(context, request)

        self.assertEqual(context.__acl__,
                         acl[:-1] + [('Allow', 'wylma', ('view',))] + acl[-1:])
示例#18
0
    def test_digest(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["a"].set_alerts_preference(community.__name__,
                                            IProfile.ALERT_DIGEST)
        profiles["b"] = DummyProfile()
        profiles["b"].set_alerts_preference(community.__name__,
                                            IProfile.ALERT_DIGEST)

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

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

        tool = self._get_instance()
        tool.emit(context, request)
        community.moderator_names = set()
        tool.emit(context, request)

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

        testing.registerDummyRenderer('karl.utilities:email_digest.pt')

        tool.send_digests(site)

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

        self.assertEqual(['*****@*****.**',], mailer[0].mto)
        self.assertEqual(['*****@*****.**',], mailer[1].mto)
示例#19
0
 def test_GET_came_from_endswith_logout_html_relative(self):
     request = testing.DummyRequest({'came_from':'/logout.html'})
     context = testing.DummyModel()
     renderer = testing.registerDummyRenderer('templates/login.pt')
     response = self._callFUT(context, request)
     self.assertEqual(renderer.came_from, 'http://example.com/')
     self.assertEqual(renderer.app_url, 'http://example.com')
示例#20
0
 def test_my_view(self):
     from myproject.views import my_view
     context = testing.DummyModel()
     request = testing.DummyRequest()
     renderer = testing.registerDummyRenderer('templates/mytemplate.pt')
     response = my_view(context, request)
     self.assertEqual(renderer.project, 'myproject')
示例#21
0
 def test_my_view(self):
     from bingo.views import my_view
     context = testing.DummyModel()
     request = testing.DummyRequest()
     renderer = testing.registerDummyRenderer('templates/mytemplate.pt')
     response = my_view(context, request)
     renderer.assert_(project='Bingo')
示例#22
0
 def test_show_form(self):
     context = DummyProfile()
     request = testing.DummyRequest()
     renderer = testing.registerDummyRenderer('templates/change_password.pt')
     response = self._callFUT(context, request)
     self.failIf(response.location)
     self.failIf(renderer.fielderrors)
示例#23
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'])
示例#24
0
    def test_show_form(self):
        renderer = testing.registerDummyRenderer(
            'templates/manage_communities.pt')
        request = testing.DummyRequest(
            url="http://example.com/profiles/a/manage_communities.html")
        self.profile.set_alerts_preference("community2", 1)
        self._callFUT(self.profile, request)

        self.assertEqual(renderer.post_url,
            "http://example.com/profiles/a/manage_communities.html")
        self.assertEqual(2, len(renderer.communities))

        community1 = renderer.communities.pop(0)
        self.assertEqual("community1", community1["name"])
        self.assertEqual("Test Community 1", community1["title"])
        self.assertTrue(community1["alerts_pref"][0]["selected"])
        self.assertFalse(community1["alerts_pref"][1]["selected"])
        self.assertFalse(community1["alerts_pref"][2]["selected"])
        self.assertTrue(community1["may_leave"])

        community2 = renderer.communities.pop(0)
        self.assertEqual("community2", community2["name"])
        self.assertEqual("Test Community 2", community2["title"])
        self.assertFalse(community2["alerts_pref"][0]["selected"])
        self.assertTrue(community2["alerts_pref"][1]["selected"])
        self.assertFalse(community2["alerts_pref"][2]["selected"])
        self.assertFalse(community2["may_leave"])
示例#25
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})
示例#26
0
    def test_communities_nonviewable_filtered(self):
        self._registerTagbox()
        self._registerCatalogSearch()

        from repoze.bfg.testing import DummyModel
        from repoze.bfg.testing import registerDummySecurityPolicy
        registerDummySecurityPolicy(permissive=False)
        from karl.testing import DummyCommunity
        from karl.testing import DummyUsers
        renderer = testing.registerDummyRenderer('templates/profile.pt')
        request = testing.DummyRequest()
        context = DummyProfile()
        users = DummyUsers()

        community1 = DummyCommunity()
        community1.title = "Community 1"

        communities = community1.__parent__
        communities["community2"] = community2 = DummyCommunity()
        community2.title = "Community 2"
        users.add("userid", "userid", "password",
                  ["group.community:community:members",
                   "group.community:community2:moderators"])

        site = communities.__parent__
        site.users = users
        site["profiles"] = profiles = DummyModel()
        profiles["userid"] = context

        self._callFUT(context, request)
        self.assertEqual(renderer.communities, [])
示例#27
0
 def test_no_log(self):
     request = testing.DummyRequest()
     renderer = testing.registerDummyRenderer('templates/admin/log.pt')
     response = self.fut(None, request)
     self.assertEqual(len(renderer.logs), 2)
     self.assertEqual(renderer.log, None)
     self.assertEqual(len(renderer.lines), 0)
示例#28
0
 def test_no_filter(self):
     request = testing.DummyRequest()
     renderer = testing.registerDummyRenderer('templates/admin/syslog.pt')
     response = self.fut(None, request)
     self.assertEqual(len(renderer.entries), 4)
     self.assertEqual(renderer.instance, '_any')
     self.failUnless(renderer.entries[0].startswith('Dec 26 11:15:23'))
示例#29
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'])
示例#30
0
 def test_render(self):
     context = testing.DummyModel(title='Dummy')
     request = testing.DummyRequest()
     renderer = testing.registerDummyRenderer(
         'templates/advanced_folder.pt')
     response = self._callFUT(context, request)
     self.assertEqual(renderer.post_url, "http://example.com/advanced.html")
示例#31
0
    def test_filter_content_by_title(self):
        renderer = testing.registerDummyRenderer(
            'templates/admin/delete_content.pt'
        )
        self.search.add_result([
            self.site['bigendians'],
            self.site['littleendians'],
        ])
        self.search.add_result([
            self.site['bigendians'],
            self.site['littleendians'],
        ])

        request = testing.DummyRequest(
            params=dict(
                filter_content=1,
                title_contains="Little",
            )
        )
        response = self.fut(self.site, request)
        c = renderer.filtered_content
        self.assertEqual(len(c), 1)
        self.assertEqual(c[0]['path'], "/littleendians")
        self.assertEqual(c[0]['url'], "http://example.com/littleendians/")
        self.assertEqual(c[0]['title'], "Little Endians")
        self.assertEqual(c[0]['modified'], "12/26/2009 03:31")
        self.assertEqual(c[0]['creator_name'], "Bill Haverchuck")
        self.assertEqual(c[0]['creator_url'],
                         "http://example.com/profiles/geekbill/")
        self.failUnless(self.site['littleendians'].deactivated)