From 3310c231b70267ea55b335ecb7f897c4a8a7657e Mon Sep 17 00:00:00 2001
From: Yoshinori Okuji <yo@nexedi.com>
Date: Wed, 16 May 2007 13:20:19 +0000
Subject: [PATCH] Modernize the test with portal_activities. This triggers
 another failure, but it is not a fault in this test itself. It is a problem
 in CMFCategory (or ERP5Type). The problem is that updateRelatedContent may be
 executed after reindexObject, and updateRelatedContent or
 notifyAfterUpdateRelatedContent does not call reindexObject. So the catalog
 becomes inconsistent.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@14504 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testERP5Category.py | 137 +++++++++++++++++--------
 1 file changed, 97 insertions(+), 40 deletions(-)

diff --git a/product/ERP5/tests/testERP5Category.py b/product/ERP5/tests/testERP5Category.py
index 54f213c2df..6efd1165e0 100644
--- a/product/ERP5/tests/testERP5Category.py
+++ b/product/ERP5/tests/testERP5Category.py
@@ -62,12 +62,6 @@ class TestERP5Category(ERP5TypeTestCase):
     """
     return ('erp5_base',)
 
-  def enableActivityTool(self):
-    """
-    You can override this. Return if we should create (1) or not (0) an activity tool
-    """
-    return 0
-
   def getPortalId(self):
     return self.getPortal().getId()
 
@@ -83,34 +77,57 @@ class TestERP5Category(ERP5TypeTestCase):
     portal_categories = self.getCategoryTool()
     person_module = self.getPersonModule()
     bc = self.base_cat
-    portal_categories.newContent(portal_type='Base Category',id=bc)
-    self.cat1 = portal_categories[bc].newContent(id='1',portal_type='Category')
-    self.deep_cat1 = self.cat1.newContent(id='1',portal_type='Category')
-    self.cat2 = portal_categories[bc].newContent(id='2',portal_type='Category')
-    self.deep_cat2 = self.cat2.newContent(id='1',portal_type='Category')
-    portal_categories[self.base_cat].recursiveImmediateReindexObject()
+    if bc not in portal_categories.objectIds():
+      portal_categories.newContent(portal_type='Base Category', id=bc)
+    if not portal_categories[bc].has_key('1'):
+      portal_categories[bc].newContent(id='1', portal_type='Category')
+    self.cat1 = portal_categories[bc]['1']
+    if not self.cat1.has_key('1'):
+      self.cat1.newContent(id='1', portal_type='Category')
+    self.deep_cat1 = self.cat1['1']
+    if not portal_categories[bc].has_key('2'):
+      portal_categories[bc].newContent(id='2', portal_type='Category')
+    self.cat2 = portal_categories[bc]['2']
+    if not self.cat2.has_key('1'):
+      self.cat2.newContent(id='1', portal_type='Category')
+    self.deep_cat2 = self.cat2['1']
 
     portal_type = self.getTypeTool()[self.portal_type]
     portal_type.base_category_list = [self.base_cat, self.base_cat2]
     # Reset aq dynamic
     _aq_reset()
     organisation_module = self.getOrganisationModule()
-    self.organisation = organisation_module.newContent(id='1',portal_type=self.portal_type)
-    self.organisation.immediateReindexObject()
-    self.telephone = self.organisation.newContent(id='1',portal_type='Telephone')
-    self.organisation2 = organisation_module.newContent(id='2',portal_type=self.portal_type)
-    self.organisation2.immediateReindexObject()
-    self.telephone2 = self.organisation2.newContent(id='1',portal_type='Telephone')
-    self.person = person_module.newContent(portal_type = 'Person')
-    self.person.immediateReindexObject()
+    if not organisation_module.has_key('1'):
+      organisation_module.newContent(id='1', portal_type=self.portal_type)
+    self.organisation = organisation_module['1']
+    if not self.organisation.has_key('1'):
+      self.organisation.newContent(id='1', portal_type='Telephone')
+    self.telephone = self.organisation['1']
+    if not organisation_module.has_key('2'):
+      organisation_module.newContent(id='2', portal_type=self.portal_type)
+    self.organisation2 = organisation_module['2']
+    if not self.organisation2.has_key('1'):
+      self.organisation2.newContent(id='1', portal_type='Telephone')
+    self.telephone2 = self.organisation2['1']
+    if not person_module.has_key('1'):
+      person_module.newContent(id='1', portal_type = 'Person')
+    self.person = person_module['1']
 
     bc2 = self.base_cat2
-    portal_categories.newContent(portal_type='Base Category',id=bc2)
-    self.efg_l1=portal_categories[bc2].newContent(id='1',portal_type='Category')
-    self.efg_l2=self.efg_l1.newContent(id='11',portal_type='Category')
-    self.efg_l3=self.efg_l2.newContent(id='111',portal_type='Category')
-    self.efg_l4=self.efg_l3.newContent(id='1111',portal_type='Category')
-    portal_categories[self.base_cat2].recursiveImmediateReindexObject()
+    if bc2 not in portal_categories.objectIds():
+      portal_categories.newContent(portal_type='Base Category', id=bc2)
+    if not portal_categories[bc2].has_key('1'):
+      portal_categories[bc2].newContent(id='1', portal_type='Category')
+    self.efg_l1 = portal_categories[bc2]['1']
+    if not self.efg_l1.has_key('11'):
+      self.efg_l1.newContent(id='11', portal_type='Category')
+    self.efg_l2 = self.efg_l1['11']
+    if not self.efg_l2.has_key('111'):
+      self.efg_l2.newContent(id='111', portal_type='Category')
+    self.efg_l3 = self.efg_l2['111']
+    if not self.efg_l3.has_key('1111'):
+      self.efg_l3.newContent(id='1111',portal_type='Category')
+    self.efg_l4 = self.efg_l3['1111']
 
     # We have no place to put a Predicate, we will put it in the
     # Organisation Module
@@ -119,12 +136,31 @@ class TestERP5Category(ERP5TypeTestCase):
     module_type = type_tool['%s Module' % self.portal_type]
     module_type.allowed_content_types += ('Mapped Value',)
     module = self.getOrganisationModule()
-    predicate = module.newContent(id='predicate',portal_type='Mapped Value')
-    predicate.setCriterion('quantity',identity=None,min=None,max=None)
-    predicate.immediateReindexObject()
+    if not module.has_key('predicate'):
+      module.newContent(id='predicate', portal_type='Mapped Value')
+    predicate = module['predicate']
+    predicate.setCriterion('quantity', identity=None, min=None, max=None)
     self.predicate = predicate
 
-    get_transaction().commit(1) # If we don't commit, then we can't rename
+    get_transaction().commit() # If we don't commit, then we can't rename
+    self.tic()
+
+  def beforeTearDown(self):
+    portal_categories = self.getCategoryTool()
+    if portal_categories[self.base_cat].has_key('3'):
+      portal_categories[self.base_cat].manage_delObjects('3')
+      self.commitAndTic()
+
+    portal = self.getPortal()
+    if 'new_id' in portal.objectIds():
+      portal['new_id'].edit(id='organisation_module')
+      self.commitAndTic()
+
+    organisation_module = self.getOrganisationModule()
+    if organisation_module.has_key('new_id'):
+      organisation_module.manage_delObjects('new_id')
+
+    self.commitAndTic()
 
   def login(self, quiet=0):
     uf = self.getPortal().acl_users
@@ -132,42 +168,54 @@ class TestERP5Category(ERP5TypeTestCase):
     user = uf.getUserById('seb').__of__(uf)
     newSecurityManager(None, user)
 
-  def test_01(self, quiet=0, run=run_all_test):
+  def commitAndTic(self):
+    """Just to save one line.
+    """
+    get_transaction().commit()
+    self.tic()
+
+  def test_01_RenameCategory(self, quiet=0, run=run_all_test):
     if not run: return
     if not quiet:
       self.logMessage('Rename Category')
     organisation = self.organisation
     organisation.setCategoryList(self.cat_list)
+    self.commitAndTic()
     self.failIfDifferentSet(organisation.getCategoryList(),self.cat_list)
     portal_categories = self.getCategoryTool()
     portal_categories[self.base_cat]['1'].edit(id='3')
+    self.commitAndTic()
     self.failIfDifferentSet(organisation.getCategoryList(),self.new_cat_list)
 
-  def test_02(self, quiet=0, run=run_all_test):
+  def test_02_RenameCategoryTree(self, quiet=0, run=run_all_test):
     if not run: return
     if not quiet:
       self.logMessage('Rename Category Tree')
     organisation = self.organisation
     organisation.setCategoryList(self.deep_cat_list)
+    self.commitAndTic()
     self.failIfDifferentSet(organisation.getCategoryList(),self.deep_cat_list)
     portal_categories = self.getCategoryTool()
     portal_categories[self.base_cat]['1'].edit(id='3')
+    self.commitAndTic()
     self.failIfDifferentSet(organisation.getCategoryList(),self.new_deep_cat_list)
 
-  def test_03(self, quiet=0, run=run_all_test):
+  def test_03_RenameRelatedObject(self, quiet=0, run=run_all_test):
     if not run: return
     if not quiet:
       self.logMessage('Rename Related Object')
     organisation = self.organisation
     organisation2 = self.organisation2
     organisation.setAbcValueList([organisation2])
+    self.commitAndTic()
     self.assertEquals(organisation.getAbcValueList(),[organisation2])
     self.assertEquals(organisation.getAbcIdList(),['2'])
     organisation2.edit(id='new_id')
+    self.commitAndTic()
     self.assertEquals(organisation.getAbcValueList(),[organisation2])
     self.assertEquals(organisation.getAbcIdList(),['new_id'])
 
-  def test_04(self, quiet=0, run=run_all_test):
+  def test_04_RenameObjectWithRelatedSubObject(self, quiet=0, run=run_all_test):
     if not run: return
     if not quiet:
       self.logMessage('Rename Object With a related Sub Object')
@@ -175,25 +223,29 @@ class TestERP5Category(ERP5TypeTestCase):
     organisation = self.organisation
     organisation2 = self.organisation2
     organisation.setAbcValueList([telephone2])
+    self.commitAndTic()
     self.assertEquals(organisation.getAbcValueList(),[telephone2])
     self.assertEquals(organisation.getAbcList(),[telephone2.getRelativeUrl()])
     organisation2.edit(id='new_id')
+    self.commitAndTic()
     self.assertEquals(organisation.getAbcValueList(),[telephone2])
     self.assertEquals(organisation.getAbcList(),[telephone2.getRelativeUrl()])
 
-  def test_05(self, quiet=0, run=run_all_test):
+  def test_05_RenameMembershipCriterionCategory(self, quiet=0, run=run_all_test):
     if not run: return
     if not quiet:
       self.logMessage('Rename Membership Criterion Category')
     predicate = self.predicate
     predicate.setMembershipCriterionBaseCategoryList(self.base_cat)
     predicate.setMembershipCriterionCategoryList(self.cat_list)
+    self.commitAndTic()
     self.failIfDifferentSet(predicate.getMembershipCriterionCategoryList(),self.cat_list)
     portal_categories = self.getCategoryTool()
     portal_categories[self.base_cat]['1'].edit(id='3')
+    self.commitAndTic()
     self.failIfDifferentSet(predicate.getMembershipCriterionCategoryList(),self.new_cat_list)
 
-  def test_06(self, quiet=0, run=run_all_test):
+  def test_06_RenameModuleWithObjectOuterRelated(self, quiet=0, run=run_all_test):
     if not run: return
     if not quiet:
       self.logMessage('Rename Module With an Object Related to an Object it Contains')
@@ -201,39 +253,44 @@ class TestERP5Category(ERP5TypeTestCase):
     organisation = self.organisation
     person = self.person
     person.setSubordinationValue(organisation)
+    self.commitAndTic()
     self.assertEquals(person.getSubordinationValue(),organisation)
     organisation_module.edit(id='new_id')
+    self.commitAndTic()
     self.assertEquals(person.getSubordinationValue(),organisation)
 
-  def test_07(self, quiet=0, run=run_all_test):
+  def test_07_RenameBaseCategoryWithPersonRelatedToSubSubSubCategory(self, quiet=0, run=run_all_test):
     if not run: return
     if not quiet:
       self.logMessage('Rename a Base Category with a Person Related to a Sub-Sub-Sub-Category')
     o = self.organisation
     o.setEfgValueList([self.efg_l4])
+    self.commitAndTic()
     self.failIfDifferentSet(o.getEfgList(base=1),[self.base_cat2+'/1/11/111/1111'])
     self.efg_l1.edit(id='new_id')
+    self.commitAndTic()
     self.failIfDifferentSet(o.getEfgList(base=1),[self.base_cat2+'/new_id/11/111/1111'])
 
-  def test_08(self, quiet=0, run=run_all_test):
+  def test_08_RenameModuleWithObjectsInnerRelated(self, quiet=0, run=run_all_test):
     if not run: return
     if not quiet:
       self.logMessage('Rename a Module with Contained Objects Refering to Other Objects inside the Same Module')
     om = self.getOrganisationModule()
     om['1'].setAbcValue(om['2'])
-    om['1'].immediateReindexObject()
+    self.commitAndTic()
     self.assertEquals(len(om['2'].getRelatedValueList('abc')), 1)
     self.assertEquals(len(om['2'].Base_zSearchRelatedObjectsByCategory(category_uid = om['2'].getUid())),1)    
     self.assertEquals(om['1'].getAbc(),om['2'].getRelativeUrl())
     original_uid = om['2'].getUid()
     om.edit(id='new_id')
+    self.commitAndTic()
     om = self.getPortal()['new_id']
     self.assertEquals(original_uid, om['2'].getUid())
     self.assertEquals(len(om['2'].getRelatedValueList('abc')), 1)
     self.assertEquals(len(om['2'].Base_zSearchRelatedObjectsByCategory(category_uid = om['2'].getUid())),1)
     self.assertEquals(om['1'].getAbc(),om['2'].getRelativeUrl())
 
-  def test_08(self, quiet=0, run=run_all_test):
+  def test_09_Base_viewDictWithCategoryWithSubCategory(self, quiet=0, run=run_all_test):
     if not run: return
     if not quiet:
       self.logMessage('Make sure Base_viewDict is working for categories with sub categories')
-- 
2.30.9