Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Zope4 #5

Merged
merged 2 commits into from
Feb 3, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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)