def test_handle_submit_titlechange(self): from karl.testing import DummyCatalog self._register() converted = { "text": "text", "title": "newtitle", "sendalert": True, "security_state": "public", "tags": "thetesttag", } context = testing.DummyModel(title="oldtitle") context.text = "oldtext" def change_title(newtitle): context.title = newtitle context.change_title = change_title context.catalog = DummyCatalog() request = testing.DummyRequest() from karl.models.interfaces import IObjectModifiedEvent from zope.interface import Interface L = testing.registerEventListener((Interface, IObjectModifiedEvent)) testing.registerDummySecurityPolicy("testeditor") controller = self._makeOne(context, request) response = controller.handle_submit(converted) self.assertEqual(L[0], context) self.assertEqual(L[1].object, context) self.assertEqual(response.location, "http://example.com/?status_message=Wiki%20Page%20edited") self.assertEqual(context.text, "text") self.assertEqual(context.modified_by, "testeditor") self.assertEqual(context.title, "newtitle")
def test_add_group_unchanged_does_not_fire_IUserAddedGroup(self): from karl.models.interfaces import IUserAddedGroup events = testing.registerEventListener(IUserAddedGroup) ku = self._makeOne(self) ku.add('userid', 'login_name', 'password', ('group_1',)) ku.add_group('userid', 'group_1') self.assertEqual(len(events), 0)
def test___delitem___emits_no_events(self): obj = self._make_one() obj['foo'] = testing.DummyModel() events = testing.registerEventListener() del events[:] del obj['foo'] self.failIf(events)
def test_remove_group_unchanged_does_not_fire_IUserRemovedGroup(self): from opencore.models.interfaces import IUserRemovedGroup events = testing.registerEventListener(IUserRemovedGroup) ku = self._makeOne(self) ku.add('userid', 'login_name', 'password', ('group_1', 'group_2')) ku.remove_group('userid', 'nonesuch') self.assertEqual(len(events), 0)
def test_handle_submit_titlechange(self): from karl.testing import DummyCatalog self._register() converted = { 'text':'text', 'title':'newtitle', 'sendalert': True, 'security_state': 'public', 'tags': 'thetesttag', } context = testing.DummyModel(title='oldtitle') context.text = 'oldtext' def change_title(newtitle): context.title = newtitle context.change_title = change_title context.catalog = DummyCatalog() request = testing.DummyRequest() from karl.models.interfaces import IObjectModifiedEvent from zope.interface import Interface L = testing.registerEventListener((Interface, IObjectModifiedEvent)) testing.registerDummySecurityPolicy('testeditor') controller = self._makeOne(context, request) response = controller.handle_submit(converted) self.assertEqual(L[0], context) self.assertEqual(L[1].object, context) self.assertEqual( response.location, 'http://example.com/?status_message=Wiki%20Page%20edited') self.assertEqual(context.text, 'text') self.assertEqual(context.modified_by, 'testeditor') self.assertEqual(context.title, 'newtitle')
def test_add_fires_IUserAdded(self): from karl.models.interfaces import IUserAdded events = testing.registerEventListener(IUserAdded) ku = self._makeOne(self) ku.add('userid', 'login_name', 'password', ('group_1',)) self.assertEqual(len(events), 1) self.failUnless(events[0].site is self) self.assertEqual(events[0].id, 'userid') self.assertEqual(events[0].login, 'login_name') self.assertEqual(len(events[0].groups), 1) self.failUnless('group_1' in events[0].groups)
def test_handle_submit_events(self): from zope.interface import Interface from karl.models.interfaces import IObjectModifiedEvent from karl.models.interfaces import IObjectWillBeModifiedEvent context = testing.DummyModel( title='oldtitle', description='oldescription', default_tool='overview') request = testing.DummyRequest() L = testing.registerEventListener((Interface, IObjectModifiedEvent)) L2 = testing.registerEventListener((Interface, IObjectWillBeModifiedEvent)) self._register() view = self._makeOne(context, request) converted = {'title':u'Thetitle yo', 'description':'thedescription', 'text':'thetext', 'security_state':'public', 'default_tool': 'files', 'tags': 'thetesttag', 'tools':[], } view.handle_submit(converted) self.assertEqual(len(L), 2) self.assertEqual(len(L2), 2)
def test_remove_group_fires_IUserRemovedGroup(self): from karl.models.interfaces import IUserRemovedGroup events = testing.registerEventListener(IUserRemovedGroup) ku = self._makeOne(self) ku.add('userid', 'login_name', 'password', ('group_1', 'group_2')) ku.remove_group('userid', 'group_2') self.assertEqual(len(events), 1) self.assertEqual(events[0].id, 'userid') self.assertEqual(events[0].login, 'login_name') groups = events[0].groups self.assertEqual(len(groups), 1) self.failUnless(events[0].site is self) self.failUnless('group_1' in groups) old_groups = events[0].old_groups self.assertEqual(len(old_groups), 2) self.failUnless('group_1' in old_groups) self.failUnless('group_2' in old_groups)
def test_handle_submit_valid_nofile_noremove(self): from karl.models.interfaces import ISite from zope.interface import directlyProvides from schemaish.type import File as SchemaFile from karl.models.interfaces import IObjectModifiedEvent from karl.content.interfaces import ICommunityFile from repoze.lemonade.interfaces import IContentFactory self._register() context = DummyFile(title='oldtitle') context.__name__ = None context.__parent__ = None context.mimetype = 'old/type' context.filename = 'old_name' context.stream = 'old' context.sessions = DummySessions() context.catalog = DummyCatalog() directlyProvides(context, ISite) converted = { 'title': 'new title', 'file': SchemaFile(None, None, None), 'security_state': 'public', 'tags': ['thetesttag'], } testing.registerAdapter(lambda *arg: DummyCommunityFile, (ICommunityFile,), IContentFactory) L = testing.registerEventListener((Interface, IObjectModifiedEvent)) testing.registerDummySecurityPolicy('testeditor') request = self._makeRequest() controller = self._makeOne(context, request) response = controller.handle_submit(converted) self.assertEqual(response.location, 'http://example.com/?status_message=File+changed') self.assertEqual(len(L), 2) self.assertEqual(context.title, u'new title') self.assertEqual(context.mimetype, 'old/type') self.assertEqual(context.filename, 'old_name') self.assertEqual(L[0], context) self.assertEqual(L[1].object, context) self.assertEqual(context.stream, 'old') self.assertEqual(context.modified_by, 'testeditor')
def test_handle_submit(self): from karl.testing import DummyUpload context = testing.DummyModel( title='oldtitle', text='oldtext', ) upload = DummyUpload(filename='test.txt') converted = { 'title':'newtitle', 'text':'newtext', 'tags':[], 'security_state':'public', 'attachments':[DummyUpload()], } from karl.content.interfaces import ICommunityFile from repoze.lemonade.testing import registerContentFactory def factory(**args): res = testing.DummyModel(**args) res.size = 10 return res registerContentFactory(factory, ICommunityFile) context['attachments'] = testing.DummyModel() context.catalog = DummyCatalog() context.sessions = DummySessions() from karl.models.interfaces import IObjectModifiedEvent L = testing.registerEventListener((Interface, IObjectModifiedEvent)) request = testing.DummyRequest() request.environ['repoze.browserid'] = '1' controller = self._makeOne(context, request) response = controller.handle_submit(converted) self.assertEqual(response.location, 'http://example.com/?status_message=Forum+Topic+Edited') self.assertEqual(L[0], context) self.assertEqual(L[1].object, context) self.assertEqual(context.title, 'newtitle') self.assertEqual(context.text, 'newtext') self.assertEqual(len(context['attachments']), 1) self.assertEqual(context['attachments'].keys(), ['test.txt']) self.assertEqual( context['attachments']['test.txt'].mimetype, 'text/plain')
def test_handle_submit(self): converted = { 'title':'newtitle', 'description':'newdescription', } context = testing.DummyModel( title='oldtitle', description='olddescription') context.catalog = DummyCatalog() from karl.models.interfaces import IObjectModifiedEvent L = testing.registerEventListener((Interface, IObjectModifiedEvent)) testing.registerDummySecurityPolicy('testeditor') request = testing.DummyRequest() controller = self._makeOne(context, request) response = controller.handle_submit(converted) self.assertEqual(L[0], context) self.assertEqual(L[1].object, context) self.assertEqual(response.location, 'http://example.com/?status_message=Forum+Edited') self.assertEqual(context.title, 'newtitle') self.assertEqual(context.description, 'newdescription') self.assertEqual(context.modified_by, 'testeditor')
def test_handle_submit_attachment_is_None(self): """ There seems to be some set of circumstances under which formish will return a None as a value in the attachments sequence. """ from schemaish.type import File as SchemaFile from karl.models.interfaces import IObjectModifiedEvent from zope.interface import Interface from karl.models.interfaces import ITagQuery from karl.content.interfaces import IBlogEntry from repoze.lemonade.testing import registerContentFactory from karl.testing import DummyCatalog testing.registerAdapter(DummyTagQuery, (Interface, Interface), ITagQuery) self._registerDummyWorkflow() context = DummyBlogEntry() context.sessions = DummySessions() context.__name__ ='ablogentry' context.catalog = DummyCatalog() context['attachments'] = testing.DummyModel() from karl.models.interfaces import ISite from zope.interface import directlyProvides directlyProvides(context, ISite) converted = {'title':'foo', 'text':'text', 'security_state':'public', 'tags':'thetesttag', 'attachments':[None], } registerContentFactory(DummyBlogEntry, IBlogEntry) L = testing.registerEventListener((Interface, IObjectModifiedEvent)) testing.registerDummySecurityPolicy('testeditor') request = self._makeRequest() controller = self._makeOne(context, request) response = controller.handle_submit(converted) self.assertEqual(response.location, 'http://example.com/ablogentry/') self.assertEqual(len(L), 2) self.assertEqual(context.title, 'foo') self.assertEqual(context.text, 'text') self.assertEqual(context.modified_by, 'testeditor')
def test_handle_submit(self): self._register() from karl.models.interfaces import IObjectModifiedEvent request = testing.DummyRequest() context = testing.DummyModel(title='oldtitle') context.catalog = DummyCatalog() request = testing.DummyRequest() converted = { 'title':'new title', 'security_state': 'private', 'tags': ['thetesttag'], } L = testing.registerEventListener((Interface, IObjectModifiedEvent)) testing.registerDummySecurityPolicy('testeditor') controller = self._makeOne(context, request) response = controller.handle_submit(converted) msg = 'http://example.com/?status_message=Folder+changed' self.assertEqual(response.location, msg) self.assertEqual(context.title, u'new title') self.assertEqual(L[0], context) self.assertEqual(L[1].object, context) self.assertEqual(context.modified_by, 'testeditor')
def test_submitted_valid(self): self._registerSecurityWorkflow() blog_entry = DummyBlogEntry() context = blog_entry.comments context.__name__ = 'thecomment' context.text = 'yup' request = testing.DummyRequest( params={ 'form.submitted': '1', 'add_comment': 'Some Text', 'security_state': 'public', } ) L = testing.registerEventListener((Interface, Interface)) testing.registerDummySecurityPolicy('testeditor') response = self._callFUT(context, request) self.assertEqual(context.text, 'Some Text') self.assertEqual(len(L), 4) self.assertEqual(response.location, 'http://example.com/thecomment/') self.assertEqual(context.modified_by, 'testeditor')
def test_submitted_valid(self): self._registerTagbox() self._registerLayoutProvider() request = DummyRequest( MultiDict( {"form.submitted": "1", "title": "newtitle", "description": "newdescription", "tags": "thetesttag"} ) ) context = self.context L = registerEventListener((Interface, IObjectModifiedEvent)) testing.registerDummySecurityPolicy("testeditor") response = self._callFUT(context, request) self.assertEqual(L[0], context) self.assertEqual(L[1].object, context) msg = "http://example.com/child/?status_message=Reference%20section%20edited" self.assertEqual(response.location, msg) self.assertEqual(context.title, "newtitle") self.assertEqual(context.description, "newdescription") self.assertEqual(context.modified_by, "testeditor")