def testRootListingForMembers(self): Type = '' CurrentFolder = '/' User = self.portal.acl_users.getUser('user') # By default, the Member role doesn't have 'List folder contents' # permission on the portal object, and furthermore the portal object # is not part of a workflow. This means that Members cannot list the # contents in the site root. # where is it? expected = {'files': [], 'folders': []} actual = self.fckc.GetFoldersAndFiles(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual)) # The suggested workaround is to give them permission manually. self.login('admin') self.portal.manage_permission("List folder contents", ('Manager', 'Owner', 'Member'), acquire=1) self.logout() # there it is! expected = {'files': [('index_html', 4)], 'folders': ['Docs']} actual = self.fckc.GetFoldersAndFiles(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual))
def testWorkflowIsHonored(self): Type = '' CurrentFolder = '/Docs/' User = self.portal.acl_users.getUser('user') # now you see it... expected = {'files': [('Doc', 0), ('PDF', 0)], 'folders': ['Test']} actual = self.fckc.GetFoldersAndFiles(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual)) # make Doc private self.login('admin') doc = self.portal.Docs.Doc pwf = self.portal.portal_workflow pwf.doActionFor(doc, 'hide') self.logout() # prove that Doc is now private expected = 'private' actual = pwf.getInfoFor(doc, 'review_state') self.assertEqual(expected, actual) # ...now you don't expected = {'files': [('PDF', 0)], 'folders': ['Test']} actual = self.fckc.GetFoldersAndFiles(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual))
def testImageOnlyReturnsImages(self): Type = 'Image' CurrentFolder = '/Docs/' User = self.portal.acl_users.getUser('user') expected = {'files': [('Img', 0)], 'folders': ['Test']} actual = self.fckc.GetFoldersAndFiles(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual))
def testUserDoesHavePermission(self): Type = '' CurrentFolder = '/' User = self.portal.acl_users.getUser('admin') expected = {'files': [('index_html', 4)], 'folders': ['Docs']} actual = self.fckc.GetFoldersAndFiles(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual))
def testUserDoesntHavePermission(self): # Member does not have 'List folder contents' on root by default # see below Type = '' CurrentFolder = '/' User = self.portal.acl_users.getUser('user') expected = {'files': [], 'folders': []} actual = self.fckc.GetFoldersAndFiles(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual))
def testUserDoesHavePermission(self): Type = '' CurrentFolder = '/' NewFile = DummyFileUpload('blank.pdf') expected = {'param_string': '0'} self.login('admin') actual = self.fckc.FileUpload(Type, CurrentFolder, NewFile) self.logout() self.assertEqual(d2t(expected), d2t(actual))
def testNameCollision(self): Type = '' CurrentFolder = '/' NewFolderName = 'Docs' expected = {'error_code': 101} self.login('admin') actual = self.fckc.CreateFolder(Type, CurrentFolder, NewFolderName) self.logout() self.assertEqual(d2t(expected), d2t(actual))
def testUserDoesHavePermission(self): Type = '' CurrentFolder = '/' NewFolderName = 'Foo' expected = {'error_code': 0} self.login('admin') actual = self.fckc.CreateFolder(Type, CurrentFolder, NewFolderName) self.logout() self.assertEqual(d2t(expected), d2t(actual))
def testCurrentFolderDoesntExist(self): Type = '' CurrentFolder = '/Nonexistant/' NewFile = DummyFileUpload('blank.pdf') expected = {'param_string': '202'} actual = self.fckc.FileUpload(Type, CurrentFolder, NewFile) self.assertEqual(d2t(expected), d2t(actual)) # but only KeyErrors are caught CurrentFolder = [] self.assertRaises(TypeError, self.fckc.FileUpload, Type, CurrentFolder, NewFile)
def testCurrentFolderDoesntExist(self): Type = '' CurrentFolder = '/Nonexistant/' User = self.portal.acl_users.getUser('admin') expected = {'files': [], 'folders': []} actual = self.fckc.GetFoldersAndFiles(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual)) # but only KeyErrors are caught CurrentFolder = [] self.assertRaises(TypeError, self.fckc.GetFoldersAndFiles, Type, CurrentFolder, User)
def testNonImageOnlyReturnsDocsAndFiles(self): Type = 'Foo' # can be anything besides 'Image' CurrentFolder = '/Docs/' User = self.portal.acl_users.getUser('user') expected = {'files': [('Doc', 0), ('PDF', 0)], 'folders': ['Test']} actual = self.fckc.GetFoldersAndFiles(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual)) Type = [] # really, anything expected = {'files': [('Doc', 0), ('PDF', 0)], 'folders': ['Test']} actual = self.fckc.GetFoldersAndFiles(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual))
def testCurrentFolderDoesntExist(self): Type = '' CurrentFolder = '/Nonexistant/' NewFolderName = 'Foo' expected = {'error_code': 110} actual = self.fckc.CreateFolder(Type, CurrentFolder, NewFolderName) self.assertEqual(d2t(expected), d2t(actual)) # but only KeyErrors are caught CurrentFolder = [] self.assertRaises( TypeError, self.fckc.CreateFolder, Type , CurrentFolder, NewFolderName )
def testBasicNameCollision(self): Type = '' CurrentFolder = '/Docs/Test/' NewFile = DummyFileUpload('blank.pdf') # first one goes up fine, as expected expected = {'param_string': '0'} self.login('admin') actual = self.fckc.FileUpload(Type, CurrentFolder, NewFile) self.logout() self.assertEqual(d2t(expected), d2t(actual)) # now let's upload it again; the spec calls for auto-renaming the file expected = {'param_string': "201, 'blank(1).pdf'"} self.login('admin') actual = self.fckc.FileUpload(Type, CurrentFolder, NewFile) self.logout() self.assertEqual(d2t(expected), d2t(actual))
def testOnlyReturnsFolders(self): Type = '' CurrentFolder = '/Docs/' User = self.portal.acl_users.getUser('user') expected = {'folders': ['Test']} actual = self.fckc.GetFolders(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual)) # add another Folder and an Image for kicks self.login('admin') self.portal.Docs.invokeFactory('Folder', id='another-folder') self.portal.Docs.invokeFactory('Image', id='some-image') self.logout() expected = {'folders': ['Test', 'another-folder']} actual = self.fckc.GetFolders(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual))
def testSize(self): content = 'I AM THE CONTENT!!!!!!!!' * 50 # needs to be bigger than a KB self.portal.Docs.Doc.edit('text/html', content) # actual size is given in bytes expected = 1718 actual = self.portal.Docs.Doc.get_size() # self.assertEqual(expected, actual) -- The actual value seems to vary # ever so slightly. I'm not sure why but the rounded value is consistent # so I'm not going to worry about it. Type = '' CurrentFolder = '/Docs/' User = self.portal.acl_users.getUser('user') # but we want size rounded to nearest kilobyte expected = {'files': [('Doc', 2), ('PDF', 0)], 'folders': ['Test']} actual = self.fckc.GetFoldersAndFiles(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual))
def testOnlyPermissibleFoldersListed(self): Type = '' CurrentFolder = '/Docs/' User = self.portal.acl_users.getUser('user') # now you see it expected = {'folders': ['Test']} actual = self.fckc.GetFolders(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual)) # make the Test folder private so Member's can't see it self.login('admin') pwf = self.portal.portal_workflow pwf.doActionFor(self.portal.Docs.Test, 'hide') self.logout() # ...now you don't expected = {'folders': []} actual = self.fckc.GetFolders(Type, CurrentFolder, User) self.assertEqual(d2t(expected), d2t(actual))
def testPloneCheckId(self): Type = '' CurrentFolder = '/' NewFolderName = '' def createFolder(NewFolderName): self.login('admin') return self.fckc.CreateFolder(Type, CurrentFolder, NewFolderName) self.logout() # in 2.0.5 check_id catches bad Zope id's (among other things) expected = {'error_code': 102} actual = createFolder('!!!!foofoofoof!!!!!') self.assertEqual(d2t(expected), d2t(actual)) # but it does not enforce name collisions induced by portal_skins, # which means we can override check_id, e.g. expected = {'error_code': 0} actual = createFolder('check_id') self.assertEqual(d2t(expected), d2t(actual)) # then next time we add something we will get strange behavior self.assertRaises(TypeError, createFolder, 'IShouldWork') # (clean up our mess) self.portal.manage_delObjects('check_id') # (now it should work again) expected = {'error_code': 0} actual = createFolder('IShouldWork') self.assertEqual(d2t(expected), d2t(actual)) # edge errors get caught by our catch-all expected = {'error_code': 110} actual = createFolder([]) self.assertEqual(d2t(expected), d2t(actual))