From d51079279b7bf1e69188b5439f0ec06a3c729174 Mon Sep 17 00:00:00 2001
From: Yusei Tahara <yusei@nexedi.com>
Date: Fri, 14 May 2010 10:59:22 +0000
Subject: [PATCH] Test if subdocuments are reindexed when trade condition is
 modified.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@35329 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testTradeCondition.py | 89 ++++++++++++++++++++++++
 1 file changed, 89 insertions(+)

diff --git a/product/ERP5/tests/testTradeCondition.py b/product/ERP5/tests/testTradeCondition.py
index 8ce34925cbb..5bf1ada3ccf 100644
--- a/product/ERP5/tests/testTradeCondition.py
+++ b/product/ERP5/tests/testTradeCondition.py
@@ -96,6 +96,95 @@ class TradeConditionTestCase(ERP5TypeTestCase):
     transaction.commit()
     self.tic()
 
+  def test_subcontent_supply_line_reindexing(self):
+    # If trade condition is modified, then supply lines must be reindexed
+    another_resource = self.portal.product_module.newContent(portal_type='Product',
+                                                             title='Another Resource')
+
+    # Supply lines are made without source_section and destination_section
+    supply_line_1 = self.trade_condition.newContent(portal_type=self.supply_line_type,
+                                                    resource_value=self.resource)
+    supply_line_2 = self.trade_condition.newContent(portal_type=self.supply_line_type,
+                                                    resource_value=another_resource)
+
+    transaction.commit()
+    self.tic()
+
+    # Set source_section and destination_section to trade condition
+    # Then recursive reindex should be called
+    self.trade_condition.edit(source_section_value=self.client,
+                              destination_section_value=self.vendor)
+
+    transaction.commit()
+    self.tic()
+
+    # New indexes have source_section, destination_section
+    self.assertEqual(len(self.portal.portal_catalog(portal_type=self.trade_condition_type,
+                                                    source_section_relative_url=self.client.getRelativeUrl(),
+                                                    destination_section_relative_url=self.vendor.getRelativeUrl())),
+                     1)
+
+    self.assertEqual(len(self.portal.portal_catalog(portal_type=self.supply_line_type,
+                                                    resource_relative_url=another_resource.getRelativeUrl(),
+                                                    source_section_relative_url=self.client.getRelativeUrl(),
+                                                    destination_section_relative_url=self.vendor.getRelativeUrl())),
+                     1)
+
+    self.assertEqual(len(self.portal.portal_catalog(portal_type=self.supply_line_type,
+                                                    resource_relative_url=self.resource.getRelativeUrl(),
+                                                    source_section_relative_url=self.client.getRelativeUrl(),
+                                                    destination_section_relative_url=self.vendor.getRelativeUrl())),
+                     1)
+
+    # Change source_section and destination_section
+    company_a = self.portal.organisation_module.newContent(portal_type='Organisation',
+                                                           title='Company A')
+    company_b = self.portal.organisation_module.newContent(portal_type='Organisation',
+                                                           title='Company B')
+
+    transaction.commit()
+    self.tic()
+
+    # When edit, recursive reindex should be called
+    self.trade_condition.edit(source_section_value=None,
+                              destination_section_value=None,
+                              source_value=company_a,
+                              destination_value=company_b)
+
+    transaction.commit()
+    self.tic()
+
+    # No old indexes
+    self.assertEqual(len(self.portal.portal_catalog(portal_type=self.trade_condition_type,
+                                                    source_section_relative_url=self.client.getRelativeUrl(),
+                                                    destination_section_relative_url=self.vendor.getRelativeUrl())),
+                     0)
+    self.assertEqual(len(self.portal.portal_catalog(portal_type=self.supply_line_type,
+                                                    resource_relative_url=self.resource.getRelativeUrl(),
+                                                    source_section_relative_url=self.client.getRelativeUrl(),
+                                                    destination_section_relative_url=self.vendor.getRelativeUrl())),
+                     0)
+    self.assertEqual(len(self.portal.portal_catalog(portal_type=self.supply_line_type,
+                                                    resource_relative_url=another_resource.getRelativeUrl(),
+                                                    source_section_relative_url=self.client.getRelativeUrl(),
+                                                    destination_section_relative_url=self.vendor.getRelativeUrl())),
+                     0)
+    # New indexes
+    self.assertEqual(len(self.portal.portal_catalog(portal_type=self.trade_condition_type,
+                                                    source_relative_url=company_a.getRelativeUrl(),
+                                                    destination_relative_url=company_b.getRelativeUrl())),
+                     1)
+    self.assertEqual(len(self.portal.portal_catalog(portal_type=self.supply_line_type,
+                                                    resource_relative_url=self.resource.getRelativeUrl(),
+                                                    source_relative_url=company_a.getRelativeUrl(),
+                                                    destination_relative_url=company_b.getRelativeUrl())),
+                     1)
+    self.assertEqual(len(self.portal.portal_catalog(portal_type=self.supply_line_type,
+                                                    resource_relative_url=another_resource.getRelativeUrl(),
+                                                    source_relative_url=company_a.getRelativeUrl(),
+                                                    destination_relative_url=company_b.getRelativeUrl())),
+                     1)
+
 
 class AccountingBuildTestCase(TradeConditionTestCase):
   """Same as TradeConditionTestCase, but with a rule to generate
-- 
2.30.9