From 73b4408d10be08533fb0f0be4dc2328ed1ad06f4 Mon Sep 17 00:00:00 2001 From: Sebastien Robin <seb@nexedi.com> Date: Fri, 24 Jul 2015 11:58:28 +0200 Subject: [PATCH] ERP5Type: add a test checking that constraint should not be executed twice Mark the test as expected failure for now until work on checkConsistency is done --- product/ERP5Type/tests/testConstraint.py | 46 +++++++++++++++++++++--- 1 file changed, 42 insertions(+), 4 deletions(-) diff --git a/product/ERP5Type/tests/testConstraint.py b/product/ERP5Type/tests/testConstraint.py index 4b472ccb46..4369294cb3 100644 --- a/product/ERP5Type/tests/testConstraint.py +++ b/product/ERP5Type/tests/testConstraint.py @@ -28,6 +28,7 @@ ############################################################################## import unittest +from unittest import expectedFailure from Products.ERP5Type.tests.testERP5Type import PropertySheetTestCase from AccessControl.SecurityManagement import newSecurityManager @@ -65,6 +66,9 @@ class TestConstraint(PropertySheetTestCase): self.portal = self.getPortal() self.category_tool = self.getCategoryTool() self.createCategories() + portal_property_sheets = self.portal.portal_property_sheets + if getattr(portal_property_sheets, "test_constraint", None) != None: + portal_property_sheets.manage_delObjects(ids=["test_constraint"]) def beforeTearDown(self): self.login() @@ -72,6 +76,11 @@ class TestConstraint(PropertySheetTestCase): module = self.portal.organisation_module module.manage_delObjects(list(module.objectIds())) super(TestConstraint, self).beforeTearDown() + portal_type = self.portal.portal_types[self.object_portal_type] + if "TestConstraint" in portal_type.getTypePropertySheetList(): + portal_type.setTypePropertySheetList( + [x for x in portal_type.getTypePropertySheetList() \ + if x != "TestConstraint"]) def createCategories(self): """ @@ -110,10 +119,12 @@ class TestConstraint(PropertySheetTestCase): module = portal.getDefaultModule(self.object_portal_type) object = module.newContent(portal_type=self.object_portal_type) group1 = object.portal_categories.restrictedTraverse('group/testGroup1') - sequence.edit( - object=object, - group=group1, - ) + if sequence: + sequence.edit( + object=object, + group=group1, + ) + return object def stepSetObjectGroup(self, sequence=None, sequence_list=None, **kw): @@ -1581,6 +1592,33 @@ class TestConstraint(PropertySheetTestCase): sequence_list.play(self) + def createConstraintThatMustBeCalledOnce(self): + """ + Create a default allowing the check if they are called once + """ + property_sheet = self.portal.portal_property_sheets.newContent( + id="TestConstraint", title="Test Constraint") + constraint = property_sheet.newContent(portal_type="TALES Constraint", + id="check_title_constraint", + expression="python: object.setTitle(object.getTitle() + 'a')") + portal_type = self.portal.portal_types[self.object_portal_type] + if "TestConstraint" not in portal_type.getTypePropertySheetList(): + portal_type.setTypePropertySheetList( + portal_type.getTypePropertySheetList() + ["TestConstraint"]) + + # Expected failure until checkConsistency is reviewed to not execute + # twice constraints + @expectedFailure + def test_09_CheckConstraintAreCalledOnce(self): + """ + Make sure we call only one time a constraint in a particular object + """ + self.createConstraintThatMustBeCalledOnce() + document = self.stepCreateObject() + document.setTitle("Foo") + document.checkConsistency() + self.assertEqual("Fooa", document.getTitle()) + def test_suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestConstraint)) -- 2.30.9