[Erp5-report] r13548 - /erp5/trunk/products/ERP5/tests/testPredicate.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Thu Mar 22 11:34:10 CET 2007
Author: jerome
Date: Thu Mar 22 11:34:09 2007
New Revision: 13548
URL: http://svn.erp5.org?rev=13548&view=rev
Log:
Big cleanup.
Separate some test in different test methods to isolate failures more easilly
Modified:
erp5/trunk/products/ERP5/tests/testPredicate.py
Modified: erp5/trunk/products/ERP5/tests/testPredicate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testPredicate.py?rev=13548&r1=13547&r2=13548&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testPredicate.py (original)
+++ erp5/trunk/products/ERP5/tests/testPredicate.py Thu Mar 22 11:34:09 2007
@@ -31,13 +31,7 @@
"""
-import os, sys
-if __name__ == '__main__':
- execfile(os.path.join(sys.path[0], 'framework.py'))
-
-# Needed in order to have a log file inside the current folder
-os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log')
-os.environ['EVENT_LOG_SEVERITY'] = '-300'
+import unittest
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from Products.ERP5Type.tests.utils import createZODBPythonScript
@@ -122,6 +116,16 @@
self.failUnless('Predicate' in [x.id for x in
predicate_folder.allowedContentTypes()])
return predicate_folder
+
+ def createPredicate(self, **kw):
+ """Generic method to create a predicate"""
+ return self.getPredicateFolder().newContent(
+ portal_type = 'Predicate', **kw)
+
+ def createDocument(self, **kw):
+ """Creates a document."""
+ return self.getOrganisationModule().newContent(
+ portal_type='Organisation', **kw)
def stepCreatePredicateTrueScript(self, sequence=None, **kw) :
"""Creates a script that always return true"""
@@ -135,11 +139,6 @@
'Predicate_false', '', """return 0""")
sequence.edit(test_method_id = 'Predicate_false')
- def createPredicate(self, **kw):
- """Generic method to create a predicate"""
- return self.getPredicateFolder().newContent(
- portal_type = 'Predicate', **kw)
-
def stepCreateTestMethodIdPredicate(self, sequence=None, **kw) :
"""Creates a predicate with a test method_id"""
sequence.edit(predicate = self.createPredicate(
@@ -264,71 +263,121 @@
doc = sequence.get('doc')
predicate = sequence.get('predicate')
self.assertFalse(predicate.test(doc))
-
+
############################################################################
## Test Methods ############################################################
############################################################################
- def test_Interface(self, quiet=QUIET, run=RUN_ALL_TESTS):
+ def test_Interface(self):
"""Test Predicate implements Predicate interface."""
- if not run : return
from Products.ERP5Type.Interface import Predicate as IPredicate
from Products.ERP5Type.Document.Predicate import Predicate
predicate = self.createPredicate()
self.failUnless(IPredicate.isImplementedBy(predicate))
from Interface.Verify import verifyClass
verifyClass(IPredicate, Predicate)
-
- def test_CategoryMembership(self, quiet=QUIET, run=RUN_ALL_TESTS):
- """Test basic category membership"""
- if not run : return
- self.playSequence("""
- stepCreateDocument
- stepSetDocumentFranceRegionMembership
- stepSetDocumentStoreverGroupMembership
- stepCreateRegionFrancePredicate
- stepAssertPredicateTrue
- stepCreateGroupStoreverPredicate
- stepAssertPredicateTrue
- stepCreateGroupStoreverRegionFrancePredicate
- stepAssertPredicateTrue
- stepSetDocumentGermanyRegionMembership
- stepAssertPredicateFalse
- stepCreateRegionFrancePredicate
- stepAssertPredicateFalse
- """)
-
- def test_EmptyPredicates(self, quiet=QUIET, run=RUN_ALL_TESTS):
- """Test empty and always false predicates."""
- if not run : return
- self.playSequence("""
- stepCreateDocument
- stepCreateEmptyPredicate
- stepAssertPredicateTrue
- stepCreateAlwaysFalsePredicate
- stepAssertPredicateFalse
- """)
-
- def test_TestMethodId(self, quiet=QUIET, run=RUN_ALL_TESTS):
- """Test test_method_id attribute."""
- if not run : return
- self.playSequence("""
- stepCreateDocument
- stepSetDocumentFranceRegionMembership
- stepCreateRegionFrancePredicate
- stepAssertPredicateTrue
- stepCreatePredicateTrueScript
- stepCreateTestMethodIdPredicate
- stepAssertPredicateTrue
- stepCreateRegionFrancePredicateTruePredicate
- stepAssertPredicateTrue
- stepCreatePredicateFalseScript
- stepCreateTestMethodIdPredicate
- stepAssertPredicateFalse
- stepCreateRegionFrancePredicateFalsePredicate
- stepAssertPredicateFalse
- """)
-
+
+
+ def test_BasicCategoryMembership(self):
+ # Predicates can test that a document is member of a category
+ doc = self.createDocument(region='europe/western_europe/france',)
+ pred = self.createPredicate(
+ membership_criterion_base_category_list=['region'],
+ membership_criterion_category_list=
+ ['region/europe/western_europe/france'])
+ # our document is member of france region, so the predicate is true
+ self.assertTrue(pred.test(doc))
+
+
+ def test_BasicCategoryMembershipNotStrict(self):
+ # Predicates are not only true for strict membership, but can also be used
+ # with a parent category
+ doc = self.createDocument(region='europe/western_europe/france',)
+ pred = self.createPredicate(
+ membership_criterion_base_category_list=['region'],
+ membership_criterion_category_list=['region/europe'])
+ self.assertTrue(pred.test(doc))
+
+
+ def test_BasicCategoryNonMembership(self):
+ # if the document is not member of the category, the predicate returns
+ # false
+ doc = self.createDocument(region='europe/western_europe/france',)
+ pred = self.createPredicate(
+ membership_criterion_base_category_list=['region'],
+ membership_criterion_category_list=
+ ['region/europe/western_europe/germany'])
+ self.assertFalse(pred.test(doc))
+
+
+ def test_NonExistantCategoryMembership(self):
+ # the predicate also return false for non existant category and no error is
+ # raised.
+ doc = self.createDocument()
+ pred = self.createPredicate(
+ membership_criterion_base_category_list=['not_exist'],
+ membership_criterion_category_list=['not_exist/nothing'])
+ self.assertFalse(pred.test(doc))
+
+
+ def test_EmptyPredicates(self):
+ # empty predicate are true
+ doc = self.createDocument()
+ pred = self.createPredicate()
+ self.assertTrue(pred.test(doc))
+
+
+ def test_TestMethodId(self):
+ doc = self.createDocument(region='europe/western_europe/france',)
+ calls = []
+ def true_method():
+ calls.append(True)
+ return True
+ doc.true_method = true_method
+ def false_method():
+ calls.append(False)
+ return False
+ doc.false_method = false_method
+
+ # predicates can also be created with a test method id, which will be the
+ # id of a method to call on the document (of course it can be a python
+ # script). This method must return a boolean value.
+ pred = self.createPredicate(test_method_id='true_method')
+ self.assertTrue(pred.test(doc))
+ self.assertEquals([True], calls)
+
+ pred = self.createPredicate(test_method_id='false_method')
+ self.assertFalse(pred.test(doc))
+ self.assertEquals([True, False], calls)
+
+ # the use of method id can be mixed with category membership, both will
+ # have to be true for the predicate to be true.
+ pred = self.createPredicate(
+ test_method_id='true_method',
+ membership_criterion_base_category_list=['region'],
+ membership_criterion_category_list=
+ ['region/europe/western_europe/france'])
+ self.assertTrue(pred.test(doc))
+ self.assertEquals([True, False, True], calls)
+
+ pred = self.createPredicate(
+ test_method_id='false_method',
+ membership_criterion_base_category_list=['region'],
+ membership_criterion_category_list=
+ ['region/europe/western_europe/france'])
+ self.assertFalse(pred.test(doc))
+ self.assertEquals([True, False, True, False], calls)
+
+ pred = self.createPredicate(
+ test_method_id='true_method',
+ membership_criterion_base_category_list=['region'],
+ membership_criterion_category_list=['region/other'])
+ self.assertFalse(pred.test(doc))
+ # Note that if the document is not member of the category, the test_method
+ # is not called.
+ self.assertEquals([True, False, True, False], calls)
+
+
def test_PredicateFusion(self, quiet=QUIET, run=RUN_ALL_TESTS):
"""Test simple predicates fusion.
New predicate act as a logical AND between predicates
@@ -419,16 +468,13 @@
# TODO :
# multi membership category
+# asPredicate scripts
# predicate range
# predicate + category fusion using setPredicateCategoryList
# predicate matrix ?
-if __name__ == '__main__':
- framework()
-else:
- import unittest
- def test_suite():
- suite = unittest.TestSuite()
- suite.addTest(unittest.makeSuite(TestPredicates))
- return suite
-
+def test_suite():
+ suite = unittest.TestSuite()
+ suite.addTest(unittest.makeSuite(TestPredicates))
+ return suite
+
More information about the Erp5-report
mailing list