def test_handle_submit_success(self): self._register() from zope.interface import directlyProvides from karl.models.interfaces import ISite from karl.models.interfaces import ICommunity from repoze.lemonade.interfaces import IContentFactory context = testing.DummyModel() directlyProvides(context, ISite) tags = context.tags = testing.DummyModel() _tagged = [] def _update(item, user, tags): _tagged.append((item, user, tags)) tags.update = _update karltesting.registerDummySecurityPolicy('userid') workflow = self._registerDummyWorkflow() karltesting.registerAdapter(lambda *arg: DummyCommunity, (ICommunity,), IContentFactory) dummy_tool_factory = DummyToolFactory() self._registerAddables([{'name':'blog', 'title':'blog', 'component':dummy_tool_factory}]) context.users = karltesting.DummyUsers({}) context.catalog = karltesting.DummyCatalog({1:'/foo'}) request = testing.DummyRequest() controller = self._makeOne(context, request) converted = {'title':'Thetitle yo', 'description':'thedescription', 'text':'thetext', 'tools': ['blog'], 'security_state': 'private', 'tags': ['foo'], 'default_tool': 'blog', } result = controller.handle_submit(converted) rl = 'http://example.com/thetitle-yo/members/add_existing.html' self.failUnless(result.location.startswith(rl)) community = context['thetitle-yo'] self.assertEqual(community.title, 'Thetitle yo') self.assertEqual(community.description, 'thedescription') self.assertEqual(community.text, 'thetext') self.assertEqual(community.default_tool, 'blog') self.assertEqual(community.creator, 'userid') self.assertEqual(community.modified_by, 'userid') self.assertEqual( context.users.added_groups, [('userid', 'moderators'), ('userid', 'members') ] ) self.assertEqual(dummy_tool_factory.added, True) self.assertEqual(len(_tagged), 1) self.assertEqual(_tagged[0][0], None) self.assertEqual(_tagged[0][1], 'userid') self.assertEqual(_tagged[0][2], ['foo']) self.assertEqual(workflow.transitioned[0]['to_state'], 'private') # try again w/ an invalid default_tool converted['title'] = 'Another title yo' converted['default_tool'] = 'wiki' result = controller.handle_submit(converted) community = context['another-title-yo'] self.failUnless(community.default_tool is None)
def _makeCommunity(self): from karl.models.interfaces import ICommunity from karl.models.interfaces import IInvitation from zope.interface import directlyProvides community = testing.DummyModel() community.member_names = set(['a']) community.moderator_names = set(['b', 'c']) site = testing.DummyModel() site['communities'] = testing.DummyModel() site['communities']['community'] = community profiles = testing.DummyModel() profiles['a'] = karltesting.DummyProfile() profiles['b'] = karltesting.DummyProfile() profiles['c'] = karltesting.DummyProfile() invitation = testing.DummyModel(email='*****@*****.**', message='message') directlyProvides(invitation, IInvitation) community['invitation'] = invitation site['profiles'] = profiles users = karltesting.DummyUsers(community) site.users = users directlyProvides(community, ICommunity) community.moderators_group_name = 'moderators' community.members_group_name = 'members' return community
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_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_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 _makeCommunity(self): from karl.models.interfaces import ICommunity from zope.interface import directlyProvides community = testing.DummyModel() community.member_names = set(['a']) community.moderator_names = set(['b', 'c']) users = karltesting.DummyUsers(community) community.users = users directlyProvides(community, ICommunity) community.moderators_group_name = 'group:community:moderators' community.members_group_name = 'group:community:members' community.title = 'community' community.description = 'description' return community
def _getContext(self): context = testing.DummyModel() from karl.models.interfaces import ICommunity from zope.interface import directlyProvides directlyProvides(context, ICommunity) context.users = karltesting.DummyUsers() context.title = 'thetitle' context.description = 'description' context.members_group_name = 'members' context['profiles'] = testing.DummyModel() admin = testing.DummyModel() admin.email = '*****@*****.**' context['profiles']['admin'] = admin return context
def test_it_dont_inform_moderators(self): site = karltesting.DummyModel() site['fred'] = profile = karltesting.DummyProfile() site.users = karltesting.DummyUsers() site.users.add('fred', 'fred', 'password', set( ('group.community:Test1:members', 'group.community:Test2:moderators', 'group.SomeGroup'))) self._call_fut(profile, False) 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)
def setUp(self): testing.cleanUp() from karl.models.contentfeeds import SiteEvents self.root = root = karltesting.DummyModel() root['profiles'] = karltesting.DummyModel() root.users = karltesting.DummyUsers() root['a'] = karltesting.DummyModel(creator='chris') root['b'] = karltesting.DummyModel(modified_by='chris') root.events = events = SiteEvents() events.push(userid='chris', profile_url='/profiles/chris', name='Chris R', anumber=123) class DummySearchAdapter(object): def __init__(self, context): pass def __call__(self, **kw): resolver = lambda x: root.get(x) if kw.get('creator') == 'chris': return 1, ['a'], resolver if kw.get('modified_by') == 'chris': return 1, ['b'], resolver return 0, [], resolver from zope.interface import Interface from karl.models.interfaces import ICatalogSearch karltesting.registerAdapter(DummySearchAdapter, (Interface, Interface), ICatalogSearch) karltesting.registerAdapter(DummySearchAdapter, (Interface,), ICatalogSearch) root.catalog = catalog = karltesting.DummyModel() catalog['creator'] = DummyCatalogIndex() catalog['modified_by'] = DummyCatalogIndex()
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)