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

Commit

Permalink
Merge a0a949c into 3c795b5
Browse files Browse the repository at this point in the history
  • Loading branch information
vangheem committed Jan 31, 2014
2 parents 3c795b5 + a0a949c commit edc9bca
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
'plone.app.testing',
'plone.testing',
'zope.configuration',
'plone.app.contenttypes'
],
},
entry_points="""
Expand Down

0 comments on commit edc9bca

Please sign in to comment.