Skip to content
This repository has been archived by the owner on Apr 9, 2023. It is now read-only.

Commit

Permalink
add tests for some folder actions
Browse files Browse the repository at this point in the history
  • Loading branch information
vangheem committed Jan 31, 2014
1 parent 3c795b5 commit a0a949c
Show file tree
Hide file tree
Showing 4 changed files with 241 additions and 21 deletions.
54 changes: 36 additions & 18 deletions plone/app/toolbar/browser/folder.py
Expand Up @@ -21,6 +21,7 @@
from Products.CMFCore.interfaces._content import IFolderish
from zope.browsermenu.interfaces import IBrowserMenu
import json
from plone.dexterity.interfaces import IDexterityContent

try:
from plone.app.widgets.browser.file import TUS_ENABLED
Expand Down Expand Up @@ -373,13 +374,13 @@ class PropertiesAction(FolderContentsActionView):
required_obj_permission = 'Modify portal content'

def __call__(self):
self.effectiveDate = self.request.form['effectiveDate']
effectiveTime = self.request.form['effectiveTime']
if effectiveTime:
self.effectiveDate = self.request.form.get('effectiveDate')
effectiveTime = self.request.form.get('effectiveTime')
if self.effectiveDate and effectiveTime:
self.effectiveDate = self.effectiveDate + ' ' + effectiveTime
self.expirationDate = self.request.form['expirationDate']
expirationTime = self.request.form['expirationTime']
if expirationTime:
self.expirationDate = self.request.form.get('expirationDate')
expirationTime = self.request.form.get('expirationTime')
if self.expirationDate and expirationTime:
self.expirationDate = self.expirationDate + ' ' + expirationTime
self.copyright = self.request.form.get('copyright', '')
self.contributors = json.loads(
Expand All @@ -388,19 +389,36 @@ def __call__(self):
self.exclude = self.request.form.get('exclude_from_nav', None)
return super(PropertiesAction, self).__call__()

def dx_action(self, obj):
if self.effectiveDate and hasattr(obj, 'effective'):
obj.effective = DateTime(self.effectiveDate)
if self.expirationDate and hasattr(obj, 'expires'):
obj.expires = DateTime(self.expirationDate)
if self.copyright and hasattr(obj, 'rights'):
obj.rights = self.copyright
if self.contributors and hasattr(obj, 'contributors'):
obj.contributors = tuple([c['id'] for c in self.contributors])
if self.creators and hasattr(obj, 'creators'):
obj.creators = tuple([c['id'] for c in self.creators])
if self.exclude and hasattr(obj, 'exclude_from_nav'):
obj.exclude_from_nav = self.exclude == 'yes'

def action(self, obj):
if self.effectiveDate:
obj.setEffectiveDate(DateTime(self.effectiveDate))
if self.expirationDate:
obj.setExpirationDate(DateTime(self.expirationDate))
if self.copyright:
obj.setRights(self.copyright)
if self.contributors:
obj.setContributors([c['id'] for c in self.contributors])
if self.creators:
obj.setCreators([c['id'] for c in self.creators])
if self.exclude:
obj.setExcludeFromNav(self.exclude == 'yes')
if IDexterityContent.providedBy(obj):
self.dx_action(obj)
else:
if self.effectiveDate:
obj.setEffectiveDate(DateTime(self.effectiveDate))
if self.expirationDate:
obj.setExpirationDate(DateTime(self.expirationDate))
if self.copyright:
obj.setRights(self.copyright)
if self.contributors:
obj.setContributors([c['id'] for c in self.contributors])
if self.creators:
obj.setCreators([c['id'] for c in self.creators])
if self.exclude:
obj.setExcludeFromNav(self.exclude == 'yes')
obj.reindexObject()


Expand Down
41 changes: 38 additions & 3 deletions plone/app/toolbar/testing.py
Expand Up @@ -13,7 +13,7 @@
from zope.configuration import xmlconfig


class Toolbar(PloneSandboxLayer):
class ToolbarLayer(PloneSandboxLayer):
defaultBases = (PLONE_FIXTURE,)

def setUpZope(self, app, configurationContext):
Expand Down Expand Up @@ -57,15 +57,50 @@ def tearDownPloneSite(self, portal):
portal.manage_delObjects(['test-folder'])


PLONEAPPTOOLBAR_FIXTURE = Toolbar()
class ToolbarDXLayer(ToolbarLayer):

def setUpZope(self, app, configurationContext):
super(ToolbarDXLayer, self).setUpZope(app, configurationContext)
import plone.app.contenttypes
xmlconfig.file('configure.zcml',
plone.app.contenttypes,
context=configurationContext)

try:
import mockup
self.loadZCML(package=mockup)
except:
pass

z2.installProduct(app, 'Products.DateRecurringIndex')

def setUpPloneSite(self, portal):
super(ToolbarDXLayer, self).setUpPloneSite(portal)
portal.portal_workflow.setDefaultChain("simple_publication_workflow")
# we need contenttypes before installing widgets
self.applyProfile(portal, 'plone.app.contenttypes:default')


PLONEAPPTOOLBAR_FIXTURE = ToolbarLayer()

PLONEAPPTOOLBAR_INTEGRATION_TESTING = IntegrationTesting(
bases=(PLONEAPPTOOLBAR_FIXTURE,),
name="PloneAppToolbarLayer:Integration")

PLONEAPPTOOLBAR_FUNCTIONAL_TESTING = FunctionalTesting(
bases=(PLONEAPPTOOLBAR_FIXTURE,),
name="PloneAppToolbarLayer:Functional")
name="PloneAppToolbarDXLayer:Functional")

PLONEAPPTOOLBARDX_FIXTURE = ToolbarDXLayer()

PLONEAPPTOOLBARDX_INTEGRATION_TESTING = IntegrationTesting(
bases=(PLONEAPPTOOLBARDX_FIXTURE,),
name="PloneAppToolbarDXLayer:Integration")

PLONEAPPTOOLBARDX_FUNCTIONAL_TESTING = FunctionalTesting(
bases=(PLONEAPPTOOLBARDX_FIXTURE,),
name="PloneAppToolbarDXLayer:Functional")


PLONEAPPTOOLBAR_ROBOT_TESTING = FunctionalTesting(
bases=(PLONEAPPTOOLBAR_FIXTURE,
Expand Down
166 changes: 166 additions & 0 deletions plone/app/toolbar/tests/test_folder.py
@@ -0,0 +1,166 @@
# -*- coding: utf-8 -*-
from plone.app.toolbar.testing import (
PLONEAPPTOOLBAR_INTEGRATION_TESTING,
PLONEAPPTOOLBARDX_INTEGRATION_TESTING
)
from plone.app.testing import TEST_USER_ID
from plone.app.testing import TEST_USER_NAME
from plone.app.testing import login
from plone.app.testing import setRoles

from zope.publisher.browser import TestRequest
from plone.uuid.interfaces import IUUID
import unittest
from plone.protect.authenticator import createToken
import json
from DateTime import DateTime
from Products.CMFCore.utils import getToolByName


class BaseTest(unittest.TestCase):

def setUp(self):
self.portal = self.layer['portal']
login(self.portal, TEST_USER_NAME)
setRoles(self.portal, TEST_USER_ID, ['Manager'])
self.portal.invokeFactory('Document', id="page", title="page")
self.portal.page.reindexObject()
self.request = TestRequest(
environ={
'HTTP_ACCEPT_LANGUAGE': 'en',
'REQUEST_METHOD': 'POST'
},
form={
'selection': '["' + IUUID(self.portal.page) + '"]',
'_authenticator': createToken(),
'folder': '/'
}
)
self.request.REQUEST_METHOD = 'POST'
self.userList = json.dumps([{
'id': 'one'
}, {
'id': 'two'
}])


class PropertiesDXTest(BaseTest):

layer = PLONEAPPTOOLBARDX_INTEGRATION_TESTING

def testEffective(self):
from plone.app.toolbar.browser.folder import PropertiesAction
self.request.form['effectiveDate'] = '1999/01/01'
self.request.form['effectiveTime'] = '09:00'
view = PropertiesAction(self.portal.page, self.request)
view()
self.assertEquals(self.portal.page.effective,
DateTime('1999/01/01 09:00'))

def testExpires(self):
from plone.app.toolbar.browser.folder import PropertiesAction
self.request.form['expirationDate'] = '1999/01/01'
self.request.form['expirationTime'] = '09:00'
view = PropertiesAction(self.portal.page, self.request)
view()
self.assertEquals(self.portal.page.expires,
DateTime('1999/01/01 09:00'))

def testSetDexterityExcludeFromNav(self):
from plone.app.toolbar.browser.folder import PropertiesAction
self.request.form['exclude_from_nav'] = 'yes'
view = PropertiesAction(self.portal.page, self.request)
view()
self.assertEquals(self.portal.page.exclude_from_nav, True)

def testRights(self):
from plone.app.toolbar.browser.folder import PropertiesAction
self.request.form['copyright'] = 'foobar'
view = PropertiesAction(self.portal.page, self.request)
view()
self.assertEquals(self.portal.page.rights, 'foobar')

def testContributors(self):
from plone.app.toolbar.browser.folder import PropertiesAction
self.request.form['contributors'] = self.userList
view = PropertiesAction(self.portal.page, self.request)
view()
self.assertEquals(self.portal.page.contributors, ('one', 'two'))

def testCreators(self):
from plone.app.toolbar.browser.folder import PropertiesAction
self.request.form['creators'] = self.userList
view = PropertiesAction(self.portal.page, self.request)
view()
self.assertEquals(
self.portal.page.creators,
('one', 'two', 'test_user_1_')
)


class PropertiesArchetypesTest(BaseTest):

layer = PLONEAPPTOOLBAR_INTEGRATION_TESTING

def testExcludeFromNav(self):
from plone.app.toolbar.browser.folder import PropertiesAction
self.request.form['exclude_from_nav'] = 'yes'
view = PropertiesAction(self.portal.page, self.request)
view()
self.assertEquals(self.portal.page.getExcludeFromNav(), True)

def testEffective(self):
from plone.app.toolbar.browser.folder import PropertiesAction
self.request.form['effectiveDate'] = '1999/01/01'
self.request.form['effectiveTime'] = '09:00'
view = PropertiesAction(self.portal.page, self.request)
view()
self.assertEquals(
DateTime(self.portal.page.EffectiveDate()).toZone('UTC'),
DateTime('1999/01/01 09:00').toZone('UTC'))

def testExpires(self):
from plone.app.toolbar.browser.folder import PropertiesAction
self.request.form['expirationDate'] = '1999/01/01'
self.request.form['expirationTime'] = '09:00'
view = PropertiesAction(self.portal.page, self.request)
view()
self.assertEquals(
DateTime(self.portal.page.ExpirationDate()).toZone('UTC'),
DateTime('1999/01/01 09:00').toZone('UTC'))

def testRights(self):
from plone.app.toolbar.browser.folder import PropertiesAction
self.request.form['copyright'] = 'foobar'
view = PropertiesAction(self.portal.page, self.request)
view()
self.assertEquals(self.portal.page.Rights(), 'foobar')

def testContributors(self):
from plone.app.toolbar.browser.folder import PropertiesAction
self.request.form['contributors'] = self.userList
view = PropertiesAction(self.portal.page, self.request)
view()
self.assertEquals(self.portal.page.Contributors(), ('one', 'two'))

def testCreators(self):
from plone.app.toolbar.browser.folder import PropertiesAction
self.request.form['creators'] = self.userList
view = PropertiesAction(self.portal.page, self.request)
view()
self.assertEquals(self.portal.page.Creators(), ('one', 'two'))


class WorkflowTest(BaseTest):

layer = PLONEAPPTOOLBAR_INTEGRATION_TESTING

def testStateChange(self):
from plone.app.toolbar.browser.folder import WorkflowAction
self.request.form['transition'] = 'publish'
view = WorkflowAction(self.portal.page, self.request)
view()
workflowTool = getToolByName(self.portal, "portal_workflow")
self.assertEquals(
workflowTool.getInfoFor(self.portal.page, 'review_state'),
'published')
1 change: 1 addition & 0 deletions setup.py
Expand Up @@ -55,6 +55,7 @@
'plone.app.testing',
'plone.testing',
'zope.configuration',
'plone.app.contenttypes'
],
},
entry_points="""
Expand Down

0 comments on commit a0a949c

Please sign in to comment.