From db06c264d7670e223942352a22f1733ac7a6f937 Mon Sep 17 00:00:00 2001 From: Arnaud Fontaine <arnaud.fontaine@nexedi.com> Date: Mon, 29 Nov 2010 02:10:34 +0000 Subject: [PATCH] Add Category Acquired Membership Arity Constraint and its test for ZODB Property Sheets git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@40819 20353a03-c40f-0410-a6d1-a30d3c3de9de --- ...tegoryAcquiredMembershipArityConstraint.py | 57 +++++++++++++++++++ .../tests/testDynamicClassGeneration.py | 30 ++++++++-- 2 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 product/ERP5Type/Core/CategoryAcquiredMembershipArityConstraint.py diff --git a/product/ERP5Type/Core/CategoryAcquiredMembershipArityConstraint.py b/product/ERP5Type/Core/CategoryAcquiredMembershipArityConstraint.py new file mode 100644 index 0000000000..31d158f576 --- /dev/null +++ b/product/ERP5Type/Core/CategoryAcquiredMembershipArityConstraint.py @@ -0,0 +1,57 @@ +############################################################################## +# +# Copyright (c) 2002-2010 Nexedi SARL and Contributors. All Rights Reserved. +# Sebastien Robin <seb@nexedi.com> +# Romain Courteaud <romain@nexedi.com> +# Arnaud Fontaine <arnaud.fontaine@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability of assessing all potential +# consequences resulting from its eventual inadequacies and bugs +# End users who are looking for a ready-to-use solution with commercial +# garantees and support are strongly adviced to contract a Free Software +# Service Company +# +# This program is Free Software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################## + +from Products.ERP5Type.Core.CategoryMembershipArityConstraint \ + import CategoryMembershipArityConstraint + +class CategoryAcquiredMembershipArityConstraint(CategoryMembershipArityConstraint): + """ + This constraint checks if an object respects the arity with + Acquisition. + + This is only relevant for ZODB Property Sheets (filesystem Property + Sheets rely on Products.ERP5Type.Constraint.CategoryAcquiredMembershipArity + instead). + + For example, if we would like to check whether the object respects a + minimum arity of '1' and a maximum arity of '1 for the Portal Type + 'Organisation' and the Base Category 'source', then we would create + a 'Category Acquired Membership Arity Constraint' within that + Property Sheet and set 'Minimum arity' to '1', 'Maximum Arity' to + '1', 'Portal Types' to 'Organisation', 'Base Categories' to + 'source', then set the 'Predicate' if necessary (known as + 'condition' for filesystem Property Sheets). + """ + meta_type = 'ERP5 Category Acquired Membership Arity Constraint' + portal_type = 'Category Acquired Membership Arity Constraint' + + def _calculateArity(self, obj, base_category_list, portal_type_list): + return len(obj.getAcquiredCategoryMembershipList( + base_category, portal_type=portal_type)) diff --git a/product/ERP5Type/tests/testDynamicClassGeneration.py b/product/ERP5Type/tests/testDynamicClassGeneration.py index 66d26c5032..285d8ae73d 100644 --- a/product/ERP5Type/tests/testDynamicClassGeneration.py +++ b/product/ERP5Type/tests/testDynamicClassGeneration.py @@ -375,19 +375,18 @@ class TestZodbPropertySheet(ERP5TypeTestCase): portal_type='Content Existence Constraint', constraint_portal_type='python: ("Content Existence Constraint")') - def _newCategoryMembershipArityConstraint(self): + def _newCategoryMembershipArityConstraint(self, reference, portal_type): """ Create a new Category Membership Arity Constraint within test - Property Sheet + Property Sheet, allowing testing of Category Acquired Membership + Arity Constraint too """ - reference = 'test_category_membership_arity_constraint' - self.getPortal().portal_categories.newContent( id=reference, portal_type='Base Category') self.test_property_sheet.newContent( reference=reference, - portal_type='Category Membership Arity Constraint', + portal_type=portal_type, min_arity=1, max_arity=1, constraint_portal_type=('Test Migration',), @@ -429,7 +428,15 @@ class TestZodbPropertySheet(ERP5TypeTestCase): # Create a Category Membership Arity Constraint in the test # Property Sheet - self._newCategoryMembershipArityConstraint() + self._newCategoryMembershipArityConstraint( + 'test_category_membership_arity_constraint', + 'Category Membership Arity Constraint') + + # Create a Category Acquired Membership Arity Constraint in the + # test Property Sheet + self._newCategoryMembershipArityConstraint( + 'test_category_acquired_membership_arity_constraint', + 'Category Acquired Membership Arity Constraint') # Create all the test Properties for operation_type in ('change', 'delete', 'assign'): @@ -875,6 +882,17 @@ class TestZodbPropertySheet(ERP5TypeTestCase): ('test_category_membership_arity_constraint/'\ 'Test Migration',)) + def testCategoryAcquiredMembershipArityConstraint(self): + """ + Take the test module and check whether the Category Acquired + Membership Arity Constraint is there. Until a Base Category is set + on the Test Module, the constraint should fail + """ + self._checkConstraint( + 'test_category_acquired_membership_arity_constraint', + self.test_module.setCategoryList, + ('test_category_acquired_membership_arity_constraint/Test Migration',)) + TestZodbPropertySheet = skip("ZODB Property Sheets code is not enabled yet")( TestZodbPropertySheet) -- 2.30.9