Skip to content

Commit

Permalink
Merge pull request #5 from plone/thet-zope4
Browse files Browse the repository at this point in the history
Zope4
  • Loading branch information
pbauer committed Feb 3, 2016
2 parents 2cb96c2 + 1bc875e commit e2a7baa
Show file tree
Hide file tree
Showing 5 changed files with 108 additions and 172 deletions.
3 changes: 3 additions & 0 deletions CHANGES.rst
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@ New:

Fixes:

- Refactor doctest to an integration test and skip it for Zope 4 due to isolation problems.
[pbauer]

- Changed i18n_domain to "plone"
[claytonc]

Expand Down
7 changes: 1 addition & 6 deletions plone/app/lockingbehavior/testing.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
from plone.app.testing import PLONE_FIXTURE
from plone.app.testing import IntegrationTesting
from plone.app.testing import FunctionalTesting
from zope.configuration import xmlconfig


class LockingLayer(PloneSandboxLayer):
Expand All @@ -12,11 +11,7 @@ class LockingLayer(PloneSandboxLayer):
def setUpZope(self, app, configurationContext):
# Load ZCML
import plone.app.lockingbehavior
xmlconfig.file('configure.zcml', plone.app.lockingbehavior,
context=configurationContext)

def setUpPloneSite(self, portal):
pass
self.loadZCML(package=plone.app.lockingbehavior)


LOCKING_FIXTURE = LockingLayer()
Expand Down
152 changes: 0 additions & 152 deletions plone/app/lockingbehavior/tests/locking.txt

This file was deleted.

14 changes: 0 additions & 14 deletions plone/app/lockingbehavior/tests/test_doctests.py

This file was deleted.

104 changes: 104 additions & 0 deletions plone/app/lockingbehavior/tests/test_locking.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# -*- coding: utf-8 -*-
import unittest
from pkg_resources import get_distribution
from plone.app.lockingbehavior.testing import LOCKING_INTEGRATION_TESTING
from plone.app.testing import SITE_OWNER_NAME
from plone.app.testing import SITE_OWNER_PASSWORD
from plone.app.testing import TEST_USER_NAME
from plone.app.testing import TEST_USER_ID
from plone.app.testing import TEST_USER_PASSWORD
from plone.app.testing import setRoles
from plone.dexterity.fti import DexterityFTI
from plone.testing import z2
import transaction

has_zope4 = get_distribution('Zope2').version.startswith('4')


class TestLockingBehavior(unittest.TestCase):

layer = LOCKING_INTEGRATION_TESTING

def setUp(self):
# add IShortName behavior to Page
self.portal = self.layer['portal']
self.request = self.layer['request']
setRoles(self.portal, TEST_USER_ID, ['Manager'])

fti = DexterityFTI('LockableType',
factory='LockableType')
fti.behaviors = ('plone.app.lockingbehavior.behaviors.ILocking', )
fti.global_allow = True
self.portal.portal_types._setObject('LockableType', fti)
transaction.commit()

# prepare two browsers
self.foo_browser = z2.Browser(self.layer['app'])
self.foo_browser.addHeader(
'Authorization', 'Basic %s:%s'
% (SITE_OWNER_NAME, SITE_OWNER_PASSWORD,)
)
self.foo_browser.open('http://nohost/plone')

self.bar_browser = z2.Browser(self.layer['app'])
self.bar_browser.addHeader(
'Authorization', 'Basic %s:%s'
% (TEST_USER_NAME, TEST_USER_PASSWORD,)
)
self.bar_browser.open('http://nohost/plone')

@unittest.skipIf(has_zope4, 'Test-isolation issues with Zope4')
def test_lockablebehavior(self):
# Add a lockable item
self.portal.invokeFactory(
'LockableType', id='lockabletype', title='Lockable Type')
obj = self.portal['lockabletype']
transaction.commit()

# Edit it with User1
self.foo_browser.open(obj.absolute_url())
self.assertEqual(
self.foo_browser.url, 'http://nohost/plone/lockabletype')
self.foo_browser.getLink('Edit').click()

# Is locked for User2
self.bar_browser.open(obj.absolute_url())
self.assertIn('This item was locked', self.bar_browser.contents)

# Clicking Edit will redirect to view for User2
self.bar_browser.getLink('Edit').click()
self.assertEqual(
self.bar_browser.url, 'http://nohost/plone/lockabletype/@@view')
self.assertIn('This item was locked', self.bar_browser.contents)

# Unlock it
self.foo_browser.getControl('Save').click()

# Is now unlocked for User2
self.bar_browser.open(obj.absolute_url())
self.assertNotIn('This item was locked', self.bar_browser.contents)

# Edit it with User2
self.bar_browser.getLink('Edit').click()
self.assertIn(
'http://nohost/plone/lockabletype/edit', self.bar_browser.url)
self.assertNotIn('This item was locked', self.bar_browser.contents)

# Is locked for User1
self.foo_browser.open(obj.absolute_url())
self.assertIn('This item was locked', self.foo_browser.contents)

# Releasing the lock by closing the window by User1 does not work
self.bar_browser.open(obj.absolute_url())

# The obj is still locked
self.foo_browser.open(obj.absolute_url())
self.assertIn('This item was locked', self.foo_browser.contents)

# Instead you need to release it by saving
self.bar_browser.getLink('Edit').click()
self.bar_browser.getControl('Save').click()

# Now it is unlocked
self.foo_browser.open(obj.absolute_url())
self.assertNotIn('This item was locked', self.foo_browser.contents)

0 comments on commit e2a7baa

Please sign in to comment.