def test_weekly_digests(self): from repoze.sendmail.interfaces import IMailDelivery from pyramid.interfaces import IRequest from karl.models.interfaces import IProfile from karl.testing import DummyMailer mailer = DummyMailer() self.config.registry.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_DAILY_DIGEST) profiles["b"] = DummyProfile() profiles["b"].set_alerts_preference(community.__name__, IProfile.ALERT_WEEKLY_DIGEST) profiles["c"] = DummyProfile() profiles["c"].set_alerts_preference(community.__name__, IProfile.ALERT_BIWEEKLY_DIGEST) community.member_names = set(("a", "b", "c")) community.moderator_names = set() request = testing.DummyRequest() self.config.registry.registerAdapter(DummyEmailAlertAdapter, (IDummy, IProfile, IRequest), IAlert) tool = self._get_instance() tool.emit(context, request) tool.emit(context, request) self.assertEqual(0, len(mailer)) self.assertEqual(2, len(list(profiles["a"]._pending_alerts))) self.assertEqual(2, len(list(profiles["b"]._pending_alerts))) self.assertEqual(2, len(list(profiles["c"]._pending_alerts))) self.config.testing_add_renderer('karl.utilities:email_digest.pt') tool.send_digests(site, "weekly") self.assertEqual(0, len(list(profiles["a"]._pending_alerts))) self.assertEqual(0, len(list(profiles["b"]._pending_alerts))) self.assertEqual(2, len(list(profiles["c"]._pending_alerts))) self.assertEqual(2, len(mailer)) self.assertEqual(0, len(list(list(profiles["a"]._pending_alerts)))) self.assertEqual(0, len(list(list(profiles["b"]._pending_alerts)))) mtos = [x.mto for x in mailer] self.assertTrue([ '*****@*****.**', ] in mtos) self.assertTrue([ '*****@*****.**', ] in mtos)
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_emit(self): from repoze.sendmail.interfaces import IMailDelivery from pyramid.interfaces import IRequest from karl.models.interfaces import IProfile from karl.testing import DummyMailer mailer = DummyMailer() self.config.registry.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["b"] = DummyProfile() profiles["c"] = DummyProfile() community.member_names = set(( "a", "c", )) community.moderator_names = set(("b", )) request = testing.DummyRequest() self.config.registry.registerAdapter(DummyEmailAlertAdapter, (IDummy, IProfile, IRequest), IAlert) self._get_instance().emit(context, request) self.assertEqual(3, len(mailer))
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_noconfirm(self): context = DummyProfile(firstname='Mori', lastname='Turi') context.title = 'Context' request = testing.DummyRequest() renderer = testing.registerDummyRenderer( 'templates/delete_profile.pt') response = self._callFUT(context, request) self.assertEqual(response.status, '200 OK')
def setUp(self): cleanUp() sessions = DummySessions() context = DummyProfile(sessions=sessions) context.title = 'title' self.context = context request = testing.DummyRequest() request.environ['repoze.browserid'] = '1' self.request = request
def setUp(self): cleanUp() # Register mail utility from repoze.sendmail.interfaces import IMailDelivery from karl.testing import DummyMailer self.mailer = DummyMailer() karl.testing.registerUtility(self.mailer, IMailDelivery) # Register BlogCommentAlert adapter from karl.models.interfaces import IProfile from karl.models.interfaces import IComment from karl.content.views.adapters import BlogCommentAlert from karl.utilities.interfaces import IAlert from pyramid.interfaces import IRequest karl.testing.registerAdapter(BlogCommentAlert, (IComment, IProfile, IRequest), IAlert) # Register IShowSendAlert adapter self.show_sendalert = True from karl.content.views.interfaces import IShowSendalert class DummyShowSendalert(object): def __init__(myself, context, request): myself.show_sendalert = self.show_sendalert karl.testing.registerAdapter(DummyShowSendalert, (Interface, Interface), IShowSendalert) # Create dummy site skel from karl.testing import DummyCommunity from karl.testing import DummyProfile community = DummyCommunity() site = community.__parent__.__parent__ site.sessions = DummySessions() profiles = testing.DummyModel() site["profiles"] = profiles profiles["a"] = DummyProfile() profiles["b"] = DummyProfile() profiles["c"] = DummyProfile() community.member_names = set([ "b", "c", ]) community.moderator_names = set([ "a", ]) blog = testing.DummyModel() community["blog"] = blog blogentry = blog["foo"] = DummyBlogEntry() self.context = blogentry["comments"] # Create dummy request request = testing.DummyRequest() request.environ['repoze.browserid'] = '1' self.request = request
def setUp(self): cleanUp() self.sessions = sessions = DummySessions() context = DummyProfile(sessions=sessions) context.title = 'title' self.context = context request = testing.DummyRequest() request.environ['repoze.browserid'] = '1' self.request = request # this initializes the available groups karltesting.registerSettings()
def test_without_content(self): context = DummyProfile() context.title = 'Z' request = testing.DummyRequest() renderer = testing.registerDummyRenderer( 'templates/profile_recent_content.pt') from karl.testing import registerCatalogSearch registerCatalogSearch() self._callFUT(context, request) self.assert_(renderer.api is not None) self.assertEquals(len(renderer.recent_items), 0) self.assertFalse(renderer.batch_info['batching_required'])
def _mk_context(self): import datetime from karl.testing import DummyCommunity from karl.testing import DummyModel from karl.testing import DummyProfile from karl.testing import DummyRoot from karl.testing import registerCatalogSearch site = DummyRoot() site.users = DummyUsers() site.tags = DummyTags() profiles = site['profiles'] = DummyModel() chet = profiles['chet'] = DummyProfile( firstname='Chet', lastname='Baker', created=datetime.datetime(2010, 5, 12, 2, 43), location='bathroom', department='Crooning', ) chuck = profiles['chuck'] = DummyProfile( firstname='Chuck', lastname='Mangione', created=datetime.datetime(2010, 5, 12, 2, 42), location='kitchen', department='Blowing', ) chuck = profiles['admin'] = DummyProfile( firstname='System', lastname='User', created=datetime.datetime(2010, 5, 12, 2, 42), location='The Machine', department='Big Brother', ) communities = site['communities'] = DummyModel() dandies = communities['dandies'] = DummyModel() dandies.member_names = ['chet', 'chuck'] dandies.moderator_names = ['chuck'] loners = communities['loners'] = DummyModel() loners.member_names = ['chet'] loners.moderator_names = ['chet'] lads = communities['lads'] = DummyModel() lads.member_names = ['chet', 'chip', 'charlie'] lads.moderator_names = ['chet', 'chip'] return site
def test_not_editable(self): self._registerTagbox() self._registerCatalogSearch() from karl.testing import DummyUsers testing.registerDummySecurityPolicy('userid') renderer = testing.registerDummyRenderer('templates/profile.pt') request = testing.DummyRequest() context = DummyProfile() context.__name__ = 'chris' context.users = DummyUsers() context.users.add("userid", "userlogin", "password", []) context.users.add("chris", "chrislogin", "password", []) self._callFUT(context, request) self.assertEqual(len(renderer.actions), 1) self.assertEqual(renderer.actions[0][1], 'admin_edit_profile.html')
def test_comment_ordering(self): context = DummyBlogEntry() context.sessions = DummySessions() 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() request.environ['repoze.browserid'] = 1 def dummy_byline_info(context, request): return context from zope.interface import Interface from karl.content.views.interfaces import IBylineInfo karl.testing.registerAdapter(dummy_byline_info, (Interface, Interface), IBylineInfo) self._register() from karl.utilities.interfaces import IKarlDates karl.testing.registerUtility(dummy, IKarlDates) response = self._callFUT(context, request) self.assertEqual(len(response['comments']), 2) self.assertEqual('before', response['comments'][0]['text']) self.assertEqual('sometext', response['comments'][1]['text'])
def test_no_security_policy(self): context = DummyBlogEntry() context.sessions = DummySessions() 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() request.environ['repoze.browserid'] = 1 def dummy_byline_info(context, request): return context from zope.interface import Interface from karl.content.views.interfaces import IBylineInfo karl.testing.registerAdapter(dummy_byline_info, (Interface, Interface), IBylineInfo) self._register() from karl.utilities.interfaces import IKarlDates karl.testing.registerUtility(dummy, IKarlDates) response = self._callFUT(context, request) self.assertEqual(len(response['comments']), 1) c0 = response['comments'][0] self.assertEqual(c0['text'], 'sometext') self.assertEqual(d1, response['comments'][0]['date']) self.assertEqual(c0['author_name'], 'Dummy Profile') self.assertEqual(response['comments'][0]['edit_url'], 'http://example.com/blogentry/comments/1/edit.html')
def test_with_security_policy(self): self._register() registerLayoutProvider() import datetime _NOW = datetime.datetime.now() context = testing.DummyModel(title='title') context.sessions = DummySessions() from karl.content.interfaces import IForum alsoProvides(context, IForum) context['profiles'] = profiles = testing.DummyModel() profiles['dummy'] = DummyProfile() context['comments'] = testing.DummyModel() comment = testing.DummyModel(text='sometext') comment.creator = 'dummy' comment.created = _NOW context['comments']['1'] = comment context['attachments'] = testing.DummyModel() request = testing.DummyRequest() request.environ['repoze.browserid'] = 1 def dummy_byline_info(context, request): return context from karl.content.views.interfaces import IBylineInfo karl.testing.registerAdapter(dummy_byline_info, (Interface, Interface), IBylineInfo) self._register() karl.testing.registerDummySecurityPolicy(permissive=False) renderer = karl.testing.registerDummyRenderer( 'templates/show_forum_topic.pt') self._callFUT(context, request) self.assertEqual(renderer.comments[0]['edit_url'], None)
def test_user_home_path_w_subpath(self): from zope.interface import Interface from zope.interface import directlyProvides from pyramid.interfaces import ITraverserFactory from karl.testing import DummyCommunity from karl.testing import DummyProfile karl.testing.registerDummySecurityPolicy("userid") c = DummyCommunity() site = c.__parent__.__parent__ directlyProvides(site, Interface) c["foo"] = foo = testing.DummyModel() site["profiles"] = profiles = testing.DummyModel() profiles["userid"] = profile = DummyProfile() profile.home_path = "/communities/community/foo/bar/baz" karl.testing.registerAdapter(dummy_traverser_factory, Interface, ITraverserFactory) from karl.views.utils import get_user_home request = testing.DummyRequest() # Test from site root target, extra_path = get_user_home(site, request) self.failUnless(foo is target) self.assertEqual(['bar', 'baz'], extra_path) # Test from arbitrary point in tree target, extra_path = get_user_home(c, request) self.failUnless(foo is target) self.assertEqual(['bar', 'baz'], extra_path)
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 karl.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 karl.testing.registerAdapter(GenericAtomEntry, (IBlogEntry, Interface), IAtomEntry) karl.testing.registerDummyRenderer('karl.views:templates/atomfeed.pt')
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 karl.testing.registerAdapter(dummy_catalog_search, Interface, ICatalogSearch) # Register atom entry adapter from karl.views.interfaces import IAtomEntry from karl.content.views.atom import CommunityFileAtomEntry karl.testing.registerAdapter(CommunityFileAtomEntry, (Interface, Interface), IAtomEntry) karl.testing.registerDummyRenderer('karl.views:templates/atomfeed.pt')
def test_new_password_mismatch(self): from karl.testing import DummyUsers context = DummyProfile() context.__name__ = 'me' context.users = DummyUsers() context.users.add('me', 'me', self._old_password(), []) request = testing.DummyRequest({ 'form.submitted': 1, 'old_password': '******', 'password': '******', 'password_confirm': 'winwinwin', }) renderer = testing.registerDummyRenderer('templates/change_password.pt') self._callFUT(context, request) self.failUnless(renderer.fielderrors)
def setUp(self): # Register mail utility from repoze.sendmail.interfaces import IMailDelivery from karl.testing import DummyMailer self.mailer = DummyMailer() from pyramid.threadlocal import manager from pyramid.registry import Registry manager.stack[0]['registry'] = Registry('testing') karl.testing.registerUtility(self.mailer, IMailDelivery) # Register BlogEntryAlert adapter from karl.models.interfaces import IProfile from karl.content.interfaces import IBlogEntry from karl.content.views.adapters import BlogEntryAlert from karl.utilities.interfaces import IAlert from pyramid.interfaces import IRequest karl.testing.registerAdapter(BlogEntryAlert, (IBlogEntry, IProfile, IRequest), IAlert) karl.testing.registerDummySecurityPolicy("a") # Create dummy site skel from karl.testing import DummyCommunity self.community = DummyCommunity() self.site = self.community.__parent__.__parent__ self.profiles = testing.DummyModel() self.site["profiles"] = self.profiles from karl.testing import DummyProfile self.profiles["a"] = DummyProfile() self.profiles["b"] = DummyProfile() self.profiles["c"] = DummyProfile() for profile in self.profiles.values(): profile["alerts"] = testing.DummyModel() self.community.member_names = set([ "b", "c", ]) self.community.moderator_names = set([ "a", ]) self.blog = self._makeContext() self.community["blog"] = self.blog
def test_tags_capped_at_ten(self): from karl.testing import DummyUsers self._registerTagbox() self._registerCatalogSearch() testing.registerDummySecurityPolicy('eddie') TAGS = {'alpha': 1, 'bravo': 2, 'charlie': 3, 'delta': 4, 'echo': 5, 'foxtrot': 6, 'golf': 7, 'hotel': 8, 'india': 9, 'juliet': 10, 'kilo': 11, } 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), 10) self.failUnless(renderer.tags[0], {'name': 'kilo', 'count': 11}) self.failUnless(renderer.tags[1], {'name': 'juliet', 'count': 10}) self.failUnless(renderer.tags[9], {'name': 'bravo', 'count': 2})
def test_respect_alert_prefs(self): from repoze.sendmail.interfaces import IMailDelivery from pyramid.interfaces import IRequest from karl.models.interfaces import IProfile from karl.testing import DummyMailer mailer = DummyMailer() self.config.registry.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["b"] = DummyProfile() profiles["b"].set_alerts_preference(community.__name__, IProfile.ALERT_DAILY_DIGEST) profiles["c"] = DummyProfile() profiles["c"].set_alerts_preference(community.__name__, IProfile.ALERT_NEVER) profiles["d"] = DummyProfile() profiles["d"].set_alerts_preference(community.__name__, IProfile.ALERT_WEEKLY_DIGEST) profiles["e"] = DummyProfile() profiles["e"].set_alerts_preference(community.__name__, IProfile.ALERT_BIWEEKLY_DIGEST) community.member_names = set(( "a", "c", )) community.moderator_names = set(("b", )) request = testing.DummyRequest() self.config.registry.registerAdapter(DummyEmailAlertAdapter, (IDummy, IProfile, IRequest), IAlert) self._get_instance().emit(context, request) self.assertEqual(1, len(mailer)) self.assertEqual(1, len(list(profiles["b"]._pending_alerts)))
def test_success(self): from karl.testing import DummyUsers context = DummyProfile() context.__name__ = 'me' parent = testing.DummyModel() parent.__name__ = '' parent.__parent__ = None context.__parent__ = parent context.title = 'Me' context.email = '*****@*****.**' parent.users = DummyUsers() parent.users.add('me', 'me', self._old_password(), []) request = testing.DummyRequest({ 'form.submitted': 1, 'old_password': '******', 'password': '******', 'password_confirm': 'newnewnew', }) renderer = testing.registerDummyRenderer( 'templates/change_password.pt') from repoze.sendmail.interfaces import IMailDelivery from karl.testing import DummyMailer mailer = DummyMailer() testing.registerUtility(mailer, IMailDelivery) response = self._callFUT(context, request) from repoze.who.plugins.zodb.users import get_sha_password new_enc = get_sha_password('newnewnew') self.assertEqual(parent.users.get_by_id('me')['password'], new_enc) self.assertEqual(response.location, 'http://example.com/me/?status_message=Password%20changed') self.assertEqual(len(mailer), 1) msg = mailer.pop() self.assertEqual(msg.mto, ['*****@*****.**']) self.assertEqual(msg.mfrom, "*****@*****.**")
def test_it_two_comments(self): from karl.models.interfaces import ICommunity from karl.models.interfaces import ISite from zope.interface import directlyProvides from karl.testing import DummyProfile from repoze.workflow.testing import registerDummyWorkflow site = testing.DummyModel() site['test'] = context = testing.DummyModel() directlyProvides(context, ICommunity, ISite) registerDummyWorkflow('security') context.catalog = {'creation_date': DummyCreationDateIndex()} context['profiles'] = profiles = testing.DummyModel() profiles['dummy'] = DummyProfile(title='Dummy Creator') from webob.multidict import MultiDict request = testing.DummyRequest(params=MultiDict({ 'year': 2009, 'month': 4 })) request.layout_manager = mock.Mock() from karl.utilities.interfaces import IKarlDates karl.testing.registerUtility(dummy, IKarlDates) from datetime import datetime entry = testing.DummyModel(creator='dummy', title='Dummy Entry', description='Some words', created=datetime(2009, 4, 15)) from zope.interface import directlyProvides from karl.content.interfaces import IBlogEntry directlyProvides(entry, IBlogEntry) entry['comments'] = testing.DummyModel() entry['comments']['1'] = DummyComment() entry['comments']['2'] = DummyComment() context['e1'] = entry def dummy_byline_info(context, request): return context from zope.interface import Interface from karl.content.views.interfaces import IBylineInfo karl.testing.registerAdapter(dummy_byline_info, (Interface, Interface), IBylineInfo) response = self._callFUT(context, request) self.assertEqual(len(response['entries']), 1) self.assertEqual(response['entries'][0]['title'], 'Dummy Entry') self.assertEqual(response['entries'][0]['creator_href'], 'http://example.com/test/e1/') self.assertEqual(response['entries'][0]['href'], 'http://example.com/test/e1/') self.assertEqual(response['entries'][0]['creator_title'], 'Dummy Creator')
def test_from_profile(self): from karl.views.utils import get_user_date_format from karl.testing import DummyUsers from karl.testing import DummyProfile karl.testing.registerDummySecurityPolicy("userid") context = testing.DummyModel() profiles = context["profiles"] = testing.DummyModel() profile = profiles["userid"] = DummyProfile() profiles["userid"].date_format = 'en-CA' users = context.users = DummyUsers() users.add("userid", "userid", "password", []) request = testing.DummyRequest() date_format = get_user_date_format(context, request) self.assertEqual(date_format, 'en-CA')
def test_comment_ordering(self): self._register() registerLayoutProvider() import datetime _NOW = datetime.datetime.now() _BEFORE = _NOW - datetime.timedelta(hours=1) context = testing.DummyModel() context.sessions = DummySessions() context.title = 'title' context['comments'] = testing.DummyModel() comment = testing.DummyModel() comment.creator = 'dummy' comment.created = _NOW comment.text = 'My dog has fleas.' context['comments']['1'] = comment comment2 = testing.DummyModel() comment2.creator = 'dummy' comment2.created = _BEFORE comment2.text = "My cat's breath smells like cat food." context['comments']['2'] = comment2 context['attachments'] = testing.DummyModel() from karl.models.interfaces import ISite from karl.content.interfaces import IForum directlyProvides(context, ISite) alsoProvides(context, IForum) context['profiles'] = profiles = testing.DummyModel() profiles['dummy'] = DummyProfile(title='Dummy Profile') request = testing.DummyRequest() request.layout_manager = mock.Mock() request.layout_manager.layout.head_data = dict(panel_data={}) request.environ['repoze.browserid'] = 1 def dummy_byline_info(context, request): return context from karl.content.views.interfaces import IBylineInfo karl.testing.registerAdapter(dummy_byline_info, (Interface, Interface), IBylineInfo) renderer = karl.testing.registerDummyRenderer( 'templates/show_forum_topic.pt') self._callFUT(context, request) self.assertEqual(len(renderer.comments), 2) self.assertEqual(renderer.comments[0]['text'], "My cat's breath smells like cat food.") self.assertEqual(renderer.comments[1]['text'], 'My dog has fleas.')
def test_show_recently_added(self): self._registerTagbox() 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) from karl.testing import DummyUsers testing.registerDummySecurityPolicy('userid') renderer = testing.registerDummyRenderer('templates/profile.pt') request = testing.DummyRequest() context = DummyProfile() context.__name__ = 'chris' context.users = DummyUsers() context.users.add("userid", "userid", "password", []) context.users.add("chris", "chris", "password", []) self._callFUT(context, request) self.assertEqual(search_args['limit'], 5) self.assertEqual(search_args['creator'], 'chris') self.assertEqual(search_args['sort_index'], 'creation_date') self.assertEqual(search_args['reverse'], True) self.assertEqual(len(renderer.recent_items), 2) self.assertEqual(renderer.recent_items[0].context.title, 'doc1') self.assertEqual(renderer.recent_items[1].context.title, 'doc2')
def test_no_communities(self): from karl.views.utils import get_user_home from karl.testing import DummyUsers from karl.testing import DummyProfile karl.testing.registerDummySecurityPolicy("userid") context = testing.DummyModel() communities = context["communities"] = testing.DummyModel() profiles = context["profiles"] = testing.DummyModel() profile = profiles["userid"] = DummyProfile() users = context.users = DummyUsers() users.add("userid", "userid", "password", []) request = testing.DummyRequest() target, extra_path = get_user_home(context, request) self.failUnless(target is communities) self.assertEqual(extra_path, [])
def test_no_security_policy(self): self._register() registerLayoutProvider() import datetime _NOW = datetime.datetime.now() context = testing.DummyModel() context.sessions = DummySessions() context.title = 'title' context['comments'] = testing.DummyModel() comment = testing.DummyModel() comment.creator = 'dummy' comment.created = _NOW comment.text = 'sometext' context['comments']['1'] = comment context['attachments'] = testing.DummyModel() from karl.models.interfaces import ISite from karl.content.interfaces import IForum directlyProvides(context, ISite) alsoProvides(context, IForum) context['profiles'] = profiles = testing.DummyModel() profiles['dummy'] = DummyProfile(title='Dummy Profile') request = testing.DummyRequest() request.layout_manager = mock.Mock() request.layout_manager.layout.head_data = dict(panel_data={}) request.environ['repoze.browserid'] = 1 def dummy_byline_info(context, request): return context from karl.content.views.interfaces import IBylineInfo karl.testing.registerAdapter(dummy_byline_info, (Interface, Interface), IBylineInfo) renderer = karl.testing.registerDummyRenderer( 'templates/show_forum_topic.pt') self._callFUT(context, request) self.assertEqual(len(renderer.comments), 1) c0 = renderer.comments[0] self.assertEqual(c0['text'], 'sometext') self.assertEqual(renderer.comments[0]['date'], 'Wednesday, January 28, 2009 08:32 AM') self.assertEqual(c0['author_name'], 'Dummy Profile') self.assertEqual(renderer.comments[0]['edit_url'], 'http://example.com/comments/1/edit.html')
def test_user_home_path(self): from zope.interface.interfaces import IInterface from zope.interface import directlyProvides from pyramid.interfaces import ITraverserFactory from karl.testing import DummyCommunity from karl.testing import DummyProfile karl.testing.registerDummySecurityPolicy("userid") c = DummyCommunity() site = c.__parent__.__parent__ directlyProvides(site, IInterface) c["foo"] = foo = testing.DummyModel() site["profiles"] = profiles = testing.DummyModel() profiles["userid"] = profile = DummyProfile() profile.home_path = "/communities/community/foo" karl.testing.registerAdapter(dummy_traverser_factory(foo), IInterface, ITraverserFactory) request = testing.DummyRequest() response = self._callFUT(site, request) self.assertEqual(response.location, "http://example.com/communities/community/foo/")
def test_space_as_home_path(self): from zope.interface import Interface from pyramid.interfaces import ITraverserFactory from karl.views.utils import get_user_home from karl.testing import DummyUsers from karl.testing import DummyProfile karl.testing.registerDummySecurityPolicy("userid") context = testing.DummyModel() communities = context["communities"] = testing.DummyModel() community = communities["community"] = testing.DummyModel() profiles = context["profiles"] = testing.DummyModel() profile = profiles["userid"] = DummyProfile() profile.home_path = ' ' karl.testing.registerAdapter(dummy_traverser_factory, Interface, ITraverserFactory) users = context.users = DummyUsers() users.add("userid", "userid", "password", [ "group.community:community:members", ]) request = testing.DummyRequest() target, extra_path = get_user_home(context, request) self.failUnless(target is community) self.assertEqual(extra_path, [])
def __init__(self): from karl.testing import DummyProfile testing.DummyModel.__init__(self) self['profiles'] = testing.DummyModel() self['profiles'][u'dummy'] = DummyProfile()
def resolve(self, docid): from karl.testing import DummyProfile res = DummyProfile(__name__=docid.split('@')[0], email=docid) self.profile = res self.context[res.__name__] = res return res