[Testbot] Plone 5.0 - Python 2.7 - Build # 2652 - Regression! - 2 failure(s)

jenkins at plone.org jenkins at plone.org
Sun Jun 22 16:50:32 UTC 2014


-------------------------------------------------------------------------------
Plone 5.0 - Python 2.7 - Build # 2652 - Failure!
-------------------------------------------------------------------------------

http://jenkins.plone.org/job/plone-5.0-python-2.7/2652/


-------------------------------------------------------------------------------
CHANGES
-------------------------------------------------------------------------------

Repository: plone.app.versioningbehavior
Branch: refs/heads/master
Date: 2014-06-22T14:33:30+02:00
Author: Jonas Baumann (jone) <jone at jone.ch>
Commit: https://github.com/plone/plone.app.versioningbehavior/commit/ff8d81ad2e754ebb956b312f1730d6f67af061c6

Refactor test_functional to use plone.app.testing.

Files changed:
M plone/app/versioningbehavior/testing.py
M plone/app/versioningbehavior/tests/test_functional.py
M setup.py

diff --git a/plone/app/versioningbehavior/testing.py b/plone/app/versioningbehavior/testing.py
index 88abacb..380f5a6 100644
--- a/plone/app/versioningbehavior/testing.py
+++ b/plone/app/versioningbehavior/testing.py
@@ -2,9 +2,14 @@
 
 from collective.testcaselayer import common
 from collective.testcaselayer import ptc
+from plone.app.testing import applyProfile
+from plone.app.testing import FunctionalTesting
+from plone.app.testing import PLONE_FIXTURE
+from plone.app.testing import PloneSandboxLayer
 from plone.dexterity.fti import DexterityFTI
 from Products.CMFCore.utils import getToolByName
 from Products.CMFDiffTool.TextDiff import TextDiff
+from zope.configuration import xmlconfig
 import plone.protect.auto
 
 
@@ -12,6 +17,65 @@
 DEFAULT_POLICIES = ('at_edit_autoversion', 'version_on_revert',)
 
 
+class VersioningLayer(PloneSandboxLayer):
+    defaultBases = (PLONE_FIXTURE,)
+
+    def setUpZope(self, app, configurationContext):
+        import plone.app.versioningbehavior
+        xmlconfig.file('configure.zcml', plone.app.versioningbehavior,
+                       context=configurationContext)
+
+    def setUpPloneSite(self, portal):
+        applyProfile(portal, 'plone.app.versioningbehavior:default')
+        self.registerVersionedDocumentFTI(portal)
+
+    def registerVersionedDocumentFTI(self, portal):
+        types_tool = getToolByName(portal, 'portal_types')
+        fti = DexterityFTI(
+            TEST_CONTENT_TYPE_ID,
+            global_allow=True,
+            behaviors=(
+                'plone.app.versioningbehavior.behaviors.IVersionable',
+                'plone.app.dexterity.behaviors.metadata.IBasic',
+                ),
+            model_source='''
+                <model xmlns="http://namespaces.plone.org/supermodel/schema">
+                    <schema>
+                        <field name="text" type="zope.schema.Text">
+                            <title>Text</title>
+                            <required>False</required>
+                        </field>
+                    </schema>
+                </model>
+                ''')
+        types_tool._setObject(TEST_CONTENT_TYPE_ID, fti)
+
+        diff_tool = getToolByName(portal, 'portal_diff')
+        diff_tool.setDiffForPortalType(
+            TEST_CONTENT_TYPE_ID, {'text': TextDiff.meta_type})
+
+        portal_repository = getToolByName(portal, 'portal_repository')
+        portal_repository.setVersionableContentTypes(
+            list(portal_repository.getVersionableContentTypes()) +
+            [TEST_CONTENT_TYPE_ID])
+        for policy_id in DEFAULT_POLICIES:
+            portal_repository.addPolicyForContentType(
+                TEST_CONTENT_TYPE_ID, policy_id)
+
+    def testSetUp(self):
+        self.CSRF_DISABLED_ORIGINAL = plone.protect.auto.CSRF_DISABLED
+        plone.protect.auto.CSRF_DISABLED = True
+
+    def testTearDown(self):
+        plone.protect.auto.CSRF_DISABLED = self.CSRF_DISABLED_ORIGINAL
+
+
+VERSIONING_FIXTURE = VersioningLayer()
+VERSIONING_FUNCTIONAL_TESTING = FunctionalTesting(
+    bases=(VERSIONING_FIXTURE,),
+    name="plone.app.versioningbehavior:functional")
+
+
 class PackageLayer(ptc.BasePTCLayer):
 
     def afterSetUp(self):
diff --git a/plone/app/versioningbehavior/tests/test_functional.py b/plone/app/versioningbehavior/tests/test_functional.py
index 70a7e56..fabce56 100644
--- a/plone/app/versioningbehavior/tests/test_functional.py
+++ b/plone/app/versioningbehavior/tests/test_functional.py
@@ -1,21 +1,30 @@
 #coding=utf8
-from plone.app.versioningbehavior import testing
-from plone.app.versioningbehavior.testing import (
-    TEST_CONTENT_TYPE_ID)
-from mechanize import LinkNotFoundError
-from Products.Five.testbrowser import Browser
-from Products.PloneTestCase import PloneTestCase
 
+from plone.app.testing import setRoles
+from plone.app.testing import TEST_USER_ID
+from plone.app.testing import TEST_USER_NAME
+from plone.app.testing import TEST_USER_PASSWORD
+from plone.app.versioningbehavior.testing import TEST_CONTENT_TYPE_ID
+from plone.app.versioningbehavior.testing import VERSIONING_FUNCTIONAL_TESTING
+from plone.testing.z2 import Browser
+from unittest2 import TestCase
+import transaction
 
-class FunctionalTestCase(PloneTestCase.FunctionalTestCase):
 
-    layer = testing.package_layer
+class FunctionalTestCase(TestCase):
 
-    def afterSetUp(self):
+    layer = VERSIONING_FUNCTIONAL_TESTING
+
+    def setUp(self):
+        self.portal = self.layer['portal']
         self.portal_url = self.portal.absolute_url()
-        self.browser = Browser()
+
+        self.browser = Browser(self.layer['app'])
         self.browser.handleErrors = False
-        self.setRoles(['Manager', 'Member'], PloneTestCase.default_user)
+        self.browser.addHeader('Authorization', 'Basic %s:%s' % (
+                TEST_USER_NAME, TEST_USER_PASSWORD,))
+
+        setRoles(self.portal, TEST_USER_ID, ['Manager', 'Member'])
         self.portal.invokeFactory(
             type_name=TEST_CONTENT_TYPE_ID,
             id='obj1',
@@ -24,31 +33,9 @@ def afterSetUp(self):
             text=u'Object 1 some footext.',
         )
         self.obj1 = self.portal['obj1']
-        self.test_content_type_fti = self.layer.test_content_type_fti
-
-    def _dump_to_file(self):
-        f = open('/tmp/a.html', 'w')
-        f.write(self.browser.contents)
-        f.close()
-
-    def _login_browser(self, userid, password):
-        self.browser.open(self.portal_url + '/login_form')
-        self.browser.getControl(name='__ac_name').value = userid
-        self.browser.getControl(name='__ac_password').value = password
-        self.browser.getControl(name='submit').click()
-
-    def assertLinkNotExists(self, *args, **kwargs):
-        self.assertRaises(
-            LinkNotFoundError, self.browser.getLink, *args, **kwargs)
-
-    def assertControlNotExists(self, *args, **kwargs):
-        self.assertRaises(
-            LookupError, self.browser.getControl, *args, **kwargs)
+        transaction.commit()
 
     def test_content_core_view(self):
-        self._login_browser(
-            PloneTestCase.default_user, PloneTestCase.default_password)
-
         self.browser.open(self.obj1.absolute_url() + '/@@content-core')
 
         # Title and description are metadata, not in content-core.
@@ -57,9 +44,6 @@ def test_content_core_view(self):
         self.assertIn(self.obj1.text, self.browser.contents)
 
     def test_version_view(self):
-        self._login_browser(
-            PloneTestCase.default_user, PloneTestCase.default_password)
-
         self.browser.open(
             self.obj1.absolute_url() + '/@@version-view?version_id=0')
 
@@ -75,8 +59,6 @@ def test_versions_history_form_should_work_with_dexterity_content(self):
         new_text = 'Some other text for object 1.'
         new_title = 'My special new title for object 1'
 
-        self._login_browser(
-            PloneTestCase.default_user, PloneTestCase.default_password)
         self.browser.open(self.obj1.absolute_url() + '/edit')
         self.browser.getControl(label='Title').value = new_title
         self.browser.getControl(label='Text').value = new_text
@@ -87,34 +69,6 @@ def test_versions_history_form_should_work_with_dexterity_content(self):
         self._assert_versions_history_form(
             1, self.obj1.getId(), new_title, new_text)
 
-    def test_versions_history_form_should_work_with_archetypes_content(self):
-        old_text = self.obj1.text
-        old_title = self.obj1.title
-
-        new_text = 'Some other text for page 1.'
-        new_title = 'My special new title for page 1'
-
-        self.portal.invokeFactory(
-            type_name='Document',
-            id='page1',
-            title=old_title,
-            text=old_text,
-        )
-        page = self.portal['page1']
-
-        self._login_browser(
-            PloneTestCase.default_user, PloneTestCase.default_password)
-
-        self.browser.open(page.absolute_url() + '/edit')
-        self.browser.getControl(label='Title').value = new_title
-        self.browser.getControl(label='Body Text').value = new_text
-        self.browser.getControl(name='form.button.save').click()
-
-        self._assert_versions_history_form(
-            0, page.getId(), old_title, old_text)
-        self._assert_versions_history_form(
-            1, page.getId(), new_title, new_text)
-
     def _assert_versions_history_form(self, version_id, obj_id, title, text):
         self.browser.open(
             '%s/%s/versions_history_form?version_id=%s'
diff --git a/setup.py b/setup.py
index 9e3aa71..aa9590c 100644
--- a/setup.py
+++ b/setup.py
@@ -4,6 +4,7 @@
 version = '1.1.4.dev0'
 
 tests_require = [
+    'plone.app.testing',
     'Products.CMFDiffTool',
     'Products.CMFEditions',
     'Products.CMFPlone',


Repository: plone.app.versioningbehavior
Branch: refs/heads/master
Date: 2014-06-22T14:33:30+02:00
Author: Jonas Baumann (jone) <jone at jone.ch>
Commit: https://github.com/plone/plone.app.versioningbehavior/commit/895749e72c9254efe0a689184c34b61d5bc7872a

Refactor test_install to use plone.app.testing.

Files changed:
M plone/app/versioningbehavior/tests/test_install.py

diff --git a/plone/app/versioningbehavior/tests/test_install.py b/plone/app/versioningbehavior/tests/test_install.py
index 18794c8..d5ea62e 100755
--- a/plone/app/versioningbehavior/tests/test_install.py
+++ b/plone/app/versioningbehavior/tests/test_install.py
@@ -1,14 +1,14 @@
-from plone.app.versioningbehavior import testing
+from plone.app.versioningbehavior.testing import VERSIONING_FUNCTIONAL_TESTING
 from Products.CMFCore.utils import getToolByName
+from unittest2 import TestCase
 
-from Products.PloneTestCase import PloneTestCase
 
+class InstallTestCase(TestCase):
 
-class InstallTestCase(PloneTestCase.FunctionalTestCase):
+    layer = VERSIONING_FUNCTIONAL_TESTING
 
-    layer = testing.package_layer
-
-    def afterSetUp(self):
+    def setUp(self):
+        self.portal = self.layer['portal']
         self.portal_skins = getToolByName(self.portal, 'portal_skins')
 
     def test_should_override_versions_history_form_skin_template(self):


Repository: plone.app.versioningbehavior
Branch: refs/heads/master
Date: 2014-06-22T14:33:30+02:00
Author: Jonas Baumann (jone) <jone at jone.ch>
Commit: https://github.com/plone/plone.app.versioningbehavior/commit/547c517be3e5515f2cfccd52b0b5a3b58202d0dc

Refactor doctests to use plone.app.testing.

Files changed:
M plone/app/versioningbehavior/tests/doctest_behavior.txt
M plone/app/versioningbehavior/tests/tests.py

diff --git a/plone/app/versioningbehavior/tests/doctest_behavior.txt b/plone/app/versioningbehavior/tests/doctest_behavior.txt
index 697ba48..e6f397d 100644
--- a/plone/app/versioningbehavior/tests/doctest_behavior.txt
+++ b/plone/app/versioningbehavior/tests/doctest_behavior.txt
@@ -1,4 +1,16 @@
 
+    >>> from plone.app.testing import TEST_USER_ID
+    >>> from plone.app.testing import TEST_USER_NAME
+    >>> from plone.app.testing import TEST_USER_PASSWORD
+    >>> from plone.app.testing import setRoles
+    >>> from plone.testing.z2 import Browser
+    >>> import transaction
+
+    >>> portal = layer['portal']
+    >>> app = layer['app']
+    >>> setRoles(portal, TEST_USER_ID, ['Manager'])
+
+
 Some Tests
 ----------
 
@@ -12,7 +24,7 @@ in your dexterity content type::
     ...         'plone.app.dexterity.behaviors.metadata.IBasic',
     ...         'plone.app.versioningbehavior.behaviors.IVersionable',
     ... )
-    >>> self.portal.portal_types._setObject('TestingType', fti)
+    >>> portal.portal_types._setObject('TestingType', fti)
     'TestingType'
     >>> schema = fti.lookupSchema()
 
@@ -29,15 +41,13 @@ For this test we set this configuration manually::
     >>> pr.setVersionableContentTypes(versionable_types)
     >>> for policy_id in ('at_edit_autoversion', 'version_on_revert'):
     ...     pr.addPolicyForContentType('TestingType', policy_id)
-
+    >>> transaction.commit()
 
 Create a new Browser and connect it::
 
-    >>> from Products.Five.testbrowser import Browser
-    >>> browser = Browser()
+    >>> browser = Browser(app)
     >>> browser.handleErrors = False
-    >>> self.app.acl_users.userFolderAddUser('root', 'secret', ['Manager'], [])
-    >>> browser.addHeader('Authorization', 'Basic root:secret')
+    >>> browser.addHeader('Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD))
 
 
 Now we should be able to create a new TestingType-object::
@@ -64,7 +74,7 @@ The 'changeNote' field should not be visible in the view::
 We should be able to access the object, it should provide the marker
 interface ``plone.app.versioningbehavior.behaviors.IVersioningSupport``::
 
-    >>> obj = self.portal.get('testingtype')
+    >>> obj = portal.get('testingtype')
     >>> from plone.app.versioningbehavior.behaviors import IVersioningSupport
     >>> IVersioningSupport.providedBy(obj)
     True
@@ -83,8 +93,8 @@ After creating the object we wan't to create a new version by simply editing it:
 
 Now we should have at least one version::
 
-    >>> obj = self.portal.get('testingtype')
-    >>> pa = self.portal.portal_archivist
+    >>> obj = portal.get('testingtype')
+    >>> pa = portal.portal_archivist
     >>> history = pa.getHistoryMetadata(obj)
     >>> history.getLength(countPurged=False) > 0
     True
@@ -110,8 +120,8 @@ A freshly created object should have a initial version::
 
 Now we should have one - and only one - version::
 
-    >>> obj = self.portal.get('testingtype-1')
-    >>> pa = self.portal.portal_archivist
+    >>> obj = portal.get('testingtype-1')
+    >>> pa = portal.portal_archivist
     >>> history = pa.getHistoryMetadata(obj)
     >>> history.getLength(countPurged=False)
     1
@@ -130,7 +140,7 @@ It should also be possible to copy/paste an existing content::
     >>> browser.getLink('Copy').click()
     >>> browser.open('http://nohost/plone/')
     >>> browser.getLink('Paste').click()
-    >>> 'copy_of_testingtype' in self.portal.objectIds()
+    >>> 'copy_of_testingtype' in portal.objectIds()
     True
 
 
@@ -160,9 +170,10 @@ Create a container FTI::
     ...     behaviors = ('plone.app.dexterity.behaviors.metadata.IBasic',),
     ...     )
 
-    >>> self.portal.portal_types._setObject('DemoContainer', container_fti)
+    >>> portal.portal_types._setObject('DemoContainer', container_fti)
     'DemoContainer'
     >>> container_schema = fti.lookupSchema()
+    >>> transaction.commit()
 
 
 Create a container object::
@@ -187,10 +198,10 @@ Now we add a versioned object to the container::
 So let's see the version history. There should be one version with the comment
 "created a object"::
 
-    >>> obj = self.portal.get('democontainer').get('testingtype')
+    >>> obj = portal.get('democontainer').get('testingtype')
     >>> obj
     <Item at /plone/democontainer/testingtype>
-    >>> pa = self.portal.portal_archivist
+    >>> pa = portal.portal_archivist
     >>> history = pa.getHistoryMetadata(obj)
     >>> history.getLength(countPurged=False)
     1
@@ -214,11 +225,10 @@ Let's create a new versioned container FTI::
     ...         'plone.app.dexterity.behaviors.metadata.IBasic',
     ...         'plone.app.versioningbehavior.behaviors.IVersionable',
     ... )
-    >>> self.portal.portal_types._setObject('VersionedContainer', versioned_container_fti)
+    >>> portal.portal_types._setObject('VersionedContainer', versioned_container_fti)
     'VersionedContainer'
     >>> versioned_container_schema = versioned_container_fti.lookupSchema()
 
-
 Enable versioning for the new content type::
 
     >>> pr = getToolByName(portal, 'portal_repository')
@@ -227,6 +237,7 @@ Enable versioning for the new content type::
     >>> pr.setVersionableContentTypes(versionable_types)
     >>> for policy_id in ('at_edit_autoversion', 'version_on_revert'):
     ...     pr.addPolicyForContentType('VersionedContainer', policy_id)
+    >>> transaction.commit()
 
 Let's Create a versioned container object on the portal::
 
@@ -240,10 +251,10 @@ Let's Create a versioned container object on the portal::
 
 Do we have a initial version?
 
-    >>> obj = self.portal.get('versionedcontainer')
+    >>> obj = portal.get('versionedcontainer')
     >>> obj
     <Container at /plone/versionedcontainer>
-    >>> pa = self.portal.portal_archivist
+    >>> pa = portal.portal_archivist
     >>> history = pa.getHistoryMetadata(obj)
     >>> history.getLength(countPurged=False)
     1
@@ -268,11 +279,11 @@ Now we try to add another versioned container in the previously created versione
 
 So, we should have the initial version::
 
-    >>> parent = self.portal['versionedcontainer']
+    >>> parent = portal['versionedcontainer']
     >>> obj = parent['versionedcontainer']
     >>> obj
     <Container at /plone/versionedcontainer/versionedcontainer>
-    >>> pa = self.portal.portal_archivist
+    >>> pa = portal.portal_archivist
     >>> history = pa.getHistoryMetadata(obj)
     >>> history.getLength(countPurged=False)
     1
diff --git a/plone/app/versioningbehavior/tests/tests.py b/plone/app/versioningbehavior/tests/tests.py
index 0a15d50..9ae1591 100644
--- a/plone/app/versioningbehavior/tests/tests.py
+++ b/plone/app/versioningbehavior/tests/tests.py
@@ -1,17 +1,13 @@
+from plone.app.versioningbehavior.testing import VERSIONING_FUNCTIONAL_TESTING
+from plone.testing import layered
+import doctest
 import unittest
 
-from Testing import ZopeTestCase as ztc
-from Products.PloneTestCase import PloneTestCase as ptc
-from plone.app.versioningbehavior import testing
-
 
 def test_suite():
-    functional = ztc.FunctionalDocFileSuite(
-        'tests/doctest_behavior.txt',
-        package='plone.app.versioningbehavior',
-        test_class=ptc.FunctionalTestCase)
-    functional.layer = testing.package_layer
-    return unittest.TestSuite([functional])
-
-if __name__ == '__main__':
-    unittest.main(defaultTest='test_suite')
+    suite = unittest.TestSuite()
+    suite.addTests([
+            layered(doctest.DocFileSuite('doctest_behavior.txt'),
+                    layer=VERSIONING_FUNCTIONAL_TESTING),
+            ])
+    return suite


Repository: plone.app.versioningbehavior
Branch: refs/heads/master
Date: 2014-06-22T14:33:30+02:00
Author: Jonas Baumann (jone) <jone at jone.ch>
Commit: https://github.com/plone/plone.app.versioningbehavior/commit/84aee4f04040701bd2e0547236b936f96cc965d2

Drop Products.PloneTestCase and collective.testcaselayer.

Files changed:
M plone/app/versioningbehavior/testing.py
M setup.py

diff --git a/plone/app/versioningbehavior/testing.py b/plone/app/versioningbehavior/testing.py
index 380f5a6..1fa5a7e 100644
--- a/plone/app/versioningbehavior/testing.py
+++ b/plone/app/versioningbehavior/testing.py
@@ -1,7 +1,5 @@
 #coding=utf8
 
-from collective.testcaselayer import common
-from collective.testcaselayer import ptc
 from plone.app.testing import applyProfile
 from plone.app.testing import FunctionalTesting
 from plone.app.testing import PLONE_FIXTURE
@@ -74,66 +72,3 @@ def testTearDown(self):
 VERSIONING_FUNCTIONAL_TESTING = FunctionalTesting(
     bases=(VERSIONING_FIXTURE,),
     name="plone.app.versioningbehavior:functional")
-
-
-class PackageLayer(ptc.BasePTCLayer):
-
-    def afterSetUp(self):
-        import Products.CMFEditions
-        import plone.app.dexterity
-        import plone.app.versioningbehavior
-        self.loadZCML('meta.zcml', package=plone.app.dexterity)
-        self.loadZCML('configure.zcml', package=plone.app.dexterity)
-        self.loadZCML('configure.zcml', package=plone.app.versioningbehavior)
-        self.loadZCML('configure.zcml', package=Products.CMFEditions)
-
-        self.addProfile('plone.app.dexterity:default')
-        self.addProfile('plone.app.versioningbehavior:default')
-
-        portal = self.portal
-        types_tool = getToolByName(portal, 'portal_types')
-
-        fti = DexterityFTI(
-            TEST_CONTENT_TYPE_ID,
-            factory=TEST_CONTENT_TYPE_ID,
-            global_allow=True,
-            behaviors=(
-                'plone.app.versioningbehavior.behaviors.IVersionable',
-                'plone.app.dexterity.behaviors.metadata.IBasic',
-                'plone.app.dexterity.behaviors.metadata.IRelatedItems',
-            ),
-            model_source='''
-                <model xmlns="http://namespaces.plone.org/supermodel/schema">
-                    <schema>
-                        <field name="text" type="zope.schema.Text">
-                            <title>Text</title>
-                            <required>False</required>
-                        </field>
-                    </schema>
-                </model>
-                '''
-        )
-        types_tool._setObject(TEST_CONTENT_TYPE_ID, fti)
-
-        self.test_content_type_fti = fti
-
-        diff_tool = getToolByName(portal, 'portal_diff')
-        diff_tool.setDiffForPortalType(
-            TEST_CONTENT_TYPE_ID, {'text': TextDiff.meta_type})
-
-        portal_repository = getToolByName(portal, 'portal_repository')
-        portal_repository.setVersionableContentTypes(
-            list(portal_repository.getVersionableContentTypes()) +
-            [TEST_CONTENT_TYPE_ID])
-        for policy_id in DEFAULT_POLICIES:
-            portal_repository.addPolicyForContentType(
-                TEST_CONTENT_TYPE_ID, policy_id)
-
-        self.CSRF_DISABLED_ORIGINAL = plone.protect.auto.CSRF_DISABLED
-        plone.protect.auto.CSRF_DISABLED = True
-
-    def beforeTearDown(self):
-        plone.protect.auto.CSRF_DISABLED = self.CSRF_DISABLED_ORIGINAL
-        super(PackageLayer, self).beforeTearDown()
-
-package_layer = PackageLayer([common.common_layer])
diff --git a/setup.py b/setup.py
index aa9590c..a14d52d 100644
--- a/setup.py
+++ b/setup.py
@@ -6,10 +6,8 @@
 tests_require = [
     'plone.app.testing',
     'Products.CMFDiffTool',
-    'Products.CMFEditions',
+    'Products.CMFEditions [test]',
     'Products.CMFPlone',
-    'Products.PloneTestCase',
-    'collective.testcaselayer',
     'plone.app.dexterity',
     'plone.app.testing',
     'plone.app.versioningbehavior',


Repository: plone.app.versioningbehavior
Branch: refs/heads/master
Date: 2014-06-22T15:35:02+02:00
Author: Jonas Baumann (jone) <jone at jone.ch>
Commit: https://github.com/plone/plone.app.versioningbehavior/commit/a0c21d6fdab456e84eaf1d97affcc269e6338505

testing: tear down workaround so that we can run PloneTestCase and p.a.testing in the same process.

Files changed:
M plone/app/versioningbehavior/testing.py

diff --git a/plone/app/versioningbehavior/testing.py b/plone/app/versioningbehavior/testing.py
index 1fa5a7e..23dde77 100644
--- a/plone/app/versioningbehavior/testing.py
+++ b/plone/app/versioningbehavior/testing.py
@@ -7,10 +7,28 @@
 from plone.dexterity.fti import DexterityFTI
 from Products.CMFCore.utils import getToolByName
 from Products.CMFDiffTool.TextDiff import TextDiff
+from Products.PloneTestCase.layer import onteardown
 from zope.configuration import xmlconfig
 import plone.protect.auto
 
 
+def fix_plonetestcase_mess():
+    """Registers a Products.PloneTestCase cleanup.
+    It is a nested teardown so that we can meake sure that it is executate
+    as last tear down function.
+    """
+    def reset_zope2():
+        """Testing.ZopeTestCase.layer.ZopeLite does not support tearing down.
+        This results in a partically teared down Zope2 instance.
+        This function resets the Zope2 initialization state so that we can
+        initialize another Zope2 instance with p.a.testing.
+        """
+        import Zope2
+        Zope2._began_startup = 0
+    onteardown(reset_zope2)()
+onteardown(fix_plonetestcase_mess)()
+
+
 TEST_CONTENT_TYPE_ID = 'TestContentType'
 DEFAULT_POLICIES = ('at_edit_autoversion', 'version_on_revert',)
 


Repository: plone.app.versioningbehavior
Branch: refs/heads/master
Date: 2014-06-22T17:11:27+02:00
Author: Timo Stollenwerk (tisto) <tisto at plone.org>
Commit: https://github.com/plone/plone.app.versioningbehavior/commit/05268410f49cc63c3c2db65900f8d1b39c3a4245

Merge pull request #8 from plone/jone-eliminate-plonetestcase

Use plone.app.testing

Files changed:
M plone/app/versioningbehavior/testing.py
M plone/app/versioningbehavior/tests/doctest_behavior.txt
M plone/app/versioningbehavior/tests/test_functional.py
M plone/app/versioningbehavior/tests/test_install.py
M plone/app/versioningbehavior/tests/tests.py
M setup.py

diff --git a/plone/app/versioningbehavior/testing.py b/plone/app/versioningbehavior/testing.py
index 88abacb..23dde77 100644
--- a/plone/app/versioningbehavior/testing.py
+++ b/plone/app/versioningbehavior/testing.py
@@ -1,43 +1,59 @@
 #coding=utf8
 
-from collective.testcaselayer import common
-from collective.testcaselayer import ptc
+from plone.app.testing import applyProfile
+from plone.app.testing import FunctionalTesting
+from plone.app.testing import PLONE_FIXTURE
+from plone.app.testing import PloneSandboxLayer
 from plone.dexterity.fti import DexterityFTI
 from Products.CMFCore.utils import getToolByName
 from Products.CMFDiffTool.TextDiff import TextDiff
+from Products.PloneTestCase.layer import onteardown
+from zope.configuration import xmlconfig
 import plone.protect.auto
 
 
+def fix_plonetestcase_mess():
+    """Registers a Products.PloneTestCase cleanup.
+    It is a nested teardown so that we can meake sure that it is executate
+    as last tear down function.
+    """
+    def reset_zope2():
+        """Testing.ZopeTestCase.layer.ZopeLite does not support tearing down.
+        This results in a partically teared down Zope2 instance.
+        This function resets the Zope2 initialization state so that we can
+        initialize another Zope2 instance with p.a.testing.
+        """
+        import Zope2
+        Zope2._began_startup = 0
+    onteardown(reset_zope2)()
+onteardown(fix_plonetestcase_mess)()
+
+
 TEST_CONTENT_TYPE_ID = 'TestContentType'
 DEFAULT_POLICIES = ('at_edit_autoversion', 'version_on_revert',)
 
 
-class PackageLayer(ptc.BasePTCLayer):
+class VersioningLayer(PloneSandboxLayer):
+    defaultBases = (PLONE_FIXTURE,)
 
-    def afterSetUp(self):
-        import Products.CMFEditions
-        import plone.app.dexterity
+    def setUpZope(self, app, configurationContext):
         import plone.app.versioningbehavior
-        self.loadZCML('meta.zcml', package=plone.app.dexterity)
-        self.loadZCML('configure.zcml', package=plone.app.dexterity)
-        self.loadZCML('configure.zcml', package=plone.app.versioningbehavior)
-        self.loadZCML('configure.zcml', package=Products.CMFEditions)
+        xmlconfig.file('configure.zcml', plone.app.versioningbehavior,
+                       context=configurationContext)
 
-        self.addProfile('plone.app.dexterity:default')
-        self.addProfile('plone.app.versioningbehavior:default')
+    def setUpPloneSite(self, portal):
+        applyProfile(portal, 'plone.app.versioningbehavior:default')
+        self.registerVersionedDocumentFTI(portal)
 
-        portal = self.portal
+    def registerVersionedDocumentFTI(self, portal):
         types_tool = getToolByName(portal, 'portal_types')
-
         fti = DexterityFTI(
             TEST_CONTENT_TYPE_ID,
-            factory=TEST_CONTENT_TYPE_ID,
             global_allow=True,
             behaviors=(
                 'plone.app.versioningbehavior.behaviors.IVersionable',
                 'plone.app.dexterity.behaviors.metadata.IBasic',
-                'plone.app.dexterity.behaviors.metadata.IRelatedItems',
-            ),
+                ),
             model_source='''
                 <model xmlns="http://namespaces.plone.org/supermodel/schema">
                     <schema>
@@ -47,12 +63,9 @@ def afterSetUp(self):
                         </field>
                     </schema>
                 </model>
-                '''
-        )
+                ''')
         types_tool._setObject(TEST_CONTENT_TYPE_ID, fti)
 
-        self.test_content_type_fti = fti
-
         diff_tool = getToolByName(portal, 'portal_diff')
         diff_tool.setDiffForPortalType(
             TEST_CONTENT_TYPE_ID, {'text': TextDiff.meta_type})
@@ -65,11 +78,15 @@ def afterSetUp(self):
             portal_repository.addPolicyForContentType(
                 TEST_CONTENT_TYPE_ID, policy_id)
 
+    def testSetUp(self):
         self.CSRF_DISABLED_ORIGINAL = plone.protect.auto.CSRF_DISABLED
         plone.protect.auto.CSRF_DISABLED = True
 
-    def beforeTearDown(self):
+    def testTearDown(self):
         plone.protect.auto.CSRF_DISABLED = self.CSRF_DISABLED_ORIGINAL
-        super(PackageLayer, self).beforeTearDown()
 
-package_layer = PackageLayer([common.common_layer])
+
+VERSIONING_FIXTURE = VersioningLayer()
+VERSIONING_FUNCTIONAL_TESTING = FunctionalTesting(
+    bases=(VERSIONING_FIXTURE,),
+    name="plone.app.versioningbehavior:functional")
diff --git a/plone/app/versioningbehavior/tests/doctest_behavior.txt b/plone/app/versioningbehavior/tests/doctest_behavior.txt
index 697ba48..e6f397d 100644
--- a/plone/app/versioningbehavior/tests/doctest_behavior.txt
+++ b/plone/app/versioningbehavior/tests/doctest_behavior.txt
@@ -1,4 +1,16 @@
 
+    >>> from plone.app.testing import TEST_USER_ID
+    >>> from plone.app.testing import TEST_USER_NAME
+    >>> from plone.app.testing import TEST_USER_PASSWORD
+    >>> from plone.app.testing import setRoles
+    >>> from plone.testing.z2 import Browser
+    >>> import transaction
+
+    >>> portal = layer['portal']
+    >>> app = layer['app']
+    >>> setRoles(portal, TEST_USER_ID, ['Manager'])
+
+
 Some Tests
 ----------
 
@@ -12,7 +24,7 @@ in your dexterity content type::
     ...         'plone.app.dexterity.behaviors.metadata.IBasic',
     ...         'plone.app.versioningbehavior.behaviors.IVersionable',
     ... )
-    >>> self.portal.portal_types._setObject('TestingType', fti)
+    >>> portal.portal_types._setObject('TestingType', fti)
     'TestingType'
     >>> schema = fti.lookupSchema()
 
@@ -29,15 +41,13 @@ For this test we set this configuration manually::
     >>> pr.setVersionableContentTypes(versionable_types)
     >>> for policy_id in ('at_edit_autoversion', 'version_on_revert'):
     ...     pr.addPolicyForContentType('TestingType', policy_id)
-
+    >>> transaction.commit()
 
 Create a new Browser and connect it::
 
-    >>> from Products.Five.testbrowser import Browser
-    >>> browser = Browser()
+    >>> browser = Browser(app)
     >>> browser.handleErrors = False
-    >>> self.app.acl_users.userFolderAddUser('root', 'secret', ['Manager'], [])
-    >>> browser.addHeader('Authorization', 'Basic root:secret')
+    >>> browser.addHeader('Authorization', 'Basic %s:%s' % (TEST_USER_NAME, TEST_USER_PASSWORD))
 
 
 Now we should be able to create a new TestingType-object::
@@ -64,7 +74,7 @@ The 'changeNote' field should not be visible in the view::
 We should be able to access the object, it should provide the marker
 interface ``plone.app.versioningbehavior.behaviors.IVersioningSupport``::
 
-    >>> obj = self.portal.get('testingtype')
+    >>> obj = portal.get('testingtype')
     >>> from plone.app.versioningbehavior.behaviors import IVersioningSupport
     >>> IVersioningSupport.providedBy(obj)
     True
@@ -83,8 +93,8 @@ After creating the object we wan't to create a new version by simply editing it:
 
 Now we should have at least one version::
 
-    >>> obj = self.portal.get('testingtype')
-    >>> pa = self.portal.portal_archivist
+    >>> obj = portal.get('testingtype')
+    >>> pa = portal.portal_archivist
     >>> history = pa.getHistoryMetadata(obj)
     >>> history.getLength(countPurged=False) > 0
     True
@@ -110,8 +120,8 @@ A freshly created object should have a initial version::
 
 Now we should have one - and only one - version::
 
-    >>> obj = self.portal.get('testingtype-1')
-    >>> pa = self.portal.portal_archivist
+    >>> obj = portal.get('testingtype-1')
+    >>> pa = portal.portal_archivist
     >>> history = pa.getHistoryMetadata(obj)
     >>> history.getLength(countPurged=False)
     1
@@ -130,7 +140,7 @@ It should also be possible to copy/paste an existing content::
     >>> browser.getLink('Copy').click()
     >>> browser.open('http://nohost/plone/')
     >>> browser.getLink('Paste').click()
-    >>> 'copy_of_testingtype' in self.portal.objectIds()
+    >>> 'copy_of_testingtype' in portal.objectIds()
     True
 
 
@@ -160,9 +170,10 @@ Create a container FTI::
     ...     behaviors = ('plone.app.dexterity.behaviors.metadata.IBasic',),
     ...     )
 
-    >>> self.portal.portal_types._setObject('DemoContainer', container_fti)
+    >>> portal.portal_types._setObject('DemoContainer', container_fti)
     'DemoContainer'
     >>> container_schema = fti.lookupSchema()
+    >>> transaction.commit()
 
 
 Create a container object::
@@ -187,10 +198,10 @@ Now we add a versioned object to the container::
 So let's see the version history. There should be one version with the comment
 "created a object"::
 
-    >>> obj = self.portal.get('democontainer').get('testingtype')
+    >>> obj = portal.get('democontainer').get('testingtype')
     >>> obj
     <Item at /plone/democontainer/testingtype>
-    >>> pa = self.portal.portal_archivist
+    >>> pa = portal.portal_archivist
     >>> history = pa.getHistoryMetadata(obj)
     >>> history.getLength(countPurged=False)
     1
@@ -214,11 +225,10 @@ Let's create a new versioned container FTI::
     ...         'plone.app.dexterity.behaviors.metadata.IBasic',
     ...         'plone.app.versioningbehavior.behaviors.IVersionable',
     ... )
-    >>> self.portal.portal_types._setObject('VersionedContainer', versioned_container_fti)
+    >>> portal.portal_types._setObject('VersionedContainer', versioned_container_fti)
     'VersionedContainer'
     >>> versioned_container_schema = versioned_container_fti.lookupSchema()
 
-
 Enable versioning for the new content type::
 
     >>> pr = getToolByName(portal, 'portal_repository')
@@ -227,6 +237,7 @@ Enable versioning for the new content type::
     >>> pr.setVersionableContentTypes(versionable_types)
     >>> for policy_id in ('at_edit_autoversion', 'version_on_revert'):
     ...     pr.addPolicyForContentType('VersionedContainer', policy_id)
+    >>> transaction.commit()
 
 Let's Create a versioned container object on the portal::
 
@@ -240,10 +251,10 @@ Let's Create a versioned container object on the portal::
 
 Do we have a initial version?
 
-    >>> obj = self.portal.get('versionedcontainer')
+    >>> obj = portal.get('versionedcontainer')
     >>> obj
     <Container at /plone/versionedcontainer>
-    >>> pa = self.portal.portal_archivist
+    >>> pa = portal.portal_archivist
     >>> history = pa.getHistoryMetadata(obj)
     >>> history.getLength(countPurged=False)
     1
@@ -268,11 +279,11 @@ Now we try to add another versioned container in the previously created versione
 
 So, we should have the initial version::
 
-    >>> parent = self.portal['versionedcontainer']
+    >>> parent = portal['versionedcontainer']
     >>> obj = parent['versionedcontainer']
     >>> obj
     <Container at /plone/versionedcontainer/versionedcontainer>
-    >>> pa = self.portal.portal_archivist
+    >>> pa = portal.portal_archivist
     >>> history = pa.getHistoryMetadata(obj)
     >>> history.getLength(countPurged=False)
     1
diff --git a/plone/app/versioningbehavior/tests/test_functional.py b/plone/app/versioningbehavior/tests/test_functional.py
index 70a7e56..fabce56 100644
--- a/plone/app/versioningbehavior/tests/test_functional.py
+++ b/plone/app/versioningbehavior/tests/test_functional.py
@@ -1,21 +1,30 @@
 #coding=utf8
-from plone.app.versioningbehavior import testing
-from plone.app.versioningbehavior.testing import (
-    TEST_CONTENT_TYPE_ID)
-from mechanize import LinkNotFoundError
-from Products.Five.testbrowser import Browser
-from Products.PloneTestCase import PloneTestCase
 
+from plone.app.testing import setRoles
+from plone.app.testing import TEST_USER_ID
+from plone.app.testing import TEST_USER_NAME
+from plone.app.testing import TEST_USER_PASSWORD
+from plone.app.versioningbehavior.testing import TEST_CONTENT_TYPE_ID
+from plone.app.versioningbehavior.testing import VERSIONING_FUNCTIONAL_TESTING
+from plone.testing.z2 import Browser
+from unittest2 import TestCase
+import transaction
 
-class FunctionalTestCase(PloneTestCase.FunctionalTestCase):
 
-    layer = testing.package_layer
+class FunctionalTestCase(TestCase):
 
-    def afterSetUp(self):
+    layer = VERSIONING_FUNCTIONAL_TESTING
+
+    def setUp(self):
+        self.portal = self.layer['portal']
         self.portal_url = self.portal.absolute_url()
-        self.browser = Browser()
+
+        self.browser = Browser(self.layer['app'])
         self.browser.handleErrors = False
-        self.setRoles(['Manager', 'Member'], PloneTestCase.default_user)
+        self.browser.addHeader('Authorization', 'Basic %s:%s' % (
+                TEST_USER_NAME, TEST_USER_PASSWORD,))
+
+        setRoles(self.portal, TEST_USER_ID, ['Manager', 'Member'])
         self.portal.invokeFactory(
             type_name=TEST_CONTENT_TYPE_ID,
             id='obj1',
@@ -24,31 +33,9 @@ def afterSetUp(self):
             text=u'Object 1 some footext.',
         )
         self.obj1 = self.portal['obj1']
-        self.test_content_type_fti = self.layer.test_content_type_fti
-
-    def _dump_to_file(self):
-        f = open('/tmp/a.html', 'w')
-        f.write(self.browser.contents)
-        f.close()
-
-    def _login_browser(self, userid, password):
-        self.browser.open(self.portal_url + '/login_form')
-        self.browser.getControl(name='__ac_name').value = userid
-        self.browser.getControl(name='__ac_password').value = password
-        self.browser.getControl(name='submit').click()
-
-    def assertLinkNotExists(self, *args, **kwargs):
-        self.assertRaises(
-            LinkNotFoundError, self.browser.getLink, *args, **kwargs)
-
-    def assertControlNotExists(self, *args, **kwargs):
-        self.assertRaises(
-            LookupError, self.browser.getControl, *args, **kwargs)
+        transaction.commit()
 
     def test_content_core_view(self):
-        self._login_browser(
-            PloneTestCase.default_user, PloneTestCase.default_password)
-
         self.browser.open(self.obj1.absolute_url() + '/@@content-core')
 
         # Title and description are metadata, not in content-core.
@@ -57,9 +44,6 @@ def test_content_core_view(self):
         self.assertIn(self.obj1.text, self.browser.contents)
 
     def test_version_view(self):
-        self._login_browser(
-            PloneTestCase.default_user, PloneTestCase.default_password)
-
         self.browser.open(
             self.obj1.absolute_url() + '/@@version-view?version_id=0')
 
@@ -75,8 +59,6 @@ def test_versions_history_form_should_work_with_dexterity_content(self):
         new_text = 'Some other text for object 1.'
         new_title = 'My special new title for object 1'
 
-        self._login_browser(
-            PloneTestCase.default_user, PloneTestCase.default_password)
         self.browser.open(self.obj1.absolute_url() + '/edit')
         self.browser.getControl(label='Title').value = new_title
         self.browser.getControl(label='Text').value = new_text
@@ -87,34 +69,6 @@ def test_versions_history_form_should_work_with_dexterity_content(self):
         self._assert_versions_history_form(
             1, self.obj1.getId(), new_title, new_text)
 
-    def test_versions_history_form_should_work_with_archetypes_content(self):
-        old_text = self.obj1.text
-        old_title = self.obj1.title
-
-        new_text = 'Some other text for page 1.'
-        new_title = 'My special new title for page 1'
-
-        self.portal.invokeFactory(
-            type_name='Document',
-            id='page1',
-            title=old_title,
-            text=old_text,
-        )
-        page = self.portal['page1']
-
-        self._login_browser(
-            PloneTestCase.default_user, PloneTestCase.default_password)
-
-        self.browser.open(page.absolute_url() + '/edit')
-        self.browser.getControl(label='Title').value = new_title
-        self.browser.getControl(label='Body Text').value = new_text
-        self.browser.getControl(name='form.button.save').click()
-
-        self._assert_versions_history_form(
-            0, page.getId(), old_title, old_text)
-        self._assert_versions_history_form(
-            1, page.getId(), new_title, new_text)
-
     def _assert_versions_history_form(self, version_id, obj_id, title, text):
         self.browser.open(
             '%s/%s/versions_history_form?version_id=%s'
diff --git a/plone/app/versioningbehavior/tests/test_install.py b/plone/app/versioningbehavior/tests/test_install.py
index 18794c8..d5ea62e 100755
--- a/plone/app/versioningbehavior/tests/test_install.py
+++ b/plone/app/versioningbehavior/tests/test_install.py
@@ -1,14 +1,14 @@
-from plone.app.versioningbehavior import testing
+from plone.app.versioningbehavior.testing import VERSIONING_FUNCTIONAL_TESTING
 from Products.CMFCore.utils import getToolByName
+from unittest2 import TestCase
 
-from Products.PloneTestCase import PloneTestCase
 
+class InstallTestCase(TestCase):
 
-class InstallTestCase(PloneTestCase.FunctionalTestCase):
+    layer = VERSIONING_FUNCTIONAL_TESTING
 
-    layer = testing.package_layer
-
-    def afterSetUp(self):
+    def setUp(self):
+        self.portal = self.layer['portal']
         self.portal_skins = getToolByName(self.portal, 'portal_skins')
 
     def test_should_override_versions_history_form_skin_template(self):
diff --git a/plone/app/versioningbehavior/tests/tests.py b/plone/app/versioningbehavior/tests/tests.py
index 0a15d50..9ae1591 100644
--- a/plone/app/versioningbehavior/tests/tests.py
+++ b/plone/app/versioningbehavior/tests/tests.py
@@ -1,17 +1,13 @@
+from plone.app.versioningbehavior.testing import VERSIONING_FUNCTIONAL_TESTING
+from plone.testing import layered
+import doctest
 import unittest
 
-from Testing import ZopeTestCase as ztc
-from Products.PloneTestCase import PloneTestCase as ptc
-from plone.app.versioningbehavior import testing
-
 
 def test_suite():
-    functional = ztc.FunctionalDocFileSuite(
-        'tests/doctest_behavior.txt',
-        package='plone.app.versioningbehavior',
-        test_class=ptc.FunctionalTestCase)
-    functional.layer = testing.package_layer
-    return unittest.TestSuite([functional])
-
-if __name__ == '__main__':
-    unittest.main(defaultTest='test_suite')
+    suite = unittest.TestSuite()
+    suite.addTests([
+            layered(doctest.DocFileSuite('doctest_behavior.txt'),
+                    layer=VERSIONING_FUNCTIONAL_TESTING),
+            ])
+    return suite
diff --git a/setup.py b/setup.py
index 9e3aa71..a14d52d 100644
--- a/setup.py
+++ b/setup.py
@@ -4,11 +4,10 @@
 version = '1.1.4.dev0'
 
 tests_require = [
+    'plone.app.testing',
     'Products.CMFDiffTool',
-    'Products.CMFEditions',
+    'Products.CMFEditions [test]',
     'Products.CMFPlone',
-    'Products.PloneTestCase',
-    'collective.testcaselayer',
     'plone.app.dexterity',
     'plone.app.testing',
     'plone.app.versioningbehavior',




-------------------------------------------------------------------------------
-------------- next part --------------
A non-text attachment was scrubbed...
Name: CHANGES.log
Type: application/octet-stream
Size: 43685 bytes
Desc: not available
URL: <http://lists.plone.org/pipermail/plone-testbot/attachments/20140622/b0ad3ed9/attachment-0002.obj>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: build.log
Type: application/octet-stream
Size: 88713 bytes
Desc: not available
URL: <http://lists.plone.org/pipermail/plone-testbot/attachments/20140622/b0ad3ed9/attachment-0003.obj>


More information about the Testbot mailing list