From 29c69d9fa0e25c68bf35e069e222da725bb009b7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=A9rome=20Perrin?= <jerome@nexedi.com>
Date: Fri, 4 Dec 2009 08:13:48 +0000
Subject: [PATCH] test for multiple sections and accounting periods

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@31060 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testAccounting.py | 71 +++++++++++++++++++++++++++-
 1 file changed, 69 insertions(+), 2 deletions(-)

diff --git a/product/ERP5/tests/testAccounting.py b/product/ERP5/tests/testAccounting.py
index 7bb96d3a03..3890d23616 100644
--- a/product/ERP5/tests/testAccounting.py
+++ b/product/ERP5/tests/testAccounting.py
@@ -87,9 +87,9 @@ class AccountingTestCase(ERP5TypeTestCase):
     * `self.section` an organisation using EUR as default currency, without any
     openned accounting period by default. This organisation is member of
     group/demo_group/sub1
-    * `self.master_section` an using EUR as default currency, without any
+    * `self.main_section` an using EUR as default currency, without any
     openned accounting period by default. This organisation is member of
-    group/demo_group. Both self.master_section and self.section are in the same
+    group/demo_group. Both self.main_section and self.section are in the same
     company from accounting point of view.
     * self.client_1, self.client_2 & self.supplier, some other organisations
   
@@ -1497,6 +1497,73 @@ class TestClosingPeriod(AccountingTestCase):
                               balance_transaction.getMovementList()
                               if m.getDestinationValue() == pl_account]))
 
+  def test_MultipleSection(self):
+    """
+    """
+    period = self.main_section.newContent(portal_type='Accounting Period')
+    period.setStartDate(DateTime(2006, 1, 1))
+    period.setStopDate(DateTime(2006, 12, 31))
+    period.start()
+    
+    transaction_main = self._makeOne(
+        start_date=DateTime(2006, 1, 2),
+        portal_type='Purchase Invoice Transaction',
+        destination_section_value=self.main_section,
+        source_section_value=self.organisation_module.client_1,
+        simulation_state='delivered',
+        lines=(dict(destination_value=self.account_module.goods_purchase,
+                    destination_debit=30),
+               dict(destination_value=self.account_module.payable,
+                    destination_credit=30)))
+
+    transaction_section = self._makeOne(
+        start_date=DateTime(2006, 1, 2),
+        portal_type='Purchase Invoice Transaction',
+        destination_section_value=self.section,
+        source_section_value=self.organisation_module.client_1,
+        simulation_state='stopped',
+        lines=(dict(destination_value=self.account_module.goods_purchase,
+                    destination_debit=20),
+               dict(destination_value=self.account_module.payable,
+                    destination_credit=20)))
+
+    # transaction_section is just stopped, so stopping the period is refused.
+    self.assertRaises(ValidationFailed,
+                      self.portal.portal_workflow.doActionFor,
+                      period,
+                      'stop_action')
+
+    transaction_section.deliver()
+    transaction.commit()
+    self.tic()
+
+    self.portal.portal_workflow.doActionFor(period, 'stop_action')
+    
+    pl = self.portal.account_module.newContent(
+              portal_type='Account',
+              account_type='equity')
+
+    period.AccountingPeriod_createBalanceTransaction(
+                             profit_and_loss_account=pl.getRelativeUrl())
+    
+    created_balance_transaction_list = self.portal.accounting_module.contentValues(
+                                    portal_type='Balance Transaction')
+    self.assertEquals(2, len(created_balance_transaction_list))
+
+    main_section_balance_transaction = [bt for bt in
+        created_balance_transaction_list if bt.getDestinationSectionValue() ==
+        self.main_section][0]
+    self.assertEquals(2, len(main_section_balance_transaction.getMovementList()))
+    self.assertEquals([], main_section_balance_transaction.checkConsistency())
+
+    section_balance_transaction = [bt for bt in
+        created_balance_transaction_list if bt.getDestinationSectionValue() ==
+        self.section][0]
+    self.assertEquals(2, len(section_balance_transaction.getMovementList()))
+    self.assertEquals([], section_balance_transaction.checkConsistency())
+
+    transaction.commit()
+    self.tic()
 
   def test_SecondAccountingPeriod(self):
     """Tests having two accounting periods.
-- 
2.30.9