def test_process_message_report(self): from zope.interface import directlyProvides from pyramid.testing import DummyModel from karl.models.interfaces import IPeopleDirectory INFO = {'targets': [{'report': 'section+testing', 'community': None, 'tool': None,}], 'author': 'phreddy', 'subject': 'Feedback' } text = 'This entry stinks!' attachments = [('foo.txt', 'text/plain', 'My attachment')] message = DummyMessage(INFO, text, attachments) self._set_up_queue([message,]) mailin = self._makeOne() pd = mailin.root['people'] = DummyModel() directlyProvides(pd, IPeopleDirectory) section = pd['section'] = DummyModel() testing = section['testing'] = DummyModel() mailin() self.assertEqual(len(self.handlers), 1) handler = self.handlers[0] self.failUnless(handler.context is testing) self.assertEqual(handler.handle_args, (message, INFO, text, attachments)) self.assertEqual(len(self.mailer), 0)
def test_one_message_reply_no_attachments(self): from pyramid.testing import DummyModel info = {'targets': [{'report': None, 'community': 'testing', 'tool': 'random', 'in_reply_to': '7FFFFFFF', # token for docid 0 }], 'author': 'phreddy', 'subject': 'Feedback' } text = 'This entry stinks!' attachments = () message = DummyMessage(info, text, attachments) self._set_up_queue([message,]) mailin = self._makeOne() catalog = mailin.root.catalog = DummyCatalog() cf = mailin.root['communities'] = DummyModel() testing = cf['testing'] = DummyModel() tool = testing['random'] = DummyModel() entry = tool['entry'] = DummyModel() entry['comments'] = DummyModel() catalog.document_map._map[0] = '/communities/testing/random/entry' self.config.testing_resources( {'/communities/testing/random/entry': entry}) mailin() self.assertEqual(len(self.handlers), 1) handler = self.handlers[0] self.assertEqual(handler.context, entry) self.assertEqual(handler.handle_args, (message, info, text, attachments)) self.assertEqual(len(self.mailer), 0)
def test_quarantine_message(self): from pyramid.testing import DummyModel info = {'targets': [{'community': 'testing', 'tool': 'random', 'in_reply_to': '7FFFFFFF', # token for docid 0 'author': 'phreddy', }], 'subject': 'Feedback', 'exception': 'Not witty enough', } text = 'This entry stinks!' attachments = () message = DummyMessage(info, text, attachments) self._set_up_queue([message,]) mailin = self._makeOne() catalog = mailin.root.catalog = DummyCatalog() cf = mailin.root['communities'] = DummyModel() testing = cf['testing'] = DummyModel() tool = testing['random'] = DummyModel() entry = tool['entry'] = DummyModel() entry['comments'] = DummyModel() catalog.document_map._map[0] = '/communities/testing/random/entry' self.config.testing_resources( {'/communities/testing/random/entry': entry}) mailin() q_message, error = self.queue.quarantined[0] self.assertEqual(q_message, message) self.failUnless('Not witty enough' in error) self.assertEqual(len(self.mailer), 1)
def test_bounce_reply_to_non_existing(self): from pyramid.testing import DummyModel info = { 'targets': [{ 'report': None, 'community': 'testing', 'tool': 'random', 'in_reply_to': '7FFFFFFF', # token for docid 0 }], 'author': 'phreddy', 'subject': 'Feedback' } text = 'This entry stinks!' attachments = () message = DummyMessage(info, text, attachments) self._set_up_queue([ message, ]) mailin = self._makeOne() catalog = mailin.root.catalog = DummyCatalog() cf = mailin.root['communities'] = DummyModel() testing = cf['testing'] = DummyModel() tool = testing['random'] = DummyModel() mailin() self.assertEqual(self.queue.bounced, [(message, None, 'Content no longer exists.', None)]) self.assertEqual(len(self.mailer), 1)
def test___call___w_parent(self): from pyramid.testing import DummyModel from karl.testing import registerSettings registerSettings() parent = DummyModel() context = parent['foo'] = DummyModel() url = self._makeOne(context) self.assertEqual(url(), 'http://offline.example.com/app/foo')
def test_it(self): from datetime import datetime from datetime import timedelta from pyramid.testing import DummyModel request = testing.DummyRequest() site = testing.DummyModel() communities = site["communities"] = testing.DummyModel() community1 = communities["community1"] = testing.DummyModel() community1.title = "Test Community 1" community1.last_activity_date = datetime.now() community2 = communities["community2"] = testing.DummyModel() community2.title = "Test Community 2" community2.last_activity_date = datetime.now() - timedelta(2) community3 = communities["community3"] = testing.DummyModel() community3.title = "Test Community 3" community3.last_activity_date = datetime.now() - timedelta(1) request.context = context = site site["profiles"] = profiles = DummyModel() profiles["userid"] = DummyProfile() item1 = DummyModel() item1.__name__ = 'doc1' item1.title = 'Doc 1' item1.modified = datetime.now() item2 = DummyModel() item2.__name__ = 'doc2' item2.title = 'Doc 2' item2.modified = datetime.now() - timedelta(1) registerCatalogSearch(results={'modified_by=userid': [item1, item2]}) response = self._callFUT(context, request) data = response['data'] communities = data['panels'][0]['communities'] recent = data['panels'][1]['contexts'] self.assertEqual(data['profile_name'], 'firstname lastname') self.assertEqual(data['profile_url'], 'http://example.com/profiles/userid/') self.assertEqual(data['icon_url'], 'http://example.com/static/images/defaultUser.gif') self.assertEqual(data['logout_url'], 'http://example.com/logout.html') self.assertEqual(data['department'], '4a') self.assertEqual(data['position'], 'halfback') self.assertEqual(data['email'], '*****@*****.**') self.assertEqual(data['extension'], '911') self.assertEqual(data['phone'], '555-55555') self.assertEqual(len(communities), 3) self.assertEqual(len(recent), 2) self.assertEqual(communities[0]['title'], 'Test Community 1') self.assertEqual(communities[1]['title'], 'Test Community 3') self.assertEqual(communities[2]['title'], 'Test Community 2') self.assertEqual(recent[0]['title'], 'Doc 1') self.assertEqual(recent[1]['title'], 'Doc 2')
def _makeContext(self): from pyramid.testing import DummyModel from karl.testing import DummyCatalog parent = DummyModel(title='dummyparent', catalog=DummyCatalog()) context = DummyModel(title='dummytitle', description='dummydescription') parent['dummytitle'] = context return parent, context
def test___call___w_parent_chain(self): from pyramid.testing import DummyModel from karl.testing import registerSettings registerSettings() root = self._makeRoot() foo = root['foo'] = DummyModel() context = foo['bar'] = DummyModel() url = self._makeOne(context) self.assertEqual(url(), 'http://offline.example.com/app/foo/bar')
def test___call___app_url_trailing_slash(self): from pyramid.interfaces import ISettings from pyramid.testing import DummyModel from karl.testing import registerUtility settings = dict(offline_app_url = "http://offline.example.com/app/") registerUtility(settings, ISettings) parent = DummyModel() context = parent['foo'] = DummyModel() url = self._makeOne(context) self.assertEqual(url(), 'http://offline.example.com/app/foo')
def setUp(self): cleanUp() self.parent = DummyModel(title='dummyparent') self.context = DummyModel(title='dummytitle', text='dummytext') self.context['attachments'] = DummyModel() self.parent['child'] = self.context self.parent.catalog = DummyCatalog() self.parent["profiles"] = DummyModel() users = self.parent.users = DummyUsers() users.add("userid", "userid", "password", [])
def setUp(self): cleanUp() self.parent = DummyModel(title='dummyparent', sessions=DummySessions()) self.context = DummyModel(title='dummytitle', text='dummytext') self.context['attachments'] = DummyModel() self.parent['child'] = self.context self.parent.catalog = DummyCatalog() request = testing.DummyRequest() request.environ['repoze.browserid'] = '1' self.request = request registerLayoutProvider()
def __init__(self): DummyModel.__init__(self) self[u'profiles'] = DummyModel() dummies = [ (u'dummy1', u'Dummy One'), (u'dummy2', u'Dummy Two'), (u'dummy3', u'Dummy Three'), ] for dummy in dummies: self[u'profiles'][dummy[0]] = DummyModel(title=dummy[1]) self[u'communities'] = DummyModel()
def _makeContext(self): from pyramid.testing import DummyModel from karl.testing import DummyCatalog from karl.testing import DummyOrdering parent = DummyModel(title='dummyparent', ordering=DummyOrdering(), catalog=DummyCatalog()) context = DummyModel(title='dummytitle', text='dummytext', ordering=DummyOrdering()) context['attachments'] = DummyModel() parent['child'] = context return parent, context
def test_get_user_by_login(self): from pyramid.testing import DummyModel from pyramid.testing import DummyRequest from zope.interface import directlyProvides from ...interfaces import IFolder context = DummyModel() directlyProvides(context, IFolder) principals = context['principals'] = DummyModel(__is_service__=True) directlyProvides(principals, IFolder) users = principals['users'] = DummyModel() phred = users['phred'] = DummyModel() adapter = self._makeOne(context, DummyRequest()) self.assertTrue(adapter.get_user_by_login('phred') is phred) self.assertTrue(adapter.get_user_by_login('bharney') is None)
def test_get_groupids(self): from pyramid.testing import DummyModel from pyramid.testing import DummyRequest from zope.interface import directlyProvides from ...interfaces import IFolder context = DummyModel() directlyProvides(context, IFolder) principals = context['principals'] = DummyModel(__is_service__=True) directlyProvides(principals, IFolder) users = principals['users'] = DummyModel() phred = users['phred'] = DummyModel() phred.groupids = ['phlyntstones'] adapter = self._makeOne(context, DummyRequest()) omap = context.__objectmap__ = DummyObjectMap(oid123=phred) self.assertEqual(adapter.get_groupids('oid123'), ['phlyntstones'])
def setUp(self): cleanUp() # When you see: # AttributeError: 'NoneType' object has no attribute 'url' # ...it is often because you are pointed at the wrong .pt self.template_fn = 'templates/show_page.pt' self.parent = DummyModel(title='dummyparent') self.context = DummyModel(title='dummytitle', text='dummytext') self.context['attachments'] = DummyModel() self.parent['child'] = self.context self.parent.catalog = DummyCatalog() karl.testing.registerDummyRenderer( 'karl.views:templates/formfields.pt')
def test_get_user_by_userid(self): from pyramid.testing import DummyModel from pyramid.testing import DummyRequest from zope.interface import directlyProvides from ...interfaces import IFolder context = DummyModel() directlyProvides(context, IFolder) principals = context['principals'] = DummyModel(__is_service__=True) directlyProvides(principals, IFolder) users = principals['users'] = DummyModel() phred = users['phred'] = DummyModel() adapter = self._makeOne(context, DummyRequest()) omap = context.__objectmap__ = DummyObjectMap(oid123=phred) self.assertTrue(adapter.get_user_by_userid('oid123') is phred) self.assertTrue(adapter.get_user_by_userid('nonesuch') is None)
def test_creator_is___name__(self): from pyramid.testing import DummyModel profiles = DummyModel() inst = profiles['flinty'] = self._makeOne(firstname='fred', lastname='flintstone ') self.assertEqual(inst.creator, 'flinty')
def test_handle_no_email_attachments(self): from pyramid.testing import DummyModel from karl.models.interfaces import IComment import datetime self._registerFactory(IComment, DummyModel) self._registerContextURL() self._registerSettings() alerts = self._registerAlerts() workflow = self._registerSecurityWorkflow() context = _makeBlogEntryClass()('foo', 'foo', 'foo', 'foo') comments = context['comments'] = DummyModel() comments.next_id = '1' adapter = self._makeOne(context) message = object() # ignored info = { 'subject': 'SUBJECT', 'author': 'phreddy', 'date': datetime.datetime(2010, 5, 12, 2, 42) } adapter.handle(message, info, 'TEXT', []) self.assertEqual(len(comments), 1) comment_id, comment = comments.items()[0] self.assertEqual(comment_id, '1') self.assertEqual(comment.title, 'SUBJECT') self.assertEqual(comment.creator, 'phreddy') self.assertEqual(comment.text, 'TEXT') self.assertEqual(comment.description, 'TEXT') self.assertEqual(comment.created, datetime.datetime(2010, 5, 12, 2, 42)) self.failIf('attachments' in comment) self.assertEqual(len(alerts.emissions), 1) self.failUnless(workflow.initialized)
def test_handle_no_email_attachments(self): import datetime from pyramid.testing import DummyModel from karl.content.interfaces import IBlogEntry self._set_NOW(datetime.datetime(2009, 01, 28, 10, 00, 00)) self._registerFactory(IBlogEntry, _makeBlogEntryClass()) self._registerContextURL() self._registerSettings() alerts = self._registerAlerts() workflow = self._registerSecurityWorkflow() context = DummyModel() adapter = self._makeOne(context) message = object() # ignored info = { 'subject': 'SUBJECT', 'author': 'phreddy', 'date': datetime.datetime(2010, 5, 12, 2, 42) } adapter.handle(message, info, 'TEXT', []) self.assertEqual(len(context), 1) entry_id, entry = context.items()[0] self.assertEqual(entry_id, 'subject') self.assertEqual(entry.title, 'SUBJECT') self.assertEqual(entry.creator, 'phreddy') self.assertEqual(entry.text, 'TEXT') self.assertEqual(entry.description, 'TEXT') self.assertEqual(entry.created, datetime.datetime(2010, 5, 12, 2, 42)) self.failIf(len(entry['attachments'])) self.assertEqual(len(alerts.emissions), 1) self.assertEqual(alerts.emissions, [(entry, 'http://offline.example.com/app/subject')]) self.failUnless(workflow.initialized)
def test_w_all_attrs(self): from pyramid.testing import DummyModel ATTR_NAMES = [ '__name__', 'firstname', 'lastname', 'email', 'phone', 'extension', 'department', 'position', 'organization', 'location', 'country', 'website', 'languages', 'office', 'room_no', 'biography', ] ATTR_VALUES = [x.upper() for x in ATTR_NAMES] mapping = dict(zip(ATTR_NAMES, ATTR_VALUES)) mapping['title'] = 'TITLE' profile = DummyModel(**mapping) callable = self._callFUT(profile) self.assertEqual(callable(), ('TITLE', '\n'.join(ATTR_VALUES)))
def test_w_latin1_attrs(self): from pyramid.testing import DummyModel FIRSTNAME = u'Phr\xE9d' profile = DummyModel(title='title', firstname=FIRSTNAME.encode('latin1')) callable = self._callFUT(profile) self.assertEqual(callable(), ('title', FIRSTNAME))
def test_handle_submit(self): from pyramid.testing import DummyModel from karl.testing import DummyCatalog from karl.testing import DummyOrdering from karl.testing import DummyTags context = DummyModel( tags=DummyTags(), catalog=DummyCatalog(), ordering=DummyOrdering(), ) converted = { 'title': u'Ref Manual Title', 'tags': [u'foo', u'bar'], 'description': u'ref manual description', } controller = self._makeOne(context=context) self._registerFactory(controller) response = controller.handle_submit(converted) self.failUnless(u'ref-manual-title' in context) manual = context[u'ref-manual-title'] self.assertEqual(manual.title, u'Ref Manual Title') self.assertEqual(manual.description, u'ref manual description') self.assertEqual(context.tags._called_with[1]['tags'], [u'foo', u'bar'])
def test_my_view(self): from pyramid.testing import DummyModel from pyramid.testing import DummyRequest context = DummyModel() request = DummyRequest() info = self._callFUT(context, request) self.assertEqual(info['purl'], 'http://example.com/')
def test_short_address_overridden(self): from pyramid.testing import DummyModel parent = DummyModel(__name__='testing') mlist = self._makeOne() mlist.__parent__ = parent mlist.short_address = 'overridden' self.assertEqual(mlist.short_address, 'overridden')
def factory(title, text, description, creator): page = DummyPage(title=title, text=text, description=description, creator=creator) page['attachments'] = DummyModel() return page
def test___call___app_url_trailing_slash(self): from pyramid.testing import DummyModel root = self._makeRoot() root.settings['site_url'] = "http://offline.example.com/app/" context = root['foo'] = DummyModel() url = self._makeOne(context) self.assertEqual(url(), 'http://offline.example.com/app/foo')
def _makeModel(self, name=None, parent=None, principals=('phreddy', )): from pyramid.testing import DummyModel model = DummyModel() if parent is not None: parent[name] = model if principals: model.__acl__ = [self._makeACE(principal=x) for x in principals] return model
def _makeOne(self, context=None, request=None): from pyramid.testing import DummyModel from pyramid.testing import DummyRequest if context is None: context = DummyModel(text='<p>dummy</p>') if request is None: request = DummyRequest() return self._getTargetClass()(context, request)
def __init__(self, title, text, description, creator): DummyModel.__init__(self, title=title, text=text, description=description, creator=creator) if init_attachments: self['attachments'] = DummyModel()