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() root = makeRoot() root["foo"] = context context.__parent__ = root 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.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 __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 __init__(self, title, text, description, creator): DummyModel.__init__(self, title=title, text=text, description=description, creator=creator) if init_attachments: self['attachments'] = DummyModel()
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 test_get_mail_store(self): from pyramid.testing import DummyModel from repoze.mailin.maildir import MaildirStore from repoze.mailin.monitor.models import Messages monitor = DummyModel() monitor.maildir_path = self._getTempdir() o = Messages(monitor) self.failUnless(isinstance(o._mail_store(), MaildirStore))
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 test_it(self): from pyramid.testing import DummyModel from pyramid.testing import DummyRequest context = DummyModel() context.message_id = 'foo' context.message = 'bar' renderer = self.config.testing_add_renderer('templates/show_message.pt') from repoze.mailin.monitor.views import show_message_view show_message_view(context, DummyRequest()) self.assertEqual(renderer.message_id, 'foo') self.assertEqual(renderer.raw, 'bar')
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 test_handle_with_email_attachments_w_entry_attachments(self): import datetime from pyramid.testing import DummyModel from karl.content.interfaces import IBlogEntry from karl.content.interfaces import ICommunityFile self._set_NOW(datetime.datetime(2009, 01, 28, 10, 00, 00)) self._registerFactory(IBlogEntry, _makeBlogEntryClass()) self._registerFactory(ICommunityFile) 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)} attachments = [('file1.bin', 'application/octet-stream', 'DATA'), ('file2.png', 'image/png', 'IMAGE'), ] adapter.handle(message, info, 'TEXT', attachments) 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') attachments = entry['attachments'] self.assertEqual(len(attachments), 2) file1 = attachments['file1.bin'] self.assertEqual(file1.title, 'file1.bin') self.assertEqual(file1.filename, 'file1.bin') self.assertEqual(file1.mimetype, 'application/octet-stream') self.assertEqual(file1.stream.read(), 'DATA') file2 = attachments['file2.png'] self.assertEqual(file2.title, 'file2.png') self.assertEqual(file2.filename, 'file2.png') self.assertEqual(file2.mimetype, 'image/png') self.assertEqual(file2.stream.read(), 'IMAGE') self.assertEqual(len(alerts.emissions), 1) self.assertEqual(alerts.emissions, [(entry, 'http://offline.example.com/app/subject')]) self.failUnless(workflow.initialized)
def test_handle_with_email_attachments_w_entry_attachments(self): import datetime from pyramid.testing import DummyModel from karl.content.interfaces import IBlogEntry from karl.content.interfaces import ICommunityFile self._set_NOW(datetime.datetime(2009, 01, 28, 10, 00, 00)) self._registerFactory(IBlogEntry, _makeBlogEntryClass()) self._registerFactory(ICommunityFile) self._registerContextURL() self._registerSettings() alerts = self._registerAlerts() workflow = self._registerSecurityWorkflow() context = DummyModel() root = makeRoot() root["foo"] = context context.__parent__ = root adapter = self._makeOne(context) message = object() # ignored info = {"subject": "SUBJECT", "author": "phreddy", "date": datetime.datetime(2010, 5, 12, 2, 42)} attachments = [("file1.bin", "application/octet-stream", "DATA"), ("file2.png", "image/png", "IMAGE")] adapter.handle(message, info, "TEXT", attachments) 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") attachments = entry["attachments"] self.assertEqual(len(attachments), 2) file1 = attachments["file1.bin"] self.assertEqual(file1.title, "file1.bin") self.assertEqual(file1.filename, "file1.bin") self.assertEqual(file1.mimetype, "application/octet-stream") self.assertEqual(file1.stream.read(), "DATA") file2 = attachments["file2.png"] self.assertEqual(file2.title, "file2.png") self.assertEqual(file2.filename, "file2.png") self.assertEqual(file2.mimetype, "image/png") self.assertEqual(file2.stream.read(), "IMAGE") self.assertEqual(len(alerts.emissions), 1) self.failUnless(workflow.initialized)
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() from karl.models.site import Site self.settings = Site._default_settings.copy() self.settings.update({ 'title': 'karl3test', 'system_email_domain': "karl3.example.com", 'admin_email': '*****@*****.**', 'min_pw_length': 8, 'site_url': "http://offline.example.com/app", 'selectable_groups': 'group.KarlAdmin group.KarlLovers', 'system_list_subdomain': 'karl3.example.com' }) self.sessions = DummySessions()
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() mailin.close() 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_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 _makeItem(self, ifaces=(), **kw): from zope.interface import directlyProvides from pyramid.testing import DummyModel class _DummyOrdering: # The one in karl.testing doesn't have a working sync. def sync(self, entries): self._items = entries def items(self): return self._items item = DummyModel(ordering=_DummyOrdering(), **kw) directlyProvides(item, ifaces) return item
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() root = makeRoot() root['foo'] = context context.__parent__ = root 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.failUnless(workflow.initialized)
def test_handle_submit_context_wo_ordering(self): from pyramid.testing import DummyModel from karl.testing import DummyCatalog from karl.testing import DummyTags context = DummyModel(tags=DummyTags(), catalog=DummyCatalog()) controller = self._makeOne(context=context) self._registerFactory(controller) converted = {'title': u'Ref Manual Title', 'tags': [u'foo', u'bar'], 'description': u'ref manual description', } 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 _makeItem(self, **kw): from pyramid.testing import DummyModel class _DummyOrdering: # The one in karl.testing doesn't have a working sync. _moved_up = _moved_down = None _sync_called = False def sync(self, entries): self._items = entries self._sync_called = True def items(self): return self._items def moveUp(self, name): self._moved_up = name def moveDown(self, name): self._moved_down = name return DummyModel(ordering=_DummyOrdering(), **kw)
def _callFUT(self, root=None, filename=None, force_reindex=False): from karl.scripts.peopleconf import load_peopleconf args = [] def _func(root, tree, force_reindex): args.append((root, tree, force_reindex)) if root is None: from pyramid.testing import DummyModel root = DummyModel() if filename is None: filename = self.xml_filename load_peopleconf(root, filename, peopleconf_func=_func, force_reindex=force_reindex) self.assertEqual(len(args), 1) return args[0]
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') root = makeRoot() root['entry'] = context context.__parent__ = root 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 _callFUT(self, root=None, filename=None, force_reindex=False): from karl.scripts.peopleconf import load args = [] def _func(root, tree, force_reindex): args.append((root, tree, force_reindex)) if root is None: from pyramid.testing import DummyModel root = DummyModel() if filename is None: filename = self.xml_filename argv = [None] if force_reindex: argv.append('--force-reindex') argv.append(filename) load(argv, peopleconf=_func, root=root) self.assertEqual(len(args), 1) return args[0]
def factory(title, description, creator): rm = DummyModel(title=title, description=description, creator=creator) return rm
def __getitem__(self, item): dummy = DummyModel() dummy.__name__ = item return dummy
def __init__(self, *message_ids): DummyModel.__init__(self) monitor = DummyModel() monitor['quarantine'] = self self.message_ids = message_ids
def __init__(self, **kw): DummyModel.__init__(self) for k,v in kw.items(): self[k] = DummyMessage(v)
def test___call___no_settings(self): from pyramid.testing import DummyModel context = DummyModel() url = self._makeOne(context) self.assertRaises(ValueError, url)
def _makeContext(self, **kw): from pyramid.testing import DummyModel return DummyModel(**kw)
def __init__(self): DummyModel.__init__(self) root = DummyRoot() root["communities"]["community"] = self
def _makeOne(self, model=None): from pyramid.testing import DummyModel if model is None: model = DummyModel() return self._getTargetClass()(model, None)
def test_instance_conforms_to_IMailinHandler(self): from zope.interface.verify import verifyObject from pyramid.testing import DummyModel from karl.adapters.interfaces import IMailinHandler verifyObject(IMailinHandler, self._makeOne(DummyModel()))
def test_w_UTF8_attrs(self): from pyramid.testing import DummyModel FIRSTNAME = u'Phr\xE9d' profile = DummyModel(title='title', firstname=FIRSTNAME.encode('UTF8')) callable = self._callFUT(profile) self.assertEqual(callable(), ('title', FIRSTNAME))
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 test_short_address_not_overridden_uses_parent_name(self): from pyramid.testing import DummyModel parent = DummyModel(__name__='testing') mlist = self._makeOne() mlist.__parent__ = parent self.assertEqual(mlist.short_address, 'testing')
def __init__(self, message): DummyModel.__init__(self) self.message = message
def __init__(self, *args, **kw): DummyModel.__init__(self) for item in kw.items(): setattr(self, item[0], item[1]) self._alert_prefs = {} self._pending_alerts = DummyAccumulator()
def __init__(self, **kw): DummyModel.__init__(self) for k, v in kw.items(): self[k] = DummyMessage(v)
def test_getProfileByEmail_mixedcase(self): from pyramid.testing import DummyModel pf = self._makeOne() profile = pf['extant'] = DummyModel() pf.email_to_name['*****@*****.**'] = 'extant' self.failUnless(pf.getProfileByEmail('*****@*****.**') is profile)
def test_no_attrs(self): from pyramid.testing import DummyModel callable = self._callFUT(DummyModel(title='title')) self.assertEqual(callable(), ('title', ''))