def setUp(self): from zope.interface import directlyProvides from karl.content.interfaces import ICommunityFile config = cleanUp() config.setup_registry() # this is not a unit test karltesting.registerSettings() # Create dummy site skel community = karltesting.DummyCommunity() site = community.__parent__.__parent__ profiles = testing.DummyModel() site["profiles"] = profiles self.profile = profiles["member"] = karltesting.DummyProfile() profiles["creator"] = karltesting.DummyProfile() community["files"] = testing.DummyModel() f = testing.DummyModel(text="This is a test", description="Some description") community["files"]["file"] = f f.title = "An interesting file" f.docid = 0 directlyProvides(f, ICommunityFile) self.f = f f.creator = "creator"
def test_it(self): from zope.interface import Interface from zope.interface import directlyProvides from karl.models.interfaces import ICatalogSearch from karl.models.interfaces import ICommunity context = testing.DummyModel() directlyProvides(context, ICommunity) context.member_names = set('a',) context.moderator_names = set() request = testing.DummyRequest(params={'val': 'a'}) profile_1 = karltesting.DummyProfile(__name__='a', security_state='active') profile_2 = karltesting.DummyProfile(__name__='b', security_state='active') profile_3 = karltesting.DummyProfile(__name__='c', security_state='active') profile_4 = karltesting.DummyProfile(__name__='d', security_state='inactive') def resolver(docid): d = {1: profile_1, 2: profile_2, 3: profile_3, 4: profile_4} return d.get(docid) def dummy_catalog_search(context): def search(**kw): return 3, [1, 2, 3], resolver return search karltesting.registerAdapter( dummy_catalog_search, (Interface), ICatalogSearch) data = self._callFUT(context, request) self.assertEqual(data, [{"text": "title", "id": "b"}, {"text": "title", "id": "c"}])
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 setUp(self): from zope.interface import directlyProvides from karl.content.interfaces import IBlogEntry config = cleanUp() config.setup_registry() # this is not a unit test karltesting.registerSettings() # Create dummy site skel self.community = community = karltesting.DummyCommunity() site = community.__parent__.__parent__ profiles = testing.DummyModel() site["profiles"] = profiles self.profile = profiles["member"] = karltesting.DummyProfile() profiles["creator"] = karltesting.DummyProfile() community["blog"] = testing.DummyModel() blogentry = testing.DummyModel(text="This is a test") community["blog"]["blogentry"] = blogentry blogentry["attachments"] = testing.DummyModel() blogentry.title = "Blog Entry" blogentry.docid = 0 directlyProvides(blogentry, IBlogEntry) self.blogentry = blogentry blogentry.creator = "creator"
def setUp(self): import datetime from zope.interface import directlyProvides from karl.content.interfaces import IBlogEntry cleanUp() karltesting.registerSettings() # Create dummy site skel community = karltesting.DummyCommunity() site = community.__parent__.__parent__ profiles = testing.DummyModel() site["profiles"] = profiles self.profile = profiles["member"] = karltesting.DummyProfile() profiles["creator"] = karltesting.DummyProfile() community["blog"] = testing.DummyModel() blogentry = testing.DummyModel(text="This is a test") blogentry.created = datetime.datetime(2010, 5, 12, 2, 42) blogentry.creator = 'member' community["blog"]["blogentry"] = blogentry blogentry["attachments"] = testing.DummyModel() blogentry.title = "Blog Entry" blogentry.docid = 0 directlyProvides(blogentry, IBlogEntry) self.blogentry = blogentry blogentry["comments"] = testing.DummyModel() self.comment = self._add_comment(blogentry)
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_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() 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_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_already_in_community(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() profile.__name__ = 'a' 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', } response = controller.handle_submit(converted) self.assertEqual( response.location, 'http://example.com/manage.html?status_message=One+user+already+member.' ) self.failIf('A' * 6 in context) self.assertEqual(context.users.added_groups, [])
def test_merge_old_user_does_not_exist(self): profiles = self.root['profiles'] profiles['chris'] = karltesting.DummyProfile(title='Chris R') profiles['rodrigo'] = karltesting.DummyProfile(title='Rodrigo R') self.call_fut('chris', 'rodrigo', True, DummyOutputStream()) self.failIf('chris' in profiles) self.failUnless('rodrigo' in profiles) catalog = self.root.catalog self.assertEqual(catalog['creator'].reindexed, [('a', 'a')]) self.assertEqual(catalog['modified_by'].reindexed, [('b', 'b')]) event = list(self.root.events)[0][2] self.assertEqual(event['userid'], 'rodrigo') self.assertEqual(event['profile_url'], '/profiles/rodrigo') self.assertEqual(event['name'], 'Rodrigo R')
def test_merge_user(self): users = self.root.users profiles = self.root['profiles'] users.add('chris', 'chris', 'password', set(('group1', 'group2'))) profiles['chris'] = karltesting.DummyProfile() users.add('rodrigo', 'rodrigo', 'password', set(('group3',))) profiles['rodrigo'] = karltesting.DummyProfile() self.call_fut('chris', 'rodrigo', True, DummyOutputStream()) self.failIf('chris' in profiles) self.failUnless('rodrigo' in profiles) self.assertEqual(users.removed_users, ['chris']) self.assertEqual(users.added_groups, [('rodrigo', 'group1'), ('rodrigo', 'group2')]) catalog = self.root.catalog self.assertEqual(catalog['creator'].reindexed, [('a', 'a')]) self.assertEqual(catalog['modified_by'].reindexed, [('b', 'b')])
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() request.view_name = 'list_view.html' request.layout_manager = mock.Mock() response = self._callFUT(context, request) actions = [('Manage Members', 'manage.html'), ('Add Existing', 'add_existing.html'), ('Invite New', 'invite_new.html')] self.assertEqual(response['actions'], actions) self.assertEqual(len(response['members']), 2) self.assertEqual(len(response['moderators']), 1) self.assertEqual(response['hide_pictures'], True) self.assertEqual(len(response['submenu']), 2) self.assertEqual(response['submenu'][0]['make_link'], True) self.assertEqual(response['submenu'][1]['make_link'], False) self.assertEqual(searchkw['sort_index'], 'lastfirst')
def test_handle_submit_username_exists(self): from pyramid_formish import ValidationError context = self._makeContext() request = self._makeRequest() profiles = testing.DummyModel() profiles['a'] = karltesting.DummyProfile() context['profiles'] = profiles controller = self._makeOne(context, request) converted = {'password': '******', 'password_confirm': '1', 'username': '******'} self.assertRaises(ValidationError, controller.handle_submit, converted)
def test_show_form(self): c = karltesting.DummyCommunity() site = c.__parent__.__parent__ profiles = site["profiles"] = testing.DummyModel() profiles["user"] = karltesting.DummyProfile() karltesting.registerDummySecurityPolicy("user") request = testing.DummyRequest() response = self._callFUT(c, request) self.assertEqual(response['profile'], profiles["user"]) self.assertEqual(response['community'], c) self.assertEqual(response['post_url'], "http://example.com/communities/community/join.html")
def test_rename_old_user_does_not_exist(self): users = self.root.users profiles = self.root['profiles'] profiles['chris'] = karltesting.DummyProfile() self.call_fut('chris', 'rodrigo', out=DummyOutputStream()) self.failIf('chris' in profiles) self.failUnless('rodrigo' in profiles) self.assertEqual(users.get_by_id('rodrigo'), None) catalog = self.root.catalog self.assertEqual(catalog['creator'].reindexed, [('a', 'a')]) self.assertEqual(catalog['modified_by'].reindexed, [('b', 'b')])
def setUp(self): from zope.interface import directlyProvides from karl.content.interfaces import ICalendarEvent config = cleanUp() config.setup_registry() # this is not a unit test karltesting.registerSettings() karltesting.registerKarlDates() # Create dummy site skel community = karltesting.DummyCommunity() site = community.__parent__.__parent__ profiles = testing.DummyModel() site["profiles"] = profiles self.profile = profiles["member"] = karltesting.DummyProfile() profiles["creator"] = karltesting.DummyProfile() community["calendar"] = testing.DummyModel() event = testing.DummyModel( text="This is a test", description="Some description", startDate=datetime(2009, 8, 5, 10, 0), endDate=datetime(2009, 8, 5, 11, 0), attendees=['alice', 'bob'], location='NYC', contact_name='Alice W', contact_email='*****@*****.**', ) community["calendar"]["event"] = event event.title = "An Exciting Event!" event.docid = 0 directlyProvides(event, ICalendarEvent) self.event = event event.creator = "creator"
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 test_rename_user(self): users = self.root.users profiles = self.root['profiles'] users.add('chris', 'chris', 'password', set(('group1', 'group2'))) profiles['chris'] = karltesting.DummyProfile() self.call_fut('chris', 'rodrigo') self.failIf('chris' in profiles) self.failUnless('rodrigo' in profiles) self.assertEqual(users.removed_users, ['chris']) self.assertEqual(users.get_by_id('rodrigo'), {'id': 'rodrigo', 'login': '******', 'password': '******', 'groups': set(('group1', 'group2'))}) catalog = self.root.catalog self.assertEqual(catalog['creator'].reindexed, [('a', 'a')]) self.assertEqual(catalog['modified_by'].reindexed, [('b', 'b')])
def test_new_profile_already_exists(self): self.root.users.add('chris', 'chris', 'password', set()) self.root['profiles']['chris'] = karltesting.DummyProfile() self.root['profiles']['rodrigo'] = karltesting.DummyProfile() self.assertRaises(ValueError, self.call_fut, 'chris', 'rodrigo')
def test_merge_new_profile_does_not_exist(self): self.root.users.add('chris', 'chris', 'password', set()) self.root['profiles']['chris'] = karltesting.DummyProfile() self.root.users.add('rodrigo', 'rodrigo', 'password', set()) self.assertRaises(ValueError, self.call_fut, 'chris', 'rodrigo', merge=True)