1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144
|
#
# Tests the content types
#
import os, sys
if __name__ == '__main__':
execfile(os.path.join(sys.path[0], 'framework.py'))
from Products.CMFPlone.tests import PloneTestCase
from Products.CMFPlone.tests import dummy
from Products.CMFPlone import LargePloneFolder
from Products.ATContentTypes.interfaces import IATContentType
from Acquisition import aq_base
AddPortalTopics = 'Add portal topics'
atct_types = ('Document', 'Event', 'Favorite', 'File', 'Folder',
'Large Plone Folder', 'Image', 'Link', 'News Item',
)
class TestATContentTypes(PloneTestCase.PloneTestCase):
def afterSetUp(self):
perms = self.getPermissionsOfRole('Member')
self.setPermissions(perms + [AddPortalTopics], 'Member')
self.types = self.portal.portal_types
def getPermissionsOfRole(self, role):
perms = self.portal.permissionsOfRole(role)
return [p['name'] for p in perms if p['selected']]
def construct(self, portal_type, id, folder):
fti = self.types.getTypeInfo(portal_type)
fti.constructInstance(folder, id=id)
return getattr(folder, id)
def createWithoutConstruction(self, portal_type, id, folder):
fti = self.types.getTypeInfo(portal_type)
# manual creation
p = folder.manage_addProduct[fti.product]
m = getattr(p, fti.factory)
m(id) # create it
return folder._getOb(id)
def testPortalTypeName(self):
for pt in atct_types:
ob = self.construct(pt, pt, self.folder)
self.failUnlessEqual(ob._getPortalTypeName(), pt)
self.failUnlessEqual(ob.portal_type, pt)
self.failUnless(IATContentType.isImplementedBy(ob))
class TestContentTypes(PloneTestCase.PloneTestCase):
# This test mirrors TestContentTypeScripts but calls the API and
# not the skin scripts.
def afterSetUp(self):
perms = self.getPermissionsOfRole('Member')
self.setPermissions(perms + [AddPortalTopics], 'Member')
def getPermissionsOfRole(self, role):
perms = self.portal.permissionsOfRole(role)
return [p['name'] for p in perms if p['selected']]
def testDocumentEdit(self):
self.folder.invokeFactory('Document', id='doc')
self.folder.doc.edit(title='Foo', text='data', text_format='html')
self.assertEqual(self.folder.doc.EditableBody(), 'data')
self.assertEqual(self.folder.doc.Format(), 'text/html')
self.assertEqual(self.folder.doc.Title(), 'Foo')
def testEventEdit(self):
self.folder.invokeFactory('Event', id='event')
self.folder.event.edit(title='Foo',
start_date='2003-09-18',
end_date='2003-09-19')
self.assertEqual(self.folder.event.Title(), 'Foo')
self.assertEqual(self.folder.event.start().ISO(), '2003-09-18 00:00:00')
self.assertEqual(self.folder.event.end().ISO(), '2003-09-19 00:00:00')
def testFavoriteEdit(self):
# Note: link_edit does not traverse to remote_url
self.folder.invokeFactory('Favorite', id='favorite')
self.folder.favorite.edit(remote_url='bar/baz.html', title='Foo')
self.assertEqual(self.folder.favorite.getRemoteUrl(),
'%s/bar/baz.html' % self.portal.portal_url())
self.assertEqual(self.folder.favorite.Title(), 'Foo')
def testFileEdit(self):
self.folder.invokeFactory('File', id='file')
self.folder.file.edit(file=dummy.File())
self.assertEqual(str(self.folder.file), dummy.TEXT)
def testImageEdit(self):
self.folder.invokeFactory('Image', id='image')
self.folder.image.edit(file=dummy.Image())
self.assertEqual(str(self.folder.image.data), dummy.GIF)
def testFolderEdit(self):
self.folder.invokeFactory('Folder', id='folder')
self.folder.folder.edit(title='Foo', description='Bar')
self.assertEqual(self.folder.folder.Title(), 'Foo')
self.assertEqual(self.folder.folder.Description(), 'Bar')
# Edit a second time
self.folder.folder.edit(title='Fred', description='BamBam')
self.assertEqual(self.folder.folder.Title(), 'Fred')
self.assertEqual(self.folder.folder.Description(), 'BamBam')
def testLargePloneFolderEdit(self):
LargePloneFolder.addLargePloneFolder(self.folder, id='lpf')
self.folder.lpf.edit(title='Foo', description='Bar')
self.assertEqual(self.folder.lpf.Title(), 'Foo')
self.assertEqual(self.folder.lpf.Description(), 'Bar')
def testLinkEdit(self):
self.folder.invokeFactory('Link', id='link')
self.folder.link.edit(remote_url='http://foo.com', title='Foo')
self.assertEqual(self.folder.link.Title(), 'Foo')
self.assertEqual(self.folder.link.getRemoteUrl(), 'http://foo.com')
def testNewsItemEdit(self):
self.folder.invokeFactory('News Item', id='newsitem')
self.folder.newsitem.edit(text='data', text_format='html', title='Foo')
self.assertEqual(self.folder.newsitem.EditableBody(), 'data')
self.assertEqual(self.folder.newsitem.Format(), 'text/html')
self.assertEqual(self.folder.newsitem.Title(), 'Foo')
def testTopicEdit(self):
self.folder.invokeFactory('Topic', id='topic')
self.folder.topic.edit(title='Foo')
self.assertEqual(self.folder.topic.Title(), 'Foo')
def test_suite():
from unittest import TestSuite, makeSuite
suite = TestSuite()
suite.addTest(makeSuite(TestATContentTypes))
suite.addTest(makeSuite(TestContentTypes))
return suite
if __name__ == '__main__':
framework()
|