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, ["*****@*****.**", "*****@*****.**"])
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
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')
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')
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)
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')
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')
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")
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)
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:])
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)
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:])
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])
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/')
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')
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')
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:])
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)
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')
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')
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')
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)
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'])
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"])
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})
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, [])
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)
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'))
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'])
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")
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)