Commit db06c264 authored by Arnaud Fontaine's avatar Arnaud Fontaine

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
parent 57d6df2f
##############################################################################
#
# 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))
...@@ -375,19 +375,18 @@ class TestZodbPropertySheet(ERP5TypeTestCase): ...@@ -375,19 +375,18 @@ class TestZodbPropertySheet(ERP5TypeTestCase):
portal_type='Content Existence Constraint', portal_type='Content Existence Constraint',
constraint_portal_type='python: ("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 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( self.getPortal().portal_categories.newContent(
id=reference, portal_type='Base Category') id=reference, portal_type='Base Category')
self.test_property_sheet.newContent( self.test_property_sheet.newContent(
reference=reference, reference=reference,
portal_type='Category Membership Arity Constraint', portal_type=portal_type,
min_arity=1, min_arity=1,
max_arity=1, max_arity=1,
constraint_portal_type=('Test Migration',), constraint_portal_type=('Test Migration',),
...@@ -429,7 +428,15 @@ class TestZodbPropertySheet(ERP5TypeTestCase): ...@@ -429,7 +428,15 @@ class TestZodbPropertySheet(ERP5TypeTestCase):
# Create a Category Membership Arity Constraint in the test # Create a Category Membership Arity Constraint in the test
# Property Sheet # 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 # Create all the test Properties
for operation_type in ('change', 'delete', 'assign'): for operation_type in ('change', 'delete', 'assign'):
...@@ -875,6 +882,17 @@ class TestZodbPropertySheet(ERP5TypeTestCase): ...@@ -875,6 +882,17 @@ class TestZodbPropertySheet(ERP5TypeTestCase):
('test_category_membership_arity_constraint/'\ ('test_category_membership_arity_constraint/'\
'Test Migration',)) '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 = skip("ZODB Property Sheets code is not enabled yet")(
TestZodbPropertySheet) TestZodbPropertySheet)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment