def test_handle_submit_new_to_karl(self): from repoze.lemonade.testing import registerContentFactory from karl.models.interfaces import IInvitation from karl.utilities.interfaces import IRandomId request = testing.DummyRequest() context = self._makeCommunity() mailer = self._registerMailer() registerCatalogSearch() def nonrandom(size=6): return 'A' * size karltesting.registerUtility(nonrandom, IRandomId) registerContentFactory(DummyInvitation, IInvitation) controller = self._makeOne(context, request) converted = { 'email_addresses': [u'*****@*****.**'], 'text': u'some text', } karltesting.registerDummyRenderer( 'karl.views:templates/email_invite_new.pt') response = controller.handle_submit(converted) self.assertEqual( response.location, 'http://example.com/manage.html?status_message=One+user+invited.++' ) invitation = context['A' * 6] self.assertEqual(invitation.email, '*****@*****.**') self.assertEqual(1, len(mailer)) self.assertEqual(mailer[0].mto, [ u"*****@*****.**", ])
def test_handle_submit_inactive_user(self): from repoze.lemonade.testing import registerContentFactory from karl.models.interfaces import IInvitation from karl.utilities.interfaces import IRandomId request = testing.DummyRequest() context = self._makeCommunity() self._registerMailer() registerCatalogSearch() profile = karltesting.DummyProfile(security_state='inactive') profile.__name__ = 'd' registerCatalogSearch(results={'[email protected]': [ profile, ]}) def nonrandom(size=6): return 'A' * size karltesting.registerUtility(nonrandom, IRandomId) registerContentFactory(DummyInvitation, IInvitation) controller = self._makeOne(context, request) converted = { 'email_addresses': [u'*****@*****.**'], 'text': u'some text', } karltesting.registerDummyRenderer( 'karl.views:templates/email_add_existing.pt') from pyramid_formish import ValidationError self.assertRaises(ValidationError, controller.handle_submit, converted)
def test_submit_form(self): from repoze.sendmail.interfaces import IMailDelivery karltesting.registerDummyRenderer("templates/join_community.pt") c = karltesting.DummyCommunity() c.moderator_names = set(["moderator1", "moderator2"]) site = c.__parent__.__parent__ profiles = site["profiles"] = testing.DummyModel() profiles["user"] = karltesting.DummyProfile() profiles["moderator1"] = karltesting.DummyProfile() profiles["moderator2"] = karltesting.DummyProfile() mailer = karltesting.DummyMailer() karltesting.registerUtility(mailer, IMailDelivery) karltesting.registerDummySecurityPolicy("user") request = testing.DummyRequest({ "form.submitted": "1", "message": "Message text.", }) karltesting.registerDummyRenderer( 'karl.views:templates/email_join_community.pt') response = self._callFUT(c, request) self.assertEqual(response.location, "http://example.com/communities/community/" "?status_message=Your+request+has+been+sent+" "to+the+moderators.") self.assertEqual(len(mailer), 1) msg = mailer.pop() self.assertEqual(msg.mto, ["*****@*****.**", "*****@*****.**"])
def test_handle_submit_resend(self): karltesting.registerDummyRenderer( 'karl.views:templates/email_invite_new.pt') context = self._makeCommunity() context.title = 'community' context.description = 'description' request = testing.DummyRequest() controller = self._makeOne(context, request) converted = { 'members': [{ 'remove': False, 'name': 'invitation', 'resend': True, 'moderator': False, 'title': 'buz' }] } mailer = self._registerMailer() response = controller.handle_submit(converted) self.assertEqual(len(mailer), 1) self.assertEqual( response.location, 'http://example.com/communities/community/' 'manage.html?status_message=' 'Membership+information+changed%3A+' 'Resent+invitation+to+buz')
def test_handle_submit_new_to_karl(self): from repoze.lemonade.testing import registerContentFactory from karl.models.interfaces import IInvitation from karl.utilities.interfaces import IRandomId request = testing.DummyRequest() context = self._makeCommunity() mailer = self._registerMailer() registerCatalogSearch() def nonrandom(size=6): return 'A' * size karltesting.registerUtility(nonrandom, IRandomId) registerContentFactory(DummyInvitation, IInvitation) controller = self._makeOne(context, request) converted = { 'email_addresses': [u'*****@*****.**'], 'text': u'some text', } karltesting.registerDummyRenderer( 'karl.views:templates/email_invite_new.pt') response = controller.handle_submit(converted) self.assertEqual(response.location, 'http://example.com/manage.html?status_message=One+user+invited.++' ) invitation = context['A'*6] self.assertEqual(invitation.email, '*****@*****.**') self.assertEqual(1, len(mailer)) self.assertEqual(mailer[0].mto, [u"*****@*****.**",])
def test_handle_submit_already_in_karl(self): from repoze.lemonade.testing import registerContentFactory from karl.models.interfaces import IInvitation from karl.utilities.interfaces import IRandomId request = testing.DummyRequest() context = self._makeCommunity() mailer = self._registerMailer() registerCatalogSearch() profile = karltesting.DummyProfile(security_state='active') profile.__name__ = 'd' registerCatalogSearch(results={'[email protected]': [profile,]}) def nonrandom(size=6): return 'A' * size karltesting.registerUtility(nonrandom, IRandomId) registerContentFactory(DummyInvitation, IInvitation) controller = self._makeOne(context, request) converted = { 'email_addresses': [u'*****@*****.**'], 'text': u'some text', } karltesting.registerDummyRenderer( 'karl.views:templates/email_add_existing.pt') response = controller.handle_submit(converted) self.assertEqual(response.location, 'http://example.com/manage.html?status_message=One+existing+Karl+user+added+to+community.++' ) self.failIf('A'*6 in context) self.assertEqual(context.users.added_groups, [('d', 'group:community:members')])
def test_workflow_transition_from_custom(self): 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 test_handle_submit_already_in_karl(self): from repoze.lemonade.testing import registerContentFactory from karl.models.interfaces import IInvitation from karl.utilities.interfaces import IRandomId request = testing.DummyRequest() context = self._makeCommunity() self._registerMailer() registerCatalogSearch() profile = karltesting.DummyProfile(security_state='active') profile.__name__ = 'd' registerCatalogSearch(results={'[email protected]': [ profile, ]}) def nonrandom(size=6): return 'A' * size karltesting.registerUtility(nonrandom, IRandomId) registerContentFactory(DummyInvitation, IInvitation) controller = self._makeOne(context, request) converted = { 'email_addresses': [u'*****@*****.**'], 'text': u'some text', } karltesting.registerDummyRenderer( 'karl.views:templates/email_add_existing.pt') response = controller.handle_submit(converted) self.assertEqual( response.location, 'http://example.com/manage.html?status_message=One+existing+Karl+user+added+to+community.++' ) self.failIf('A' * 6 in context) self.assertEqual(context.users.added_groups, [('d', 'group:community:members')])
def test_handle_submit_success(self): from karl.models.interfaces import IProfile from repoze.lemonade.testing import registerContentFactory from repoze.sendmail.interfaces import IMailDelivery from repoze.workflow.testing import registerDummyWorkflow from karl.models.interfaces import ICommunity from zope.interface import directlyProvides workflow = registerDummyWorkflow('security') mailer = karltesting.DummyMailer() karltesting.registerUtility(mailer, IMailDelivery) registerContentFactory(DummyContent, IProfile) class DummyWhoPlugin(object): def remember(self, environ, identity): self.identity = identity return [] request = self._makeRequest() community = testing.DummyModel() profiles = testing.DummyModel() community['profiles'] = profiles community.users = karltesting.DummyUsers() community.members_group_name = 'community:members' directlyProvides(community, ICommunity) context = self._makeContext() community['invite'] = context community.title = 'Community' community.description = 'Community' community.sessions = DummySessions() context.email = '*****@*****.**' controller = self._makeOne(context, request) converted = {'password':'******', 'password_confirm':'1', 'username':'******', 'firstname':'firstname', 'lastname':'lastname', 'phone':'phone', 'extension':'extension', 'department':'department', 'position':'position', 'organization':'organization', 'location':'location', 'country':'country', 'websites':['website'], 'languages':'languages', 'date_format':'en-US', 'biography':'bio', } karltesting.registerDummyRenderer( 'karl.views:templates/email_accept_invitation.pt') response = controller.handle_submit(converted) self.assertEqual(response.location, 'http://example.com/?status_message=Welcome%21') self.assertEqual(community.users.added, ('username', 'username', '1', ['community:members'])) profiles = community['profiles'] self.failUnless('username' in profiles) self.assertEqual(workflow.initialized,[profiles['username']]) profile = profiles['username'] self.assertEqual('phone', profile.phone) self.assertEqual('firstname', profile.firstname) self.assertEqual('lastname', profile.lastname) self.assertEqual('bio', profile.biography) self.failIf('invite' in community) self.assertEqual(len(mailer), 1)
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({}) karltesting.registerDummyRenderer('templates/delete_resource.pt') self._register() karltesting.registerDummySecurityPolicy('userid') response = self._callFUT(context, request) self.assertEqual(parent.deleted, 'thename') self.assertEqual(response.location, 'http://example.com/')
def test_show_form(self): c = karltesting.DummyCommunity() site = c.__parent__.__parent__ profiles = site["profiles"] = testing.DummyModel() profiles["user"] = karltesting.DummyProfile() renderer = karltesting.registerDummyRenderer("templates/join_community.pt") karltesting.registerDummySecurityPolicy("user") request = testing.DummyRequest() karltesting.registerDummyRenderer("karl.views:templates/formfields.pt") self._callFUT(c, request) self.assertEqual(renderer.profile, profiles["user"]) self.assertEqual(renderer.community, c) self.assertEqual(renderer.post_url, "http://example.com/communities/community/join.html")
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({}) karltesting.registerDummyRenderer('templates/delete_resource.pt') self._register() response = self._callFUT(context, request) self.assertTrue(isinstance(response, dict))
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({}) karltesting.registerDummyRenderer("templates/delete_resource.pt") self._register() response = self._callFUT(context, request) self.assertEqual(response.status, "200 OK")
def test___call__with_userid_get(self): from repoze.sendmail.interfaces import IMailDelivery request = testing.DummyRequest({"user_id": "admin"}) context = self._getContext() mailer = karltesting.DummyMailer() karltesting.registerUtility(mailer, IMailDelivery) controller = self._makeOne(context, request) karltesting.registerDummyRenderer( 'karl.views:templates/email_add_existing.pt') response = controller() self.assertEqual(context.users.added_groups, [('admin','members')]) self.assertEqual(mailer[0].mto[0], '*****@*****.**') self.failUnless( response.location.startswith('http://example.com/manage.html'))
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({}) parent["profiles"] = testing.DummyModel() karltesting.registerDummyRenderer("templates/delete_resource.pt") self._register() karltesting.registerDummySecurityPolicy("userid") response = self._callFUT(context, request) self.assertEqual(parent.deleted, "thename") self.assertEqual(response.location, "http://example.com/")
def test___call__with_userid_get(self): from repoze.sendmail.interfaces import IMailDelivery request = testing.DummyRequest({"user_id": "admin"}) context = self._getContext() mailer = karltesting.DummyMailer() karltesting.registerUtility(mailer, IMailDelivery) controller = self._makeOne(context, request) karltesting.registerDummyRenderer( 'karl.views:templates/email_add_existing.pt') response = controller() self.assertEqual(context.users.added_groups, [('admin', 'members')]) self.assertEqual(mailer[0].mto[0], '*****@*****.**') self.failUnless( response.location.startswith('http://example.com/manage.html'))
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({}) parent['profiles'] = testing.DummyModel() karltesting.registerDummyRenderer('templates/delete_resource.pt') self._register() karltesting.registerDummySecurityPolicy('userid') response = self._callFUT(context, request) self.assertEqual(parent.deleted, 'thename') self.assertEqual(response.location, 'http://example.com/')
def test_handle_submit_success(self): from repoze.sendmail.interfaces import IMailDelivery request = testing.DummyRequest() context = self._getContext() mailer = karltesting.DummyMailer() karltesting.registerUtility(mailer, IMailDelivery) controller = self._makeOne(context, request) converted = {'users': (u'admin',), 'text':'some_text'} karltesting.registerDummyRenderer( 'karl.views:templates/email_add_existing.pt') response = controller.handle_submit(converted) self.assertEqual(context.users.added_groups, [('admin','members')]) self.assertEqual(mailer[0].mto[0], '*****@*****.**') self.failUnless( response.location.startswith('http://example.com/manage.html'))
def test_handle_submit_success(self): from repoze.sendmail.interfaces import IMailDelivery request = testing.DummyRequest() context = self._getContext() mailer = karltesting.DummyMailer() karltesting.registerUtility(mailer, IMailDelivery) controller = self._makeOne(context, request) converted = {'users': (u'admin', ), 'text': 'some_text'} karltesting.registerDummyRenderer( 'karl.views:templates/email_add_existing.pt') response = controller.handle_submit(converted) self.assertEqual(context.users.added_groups, [('admin', 'members')]) self.assertEqual(mailer[0].mto[0], '*****@*****.**') self.failUnless( response.location.startswith('http://example.com/manage.html'))
def test_long_history(self): from repoze.postoffice.message import Message comments = [] for i in xrange(6): comments.append( self._add_comment(self.blogentry, "comment%d" % i)) renderer = karltesting.registerDummyRenderer( 'templates/email_blog_comment_alert.pt') request = testing.DummyRequest() alert = self._makeOne(self.comment, self.profile, request) self.assertEqual(1, len(alert.mto)) self.assertEqual("*****@*****.**", alert.mto[0]) self.failUnless(isinstance(alert.message, Message)) self.assertEqual(alert.message["reply-to"], u'"Dummy Communit\xe0" <community+blog-7FFFFFFF' '@karl3.example.com>' ) messages, n = renderer.history self.assertEqual(n, 7) self.assertEqual(len(messages), 7) self.assertEqual(messages[0], self.blogentry) self.assertEqual(messages[1], comments[0]) self.assertEqual(messages[2], comments[1]) self.assertEqual(messages[3], comments[2]) self.assertEqual(messages[4], comments[3]) self.assertEqual(messages[5], comments[4]) self.assertEqual(messages[6], comments[5])
def test_long_history(self): from repoze.postoffice.message import Message comments = [] for i in xrange(6): comments.append(self._add_comment(self.blogentry, "comment%d" % i)) renderer = karltesting.registerDummyRenderer( 'templates/email_blog_comment_alert.pt') request = testing.DummyRequest() alert = self._makeOne(self.comment, self.profile, request) self.assertEqual(1, len(alert.mto)) self.assertEqual("*****@*****.**", alert.mto[0]) self.failUnless(isinstance(alert.message, Message)) self.assertEqual( alert.message["reply-to"], u'"Dummy Communit\xe0" <community+blog-7FFFFFFF' '@karl3.example.com>') messages, n = renderer.history self.assertEqual(n, 7) self.assertEqual(len(messages), 7) self.assertEqual(messages[0], self.blogentry) self.assertEqual(messages[1], comments[0]) self.assertEqual(messages[2], comments[1]) self.assertEqual(messages[3], comments[2]) self.assertEqual(messages[4], comments[3]) self.assertEqual(messages[5], comments[4]) self.assertEqual(messages[6], comments[5])
def test_render_footer_no_adapter(self): context = testing.DummyModel() request = testing.DummyRequest() api = self._makeOne(context, request) renderer = karltesting.registerDummyRenderer('templates/footer.pt') api.render_footer() renderer.assert_(api=api)
def test_generic_layout(self): renderer = karltesting.registerDummyRenderer( 'karl.views:templates/generic_layout.pt') context = testing.DummyModel() request = testing.DummyRequest() api = self._makeOne(context, request) api.generic_layout(a=1) renderer.assert_(a=1)
def test_render_footer_no_adapter(self): context = testing.DummyModel() request = testing.DummyRequest() api = self._makeOne(context, request) renderer = karltesting.registerDummyRenderer( 'templates/footer.pt') api.render_footer() renderer.assert_(api=api)
def test_handle_submit_resend(self): karltesting.registerDummyRenderer( 'karl.views:templates/email_invite_new.pt') context = self._makeCommunity() context.title = 'community' context.description = 'description' request = testing.DummyRequest() controller = self._makeOne(context, request) converted = {'members':[{'remove':False, 'name':'invitation', 'resend':True, 'moderator':False, 'title':'buz'}]} mailer = self._registerMailer() response = controller.handle_submit(converted) self.assertEqual(len(mailer), 1) self.assertEqual(response.location, 'http://example.com/communities/community/' 'manage.html?status_message=' 'Membership+information+changed%3A+' 'Resent+invitation+to+buz')
def test_workflow_transition_from_custom(self): 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 test_it(self): from zope.interface import Interface from karl.models.interfaces import ICommunity import datetime context = testing.DummyModel(title='thetitle') directlyProvides(context, ICommunity) context.member_names = context.moderator_names = set() context.title = "Community" foo = testing.DummyModel() foo.modified = datetime.datetime(2009, 9, 2, 10, 28, 0) request = testing.DummyRequest() karltesting.registerDummyRenderer( 'karl.views:templates/atomfeed.pt') from karl.models.interfaces import ICatalogSearch from karl.models.adapters import CatalogSearch catalog = karltesting.DummyCatalog({1:'/foo'}) karltesting.registerModels({'/foo':foo}) context.catalog = catalog karltesting.registerAdapter(CatalogSearch, (Interface), ICatalogSearch) self._callFUT(context, request)
def test_it_inform_moderators(self): from pyramid.interfaces import ISettings karltesting.registerUtility(karltesting.DummySettings(), ISettings) site = karltesting.DummyModel() site['fred'] = profile = karltesting.DummyProfile() profile.title = 'Fred Flintstone' profile.email = '*****@*****.**' site['clint'] = moderator = karltesting.DummyProfile() moderator.title = 'Clint' moderator.email = '*****@*****.**' site.users = karltesting.DummyUsers() site.users.add('fred', 'fred', 'password', set( ('group.community:Test1:members', 'group.community:Test2:members', 'group.community:Test2:moderators', 'group.SomeGroup'))) site.users.add('clint', 'clint', 'password', set( ('group.community:Test1:moderators', 'group.community:Test2:moderators'))) site['communities'] = communities = karltesting.DummyModel() communities['Test1'] = karltesting.DummyModel(title='Test One') communities['Test2'] = karltesting.DummyModel(title='Test Two') mailer = karltesting.registerDummyMailer() renderer = karltesting.registerDummyRenderer( 'templates/email_notify_former_staff.pt' ) self._call_fut(profile) removed = site.users.removed_groups self.failIf(('fred', 'group.SomeGroup') in removed) self.failUnless(('fred', 'group.community:Test1:members') in removed) self.failUnless(('fred', 'group.community:Test2:moderators') in removed) self.assertEqual(len(mailer), 1, mailer) sent = mailer[0] self.assertEqual(sent.mto, ['Clint <*****@*****.**>']) self.assertEqual(renderer.name, 'Fred Flintstone') self.assertEqual(renderer.communities, [ {'unremove_url': 'http://offline.example.com/app/communities/Test1' '/members/add_existing.html?user_id=fred', 'title': 'Test One'}, {'unremove_url': 'http://offline.example.com/app/communities/Test2' '/members/add_existing.html?user_id=fred', 'title': 'Test Two'}] )
def test_handle_submit_inactive_user(self): from repoze.lemonade.testing import registerContentFactory from karl.models.interfaces import IInvitation from karl.utilities.interfaces import IRandomId request = testing.DummyRequest() context = self._makeCommunity() mailer = self._registerMailer() registerCatalogSearch() profile = karltesting.DummyProfile(security_state='inactive') profile.__name__ = 'd' registerCatalogSearch(results={'[email protected]': [profile,]}) def nonrandom(size=6): return 'A' * size karltesting.registerUtility(nonrandom, IRandomId) registerContentFactory(DummyInvitation, IInvitation) controller = self._makeOne(context, request) converted = { 'email_addresses': [u'*****@*****.**'], 'text': u'some text', } karltesting.registerDummyRenderer( 'karl.views:templates/email_add_existing.pt') from pyramid_formish import ValidationError self.assertRaises(ValidationError, controller.handle_submit, converted)
def test_digest(self): from repoze.postoffice.message import Message renderer = karltesting.registerDummyRenderer( 'templates/email_blog_comment_alert.pt') renderer.string_response = "<body>Dummy message body.</body>" request = testing.DummyRequest() alert = self._makeOne(self.comment, self.profile, request) alert.alert.digest = True self.assertEqual(1, len(alert.mto)) self.assertEqual("*****@*****.**", alert.mto[0]) self.failUnless(isinstance(alert.message, Message)) self.assertEqual(alert.message["reply-to"], u'"Dummy Communit\xe0" <community+blog-7FFFFFFF' u'@karl3.example.com>')
def test_digest(self): from repoze.postoffice.message import Message renderer = karltesting.registerDummyRenderer( 'templates/email_blog_comment_alert.pt') renderer.string_response = "<body>Dummy message body.</body>" request = testing.DummyRequest() alert = self._makeOne(self.comment, self.profile, request) alert.alert.digest = True self.assertEqual(1, len(alert.mto)) self.assertEqual("*****@*****.**", alert.mto[0]) self.failUnless(isinstance(alert.message, Message)) self.assertEqual( alert.message["reply-to"], u'"Dummy Communit\xe0" <community+blog-7FFFFFFF' u'@karl3.example.com>')
def test_alert(self): from repoze.postoffice.message import Message renderer = karltesting.registerDummyRenderer( 'templates/email_blog_comment_alert.pt') request = testing.DummyRequest() alert = self._makeOne(self.comment, self.profile, request) self.assertEqual(1, len(alert.alert.mto)) self.assertEqual("*****@*****.**", alert.alert.mto[0]) self.failUnless(isinstance(alert.message, Message)) self.assertEqual(alert.message["reply-to"], u'"Dummy Communit\xe0" <community+blog-7FFFFFFF' u'@karl3.example.com>') self.assertEqual(alert.message['Precedence'], 'bulk') messages, n = renderer.history self.assertEqual(n, 1) self.assertEqual(messages[0], self.blogentry)
def test_alert(self): from repoze.postoffice.message import Message renderer = karltesting.registerDummyRenderer( 'templates/email_blog_comment_alert.pt') request = testing.DummyRequest() alert = self._makeOne(self.comment, self.profile, request) self.assertEqual(1, len(alert.mto)) self.assertEqual("*****@*****.**", alert.mto[0]) self.failUnless(isinstance(alert.message, Message)) self.assertEqual( alert.message["reply-to"], u'"Dummy Communit\xe0" <community+blog-7FFFFFFF' '@karl3.example.com>') self.assertEqual(alert.message['Precedence'], 'bulk') messages, n = renderer.history self.assertEqual(n, 1) self.assertEqual(messages[0], self.blogentry)
def test_show_members(self): from zope.interface import Interface from karl.models.interfaces import ICatalogSearch context = testing.DummyModel() context.member_names = ['a'] context.moderator_names = ['b'] profiles = testing.DummyModel() profiles['a'] = karltesting.DummyProfile() profiles['b'] = karltesting.DummyProfile() context['profiles'] = profiles d = {1:profiles['a'], 2:profiles['b']} searchkw = {} def resolver(docid): return d.get(docid) def dummy_catalog_search(context): def search(**kw): searchkw.update(kw) return 2, [1,2], resolver return search karltesting.registerAdapter(dummy_catalog_search, (Interface), ICatalogSearch) from karl.models.interfaces import ICommunity from zope.interface import directlyProvides directlyProvides(context, ICommunity) request = testing.DummyRequest(params={'hide_pictures':True}) renderer = karltesting.registerDummyRenderer('templates/show_members.pt') self._callFUT(context, request) actions = [('Manage Members', 'manage.html'), ('Add Existing', 'add_existing.html'), ('Invite New', 'invite_new.html')] self.assertEqual(renderer.actions, actions) self.assertEqual(len(renderer.members), 2) self.assertEqual(len(renderer.moderators), 1) self.assertEqual(renderer.hide_pictures, True) self.assertEqual(len(renderer.submenu), 2) self.assertEqual(renderer.submenu[0]['make_link'], True) self.assertEqual(renderer.submenu[1]['make_link'], False) self.assertEqual(searchkw['sort_index'], 'lastfirst')
def test_it(self): import mock from zope.interface import Interface from zope.interface import alsoProvides from pyramid.testing import DummyModel from pyramid.testing import DummyRequest from karl.models.interfaces import ICommunity from karl.models.interfaces import ISite from karl.models.interfaces import IIntranet from karl.models.interfaces import IIntranets from karl.views.interfaces import IIntranetPortlet from karl.testing import registerAdapter from karl.testing import registerDummyRenderer ANY = (Interface, Interface) WELL = u'<h1>WELL</h1>' BODY = u'<h1>BODY</h1>' FEATURE = u'<p>FEATURE</p>' root = DummyModel() alsoProvides(root, ISite) offices = root['offices'] = DummyModel() alsoProvides(offices, IIntranets) offices.feature = FEATURE context = offices['nice'] = DummyModel(title='nice office') context['foo'] = DummyModel() context['bar'] = DummyModel() context['spam'] = DummyModel() alsoProvides(context, ICommunity) alsoProvides(context, IIntranet) context.middle_portlets = ['foo', 'bar|baz'] context.right_portlets = ['spam|qux'] request = DummyRequest() request.layout_manager = mock.Mock() class _Portlet(object): def __init__(self, text): self._text = text @property def asHTML(self): return self._text _nameless_contexts = [] NAMELESS = '<p>NAMELESS</p>' def _nameless(context, req): assert req is request _nameless_contexts.append(context) return _Portlet(NAMELESS) registerAdapter(_nameless, ANY, IIntranetPortlet) _baz_contexts = [] BAZ = '<p>BAZ</p>' def _baz(context, req): assert req is request _baz_contexts.append(context) return _Portlet(BAZ) registerAdapter(_baz, ANY, IIntranetPortlet, name='baz') _qux_contexts = [] QUX = '<p>QUX</p>' def _qux(context, req): assert req is request _qux_contexts.append(context) return _Portlet(QUX) registerAdapter(_qux, ANY, IIntranetPortlet, name='qux') _ihb_data = [] def _IHB(data, _): _ihb_data.append(data) return WELL registerDummyRenderer( 'karl.views:templates/intranethome_body.pt', _IHB) _ihp_data = [] def _IHP(data, _): _ihp_data.append(data) return BODY registerDummyRenderer( 'karl.views:templates/intranet_homepage.pt', _IHP) response = self._callFUT(context, request) self.assertEqual(response.body, BODY) self.assertEqual(len(_ihp_data), 1) self.assertEqual(_ihp_data[0]['body'], WELL) self.assertEqual(len(_ihb_data), 1) self.assertTrue(_ihb_data[0]['current_intranet'] is context) self.assertEqual(_ihb_data[0]['feature'], FEATURE) self.assertEqual(_ihb_data[0]['middle_portlet_html'], NAMELESS + BAZ) self.assertEqual(_ihb_data[0]['right_portlet_html'], QUX)
def test_it(self): from zope.interface import Interface from zope.interface import alsoProvides from pyramid.testing import DummyModel from pyramid.testing import DummyRequest from karl.models.interfaces import ICommunity from karl.models.interfaces import ISite from karl.models.interfaces import IIntranet from karl.models.interfaces import IIntranets from karl.views.interfaces import IIntranetPortlet from karl.testing import registerAdapter from karl.testing import registerDummyRenderer ANY = (Interface, Interface) WELL = u"<h1>WELL</h1>" BODY = u"<h1>BODY</h1>" FEATURE = u"<p>FEATURE</p>" root = DummyModel() alsoProvides(root, ISite) offices = root["offices"] = DummyModel() alsoProvides(offices, IIntranets) offices.feature = FEATURE context = offices["nice"] = DummyModel(title="nice office") context["foo"] = DummyModel() context["bar"] = DummyModel() context["spam"] = DummyModel() alsoProvides(context, ICommunity) alsoProvides(context, IIntranet) context.middle_portlets = ["foo", "bar|baz"] context.right_portlets = ["spam|qux"] request = DummyRequest() class _Portlet(object): def __init__(self, text): self._text = text @property def asHTML(self): return self._text _nameless_contexts = [] NAMELESS = "<p>NAMELESS</p>" def _nameless(context, req): assert req is request _nameless_contexts.append(context) return _Portlet(NAMELESS) registerAdapter(_nameless, ANY, IIntranetPortlet) _baz_contexts = [] BAZ = "<p>BAZ</p>" def _baz(context, req): assert req is request _baz_contexts.append(context) return _Portlet(BAZ) registerAdapter(_baz, ANY, IIntranetPortlet, name="baz") _qux_contexts = [] QUX = "<p>QUX</p>" def _qux(context, req): assert req is request _qux_contexts.append(context) return _Portlet(QUX) registerAdapter(_qux, ANY, IIntranetPortlet, name="qux") _ihb_data = [] def _IHB(data, _): _ihb_data.append(data) return WELL registerDummyRenderer("karl.views:templates/intranethome_body.pt", _IHB) _ihp_data = [] def _IHP(data, _): _ihp_data.append(data) return BODY registerDummyRenderer("karl.views:templates/intranet_homepage.pt", _IHP) response = self._callFUT(context, request) self.assertEqual(response.body, BODY) self.assertEqual(len(_ihp_data), 1) self.assertEqual(_ihp_data[0]["body"], WELL) self.assertEqual(len(_ihb_data), 1) self.assertTrue(_ihb_data[0]["current_intranet"] is context) self.assertEqual(_ihb_data[0]["feature"], FEATURE) self.assertEqual(_ihb_data[0]["middle_portlet_html"], NAMELESS + BAZ) self.assertEqual(_ihb_data[0]["right_portlet_html"], QUX)
def setUp(self): cleanUp() karltesting.registerDummyRenderer( 'karl.views:templates/generic_layout.pt') karltesting.registerDummyRenderer( 'karl.views:templates/community_layout.pt')
def test_handle_submit_success(self): from karl.models.interfaces import IProfile from repoze.lemonade.testing import registerContentFactory from repoze.sendmail.interfaces import IMailDelivery from repoze.workflow.testing import registerDummyWorkflow from karl.models.interfaces import ICommunity from zope.interface import directlyProvides workflow = registerDummyWorkflow('security') mailer = karltesting.DummyMailer() karltesting.registerUtility(mailer, IMailDelivery) registerContentFactory(DummyContent, IProfile) class DummyWhoPlugin(object): def remember(self, environ, identity): self.identity = identity return [] request = self._makeRequest() community = testing.DummyModel() profiles = testing.DummyModel() community['profiles'] = profiles community.users = karltesting.DummyUsers() community.members_group_name = 'community:members' directlyProvides(community, ICommunity) context = self._makeContext() community['invite'] = context community.title = 'Community' community.description = 'Community' community.sessions = DummySessions() context.email = '*****@*****.**' controller = self._makeOne(context, request) converted = { 'password': '******', 'password_confirm': '1', 'username': '******', 'firstname': 'firstname', 'lastname': 'lastname', 'phone': 'phone', 'extension': 'extension', 'department': 'department', 'position': 'position', 'organization': 'organization', 'location': 'location', 'country': 'country', 'websites': ['website'], 'languages': 'languages', 'date_format': 'en-US', 'biography': 'bio', } karltesting.registerDummyRenderer( 'karl.views:templates/email_accept_invitation.pt') response = controller.handle_submit(converted) self.assertEqual(response.location, 'http://example.com/?status_message=Welcome%21') self.assertEqual(community.users.added, ('username', 'username', '1', ['community:members'])) profiles = community['profiles'] self.failUnless('username' in profiles) self.assertEqual(workflow.initialized, [profiles['username']]) profile = profiles['username'] self.assertEqual('phone', profile.phone) self.assertEqual('firstname', profile.firstname) self.assertEqual('lastname', profile.lastname) self.assertEqual('bio', profile.biography) self.failIf('invite' in community) self.assertEqual(len(mailer), 1)
def setUp(self): testing.cleanUp() renderer = karltesting.registerDummyRenderer( "karl.views:templates/generic_layout.pt")
def test_it(self): from zope.interface import Interface from zope.interface import alsoProvides from pyramid.testing import DummyModel from pyramid.testing import DummyRequest from karl.models.interfaces import ICommunity from karl.models.interfaces import ISite from karl.models.interfaces import IIntranet from karl.models.interfaces import IIntranets from karl.views.interfaces import IIntranetPortlet from karl.testing import registerAdapter from karl.testing import registerDummyRenderer ANY = (Interface, Interface) WELL = u'<h1>WELL</h1>' BODY = u'<h1>BODY</h1>' FEATURE = u'<p>FEATURE</p>' root = DummyModel() alsoProvides(root, ISite) offices = root['offices'] = DummyModel() alsoProvides(offices, IIntranets) offices.feature = FEATURE context = offices['nice'] = DummyModel(title='nice office') context['foo'] = DummyModel() context['bar'] = DummyModel() context['spam'] = DummyModel() alsoProvides(context, ICommunity) alsoProvides(context, IIntranet) context.middle_portlets = ['foo', 'bar|baz'] context.right_portlets = ['spam|qux'] request = DummyRequest() class _Portlet(object): def __init__(self, text): self._text = text @property def asHTML(self): return self._text _nameless_contexts = [] NAMELESS = '<p>NAMELESS</p>' def _nameless(context, req): assert req is request _nameless_contexts.append(context) return _Portlet(NAMELESS) registerAdapter(_nameless, ANY, IIntranetPortlet) _baz_contexts = [] BAZ = '<p>BAZ</p>' def _baz(context, req): assert req is request _baz_contexts.append(context) return _Portlet(BAZ) registerAdapter(_baz, ANY, IIntranetPortlet, name='baz') _qux_contexts = [] QUX = '<p>QUX</p>' def _qux(context, req): assert req is request _qux_contexts.append(context) return _Portlet(QUX) registerAdapter(_qux, ANY, IIntranetPortlet, name='qux') _ihb_data = [] def _IHB(data, _): _ihb_data.append(data) return WELL registerDummyRenderer( 'karl.views:templates/intranethome_body.pt', _IHB) _ihp_data = [] def _IHP(data, _): _ihp_data.append(data) return BODY registerDummyRenderer( 'karl.views:templates/intranet_homepage.pt', _IHP) response = self._callFUT(context, request) self.assertEqual(response.body, BODY) self.assertEqual(len(_ihp_data), 1) self.assertEqual(_ihp_data[0]['body'], WELL) self.assertEqual(len(_ihb_data), 1) self.assertTrue(_ihb_data[0]['current_intranet'] is context) self.assertEqual(_ihb_data[0]['feature'], FEATURE) self.assertEqual(_ihb_data[0]['middle_portlet_html'], NAMELESS + BAZ) self.assertEqual(_ihb_data[0]['right_portlet_html'], QUX)