Skip to content

Commit

Permalink
add more tests
Browse files Browse the repository at this point in the history
  • Loading branch information
vangheem committed Jul 15, 2015
1 parent 642f465 commit 1e12b18
Show file tree
Hide file tree
Showing 10 changed files with 117 additions and 19 deletions.
2 changes: 1 addition & 1 deletion plone/app/iterate/browser/info.py
Expand Up @@ -80,7 +80,7 @@ def creator_name(self):
def properties(self):
ref = self._getReference()
if ref:
return self.policy.getProperties(ref)
return self.policy.getProperties(ref, default={})
else:
return {}

Expand Down
2 changes: 1 addition & 1 deletion plone/app/iterate/browser/info_baseline.pt
Expand Up @@ -6,7 +6,7 @@

<strong i18n:translate="">Warning</strong>
<tal:block i18n:translate="working_copy_info">
This item is being edited beingy
This item is being edited by
<a i18n:name="creator"
tal:attributes="href view/creator_url"
tal:omit-tag="not: view/creator_url"
Expand Down
7 changes: 5 additions & 2 deletions plone/app/iterate/dexterity/policy.py
Expand Up @@ -56,5 +56,8 @@ def getBaseline(self):
def getWorkingCopy(self):
return get_working_copy(self.context)

def getProperties(self, obj):
return get_checkout_relation(obj).iterate_properties
def getProperties(self, obj, default=None):
try:
return get_checkout_relation(obj).iterate_properties
except AttributeError:
return default
2 changes: 1 addition & 1 deletion plone/app/iterate/permissions.py
Expand Up @@ -22,7 +22,7 @@

from Products.CMFCore.permissions import setDefaultRoles

CheckinPermission = "iterate : Check in content"
CheckinPermission = "iterate : Check in content"
CheckoutPermission = "iterate : Check out content"

DEFAULT_ROLES = ('Manager', 'Owner', 'Site Administrator', 'Editor')
Expand Down
9 changes: 6 additions & 3 deletions plone/app/iterate/policy.py
Expand Up @@ -133,7 +133,10 @@ def getBaseline(self):
return refs[0]

def getWorkingCopy(self):
return self.context.getBRefs(WorkingCopyRelation.relationship)
if IReferenceable.providedBy(self.context):
refs = self.context.getBRefs(WorkingCopyRelation.relationship)
if refs:
return refs[0]

def getProperties(self, obj):
return get_storage(self, obj)
def getProperties(self, obj, default=None):
return get_storage(obj, default=default)
2 changes: 2 additions & 0 deletions plone/app/iterate/testing.py
Expand Up @@ -112,11 +112,13 @@ def setUpPloneSite(self, portal):

class DexPloneAppIterateLayer(PloneAppContenttypes):
def setUpZope(self, app, configurationContext):
super(DexPloneAppIterateLayer, self).setUpZope(app, configurationContext)
import plone.app.iterate
self.loadZCML(package=plone.app.iterate)
z2.installProduct(app, 'plone.app.iterate')

def setUpPloneSite(self, portal):
super(DexPloneAppIterateLayer, self).setUpPloneSite(portal)
applyProfile(portal, 'plone.app.iterate:plone.app.iterate')


Expand Down
2 changes: 0 additions & 2 deletions plone/app/iterate/tests/dexterity.rst
Expand Up @@ -22,10 +22,8 @@ Aquisition wrapper you get a KeyError from zope.intid, originating from five.int
>>> browser.open(portal_url + "/folder_factories")
>>> browser.getControl("Folder").click()
>>> browser.getControl("Add").click()
>>> import pdb; pdb.set_trace()
>>> browser.getControl(name="form.widgets.IDublinCore.title").value = "My Folder"
>>> browser.getControl(name="form.buttons.save").click()
>>> import pdb; pdb.set_trace()
>>> browser.url
'http://nohost/plone/my-folder/view'

Expand Down
12 changes: 4 additions & 8 deletions plone/app/iterate/tests/test_annotations.py
Expand Up @@ -2,18 +2,14 @@

import unittest

from zope.annotation.interfaces import IAnnotatable
from zope.annotation.interfaces import IAnnotations

from zope.component import getAdapters

from plone.app.iterate.interfaces import ICheckinCheckoutPolicy
from plone.app.iterate.interfaces import IWCContainerLocator

from plone.app.iterate.testing import PLONEAPPITERATEDEX_INTEGRATION_TESTING
from plone.app.testing import TEST_USER_ID
from plone.app.testing import setRoles

from plone.app.iterate.testing import PLONEAPPITERATEDEX_INTEGRATION_TESTING
from zope.annotation.interfaces import IAnnotatable
from zope.annotation.interfaces import IAnnotations
from zope.component import getAdapters


class AnnotationsTestCase(unittest.TestCase):
Expand Down
94 changes: 94 additions & 0 deletions plone/app/iterate/tests/test_interfaces.py
@@ -0,0 +1,94 @@
from plone.app.iterate.interfaces import IBaseline
from plone.app.iterate.interfaces import ICheckinCheckoutPolicy
from plone.app.iterate.interfaces import IIterateAware
from plone.app.iterate.interfaces import IWorkingCopy
from plone.app.iterate.testing import PLONEAPPITERATEDEX_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 logout
from plone.app.testing import setRoles
from plone.dexterity.utils import createContentInContainer
from unittest2 import TestCase


class TestObjectsProvideCorrectInterfaces(TestCase):
"""Since p.a.iterate replaces the baseline on checkin with the working copy
but p.a.stagingbehavior just copies the values, the provided interfaces
may be wrong after checkin.
For making sure that provided interfaces are correct in every state we
test it here.
See: https://dev.plone.org/ticket/13163
"""

layer = PLONEAPPITERATEDEX_INTEGRATION_TESTING

def setUp(self):
super(TestObjectsProvideCorrectInterfaces, self).setUp()

self.portal = self.layer['portal']
setRoles(self.portal, TEST_USER_ID, ['Manager'])
login(self.portal, TEST_USER_NAME)

# create a folder where everything of this test suite should happen
self.assertNotIn('test-folder', self.portal.objectIds())
self.folder = self.portal.get(
self.portal.invokeFactory('Folder', 'test-folder'))

self.obj = createContentInContainer(self.folder, 'Document')

def tearDown(self):
self.portal.manage_delObjects([self.folder.id])
logout()
setRoles(self.portal, TEST_USER_ID, ['Member'])
super(TestObjectsProvideCorrectInterfaces, self).tearDown()

def do_checkout(self):
policy = ICheckinCheckoutPolicy(self.obj)
working_copy = policy.checkout(self.folder)
return working_copy

def do_cancel(self, working_copy):
policy = ICheckinCheckoutPolicy(working_copy)
policy.cancelCheckout()

def do_checkin(self, working_copy):
policy = ICheckinCheckoutPolicy(working_copy)
policy.checkin('')

def test_before_checkout(self):
self.assertTrue(self.obj)
self.assertTrue(IIterateAware.providedBy(self.obj))
self.assertFalse(IBaseline.providedBy(self.obj))
self.assertFalse(IWorkingCopy.providedBy(self.obj))

def test_after_checkout(self):
working_copy = self.do_checkout()
self.assertTrue(working_copy)
self.assertTrue(IIterateAware.providedBy(working_copy))
self.assertFalse(IBaseline.providedBy(working_copy))
self.assertTrue(IWorkingCopy.providedBy(working_copy))

self.assertTrue(IIterateAware.providedBy(self.obj))
self.assertTrue(IBaseline.providedBy(self.obj))
self.assertFalse(IWorkingCopy.providedBy(self.obj))

def test_after_cancel_checkout(self):
working_copy = self.do_checkout()
self.assertTrue(working_copy)

self.do_cancel(working_copy)
self.assertTrue(IIterateAware.providedBy(self.obj))
self.assertFalse(IBaseline.providedBy(self.obj))
self.assertFalse(IWorkingCopy.providedBy(self.obj))

def test_after_checkin(self):
working_copy = self.do_checkout()
self.assertTrue(working_copy)

self.do_checkin(working_copy)
self.assertTrue(IIterateAware.providedBy(self.obj))
self.assertFalse(IBaseline.providedBy(self.obj))
self.assertFalse(IWorkingCopy.providedBy(self.obj))
4 changes: 3 additions & 1 deletion plone/app/iterate/util.py
Expand Up @@ -25,9 +25,11 @@
from interfaces import annotation_key
from Products.CMFCore.utils import getToolByName

def get_storage(context):
def get_storage(context, default=None):
annotations = IAnnotations(context)
if annotation_key not in annotations:
if default is not None:
return default
annotations[annotation_key] = PersistentDict()
return annotations[annotation_key]

Expand Down

0 comments on commit 1e12b18

Please sign in to comment.