plone.restapi/unify-expired-and-excluded-items-handling: Add tests for locking
Thomas Buchberger <jenkins-z4DKO/[email protected]> Sat, 29 Jul 2017 16:32:02 -0700 (PDT)
| Newsgroups | gmane.comp.web.zope.plone.cvs |
|---|---|
| Message-ID | <[email protected]> |
Repository: plone.restapi Branch: refs/heads/unify-expired-and-excluded-items-handling Date: 2017-07-27T10:02:23+02:00 Author: Thomas Buchberger (buchi) <t.buchberger-/8aE7x569Db/[email protected]> Commit: https://github.com/plone/plone.restapi/commit/82535ea13dcb5508e1420b9eab7c295bd9ebe3ae Add tests for locking Files changed: A src/plone/restapi/tests/test_locking.py diff --git a/src/plone/restapi/tests/test_locking.py b/src/plone/restapi/tests/test_locking.py new file mode 100644 index 00000000..b2d9cd14 --- /dev/null +++ b/src/plone/restapi/tests/test_locking.py @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +from plone.app.testing import SITE_OWNER_NAME +from plone.app.testing import SITE_OWNER_PASSWORD +from plone.app.testing import login +from plone.locking.interfaces import ITTWLockable +from plone.restapi.testing import PLONE_RESTAPI_DX_FUNCTIONAL_TESTING +from plone.restapi.testing import RelativeSession +from zope.interface import alsoProvides +from plone.locking.interfaces import ILockable +from plone.locking.interfaces import INonStealableLock + + +import unittest +import transaction + + +class TestLocking(unittest.TestCase): + + layer = PLONE_RESTAPI_DX_FUNCTIONAL_TESTING + + def setUp(self): + self.portal = self.layer['portal'] + self.request = self.layer['request'] + login(self.portal, SITE_OWNER_NAME) + self.doc = self.portal[self.portal.invokeFactory( + 'Document', id='doc1', title='My Document')] + alsoProvides(self.doc, ITTWLockable) + + self.api_session = RelativeSession(self.doc.absolute_url()) + self.api_session.headers.update({'Accept': 'application/json'}) + self.api_session.auth = (SITE_OWNER_NAME, SITE_OWNER_PASSWORD) + + transaction.commit() + + def test_lock_object(self): + response = self.api_session.post('/@lock',) + transaction.commit() + + self.assertEqual(response.status_code, 200) + self.assertTrue(ILockable(self.doc).locked()) + + def test_lock_object_non_stealable(self): + response = self.api_session.post('/@lock', json={'stealable': False}) + transaction.commit() + + self.assertEqual(response.status_code, 200) + self.assertTrue(INonStealableLock.providedBy(self.doc)) + + def test_lock_object_with_custom_timeout(self): + response = self.api_session.post('/@lock', json={'timeout': 86400}) + transaction.commit() + + self.assertEqual(response.status_code, 200) + self.assertEqual(self.doc.wl_lockValues()[0].getTimeout(), 86400) + + def test_unlock_object(self): + lockable = ILockable(self.doc) + lockable.lock() + transaction.commit() + response = self.api_session.post('/@unlock') + transaction.commit() + + self.assertEqual(response.status_code, 200) + self.assertFalse(lockable.locked()) + + def test_refresh_lock(self): + lockable = ILockable(self.doc) + lockable.lock() + modified = self.doc.wl_lockValues()[0].getModifiedTime() + transaction.commit() + response = self.api_session.post('/@refresh-lock') + transaction.commit() + + self.assertEqual(response.status_code, 200) + self.assertTrue( + self.doc.wl_lockValues()[0].getModifiedTime() > modified) + + def test_lock_info_for_locked_object(self): + lockable = ILockable(self.doc) + lockable.lock() + transaction.commit() + response = self.api_session.get('/@lock') + + self.assertEqual(response.status_code, 200) + self.assertTrue(response.json()['locked']) + + def test_lock_info_for_unlocked_object(self): + response = self.api_session.get('/@lock') + + self.assertEqual(response.status_code, 200) + self.assertFalse(response.json()['locked']) ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot