[Erp5-report] r22895 - in /erp5/trunk/products/ERP5/tests: testInvoice.py testItem.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Aug 6 12:18:58 CEST 2008


Author: jerome
Date: Wed Aug  6 12:18:57 2008
New Revision: 22895

URL: http://svn.erp5.org?rev=22895&view=rev
Log:
Continue reorganising testInvoice

Modified:
    erp5/trunk/products/ERP5/tests/testInvoice.py
    erp5/trunk/products/ERP5/tests/testItem.py

Modified: erp5/trunk/products/ERP5/tests/testInvoice.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testInvoice.py?rev=22895&r1=22894&r2=22895&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testInvoice.py (original)
+++ erp5/trunk/products/ERP5/tests/testInvoice.py Wed Aug  6 12:18:57 2008
@@ -48,12 +48,62 @@
 class TestInvoiceMixin:
   """Test methods for invoices
   """
+  default_region = "europe/west/france"
+  vat_gap = 'fr/pcg/4/44/445/4457/44571'
+  vat_rate = 0.196
+  sale_gap = 'fr/pcg/7/70/707/7071/70712'
+  customer_gap = 'fr/pcg/4/41/411'
+
+  # (account_id, account_gap, account_type)
+  account_definition_list = (
+      ('receivable_vat', vat_gap, 'liability/payable/collected_vat',),
+      ('sale', sale_gap, 'income'),
+      ('customer', customer_gap, 'asset/receivable'),
+      ('refundable_vat', vat_gap, 'asset/receivable/refundable_vat'),
+      ('purchase', sale_gap, 'expense'),
+      ('supplier', customer_gap, 'liability/payable'),
+      )
+  # (line_id, source_account_id, destination_account_id, line_quantity)
+  transaction_line_definition_list = (
+      ('income', 'sale', 'purchase', 1.0),
+      ('receivable', 'customer', 'supplier', -1.0 - vat_rate),
+      ('collected_vat', 'receivable_vat', 'refundable_vat', vat_rate),
+      )
+
   def getBusinessTemplateList(self):
     return ('erp5_base', 'erp5_pdm', 'erp5_trade', 'erp5_accounting',
             'erp5_invoicing')
 
   def createCategories(self):
-    pass
+    """Create the categories for our test. """
+    return UnrestrictedMethod(self._createCategories)()
+
+  def _createCategories(self):
+    # create categories
+    for cat_string in self.getNeededCategoryList() :
+      base_cat = cat_string.split("/")[0]
+      path = self.getPortal().portal_categories[base_cat]
+      for cat in cat_string.split("/")[1:] :
+        if not cat in path.objectIds() :
+          path = path.newContent(
+                    portal_type='Category',
+                    id=cat,)
+        else:
+          path = path[cat]
+    # check categories have been created
+    for cat_string in self.getNeededCategoryList() :
+      self.assertNotEquals(None,
+                self.getCategoryTool().restrictedTraverse(cat_string),
+                cat_string)
+
+  def getNeededCategoryList(self):
+    """return a list of categories that should be created."""
+    return ('region/%s' % self.default_region,
+            'gap/%s' % self.vat_gap,
+            'gap/%s' % self.sale_gap,
+            'gap/%s' % self.customer_gap,
+        )
+
 
   def afterSetUp(self):
     self.createCategories()
@@ -82,6 +132,72 @@
     user = uf.getUserById('test_invoice_user').__of__(uf)
     newSecurityManager(None, user)
 
+  def createInvoiceTransactionRule(self, resource=None):
+    return UnrestrictedMethod(
+        self._createSaleInvoiceTransactionRule)(resource=resource)
+
+  def _createSaleInvoiceTransactionRule(self, resource=None):
+    """Create a sale invoice transaction rule with only one cell for
+    product_line/apparel and default_region
+    The accounting rule cell will have the provided resource, but this his more
+    or less optional (as long as price currency is set correctly on order)
+    """
+    portal = self.portal
+    account_module = portal.account_module
+    for account_id, account_gap, account_type \
+               in self.account_definition_list:
+      if not account_id in account_module.objectIds():
+        account = account_module.newContent(id=account_id)
+        account.setGap(account_gap)
+        account.setAccountType(account_type)
+        portal.portal_workflow.doActionFor(account, 'validate_action')
+
+    invoice_rule = portal.portal_rules.default_invoice_transaction_rule
+    invoice_rule.deleteContent([x.getId()
+                          for x in invoice_rule.objectValues()])
+    get_transaction().commit()
+    self.tic()
+    region_predicate = invoice_rule.newContent(portal_type = 'Predicate')
+    product_line_predicate = invoice_rule.newContent(portal_type = 'Predicate')
+    region_predicate.edit(
+      membership_criterion_base_category_list = ['destination_region'],
+      membership_criterion_category_list =
+                   ['destination_region/region/%s' % self.default_region ],
+      int_index = 1,
+      string_index = 'region'
+    )
+    product_line_predicate.edit(
+      membership_criterion_base_category_list = ['product_line'],
+      membership_criterion_category_list =
+                            ['product_line/apparel'],
+      int_index = 1,
+      string_index = 'product'
+    )
+    product_line_predicate.immediateReindexObject()
+    region_predicate.immediateReindexObject()
+
+    invoice_rule.updateMatrix()
+    cell_list = invoice_rule.getCellValueList(base_id='movement')
+    self.assertEquals(len(cell_list),1)
+    cell = cell_list[0]
+
+    for line_id, line_source_id, line_destination_id, line_ratio in \
+        self.transaction_line_definition_list:
+      line = cell.newContent(id=line_id,
+          portal_type='Accounting Transaction Line', quantity=line_ratio,
+          resource_value=resource,
+          source_value=account_module[line_source_id],
+          destination_value=account_module[line_destination_id])
+
+    invoice_rule.validate()
+    get_transaction().commit()
+    self.tic()
+
+
+
+class TestInvoice(TestInvoiceMixin):
+  """Test methods for invoice. Subclasses must defines portal types to use.
+  """
   def test_invoice_transaction_line_resource(self):
     """
     tests that simulation movements corresponding to accounting line have a
@@ -90,17 +206,21 @@
     resource = self.portal.getDefaultModule(
         self.resource_portal_type).newContent(
                     portal_type=self.resource_portal_type,
-                    title='Resource',)
+                    title='Resource',
+                    product_line='apparel')
     currency = self.portal.currency_module.newContent(
                                 portal_type='Currency',
                                 title='Currency')
+    self.createInvoiceTransactionRule(currency)
 
     client = self.portal.organisation_module.newContent(
                             portal_type='Organisation',
-                            title='Client')
+                            title='Client',
+                            default_address_region=self.default_region)
     vendor = self.portal.organisation_module.newContent(
                             portal_type='Organisation',
-                            title='Vendor')
+                            title='Vendor',
+                            default_address_region=self.default_region)
     order = self.portal.getDefaultModule(self.order_portal_type).newContent(
                               portal_type=self.order_portal_type,
                               source_value=vendor,
@@ -169,9 +289,10 @@
     other_entity = self.portal.organisation_module.newContent(
                                       portal_type='Organisation',
                                       title='Other Entity')
-    order.confirm()
-    get_transaction().commit()
-    self.tic()
+    order.plan()
+    get_transaction().commit()
+    self.tic()
+    self.assertEquals('planned', order.getSimulationState())
 
     related_applied_rule = order.getCausalityRelatedValue(
                              portal_type='Applied Rule')
@@ -329,17 +450,21 @@
     resource = self.portal.getDefaultModule(
         self.resource_portal_type).newContent(
                     portal_type=self.resource_portal_type,
-                    title='Resource',)
+                    title='Resource',
+                    product_line='apparel')
     currency = self.portal.currency_module.newContent(
                                 portal_type='Currency',
                                 title='Currency')
+    self.createInvoiceTransactionRule(currency)
 
     client = self.portal.organisation_module.newContent(
                             portal_type='Organisation',
-                            title='Client')
+                            title='Client',
+                            default_address_region=self.default_region)
     vendor = self.portal.organisation_module.newContent(
                             portal_type='Organisation',
-                            title='Vendor')
+                            title='Vendor',
+                            default_address_region=self.default_region)
     order = self.portal.getDefaultModule(self.order_portal_type).newContent(
                               portal_type=self.order_portal_type,
                               source_value=vendor,
@@ -355,10 +480,12 @@
                                   price=2)
     other_entity = self.portal.organisation_module.newContent(
                                       portal_type='Organisation',
-                                      title='Other Entity')
-    order.confirm()
-    get_transaction().commit()
-    self.tic()
+                                      title='Other Entity',
+                                      default_address_region=self.default_region)
+    order.plan()
+    get_transaction().commit()
+    self.tic()
+    self.assertEquals('planned', order.getSimulationState())
 
     related_applied_rule = order.getCausalityRelatedValue(
                              portal_type='Applied Rule')
@@ -631,7 +758,7 @@
 
 class TestSaleInvoiceMixin(TestPackingListMixin,
                            TestAccountingRulesMixin,
-                           TestInvoiceMixin,
+                           TestInvoice,
                            ERP5TypeTestCase):
   """Test sale invoice are created from orders then packing lists.
 
@@ -640,30 +767,6 @@
   """
   RUN_ALL_TESTS = 1
   quiet = 1
-
-  default_region = "europe/west/france"
-  vat_gap = 'fr/pcg/4/44/445/4457/44571'
-  vat_rate = 0.196
-  sale_gap = 'fr/pcg/7/70/707/7071/70712'
-  customer_gap = 'fr/pcg/4/41/411'
-
-  # (account_id, account_gap, account_type)
-  #XXX gap for the last 3 should be set to real values
-  account_definition_list = (
-      ('receivable_vat', vat_gap, 'liability/payable/collected_vat',),
-      ('sale', sale_gap, 'income'),
-      ('customer', customer_gap, 'asset/receivable'),
-      ('refundable_vat', vat_gap, 'asset/receivable/refundable_vat'),
-      ('purchase', sale_gap, 'expense'),
-      ('supplier', customer_gap, 'liability/payable'),
-      )
-  # (line_id, source_account_id, destination_account_id, line_quantity)
-  transaction_line_definition_list = (
-      ('income', 'sale', 'purchase', 1.0),
-      ('receivable', 'customer', 'supplier', -1.0 - vat_rate),
-      ('collected_vat', 'receivable_vat', 'refundable_vat', vat_rate),
-      )
-
 
   # default sequence for one line of not varianted resource.
   PACKING_LIST_DEFAULT_SEQUENCE = """
@@ -764,42 +867,8 @@
       stepCheckNewPackingListIsPacked
     """
 
-
   def getTitle(self):
     return "Invoices"
-
-  login = TestInvoiceMixin.login
-
-  def createCategories(self):
-    """Create the categories for our test. """
-    return UnrestrictedMethod(self._createCategories)()
-
-  def _createCategories(self):
-    TestPackingListMixin.createCategories(self)
-    # create categories
-    for cat_string in self.getNeededCategoryList() :
-      base_cat = cat_string.split("/")[0]
-      path = self.getPortal().portal_categories[base_cat]
-      for cat in cat_string.split("/")[1:] :
-        if not cat in path.objectIds() :
-          path = path.newContent(
-                    portal_type='Category',
-                    id=cat,)
-        else:
-          path = path[cat]
-    # check categories have been created
-    for cat_string in self.getNeededCategoryList() :
-      self.assertNotEquals(None,
-                self.getCategoryTool().restrictedTraverse(cat_string),
-                cat_string)
-
-  def getNeededCategoryList(self):
-    """return a list of categories that should be created."""
-    return ('region/%s' % self.default_region,
-            'gap/%s' % self.vat_gap,
-            'gap/%s' % self.sale_gap,
-            'gap/%s' % self.customer_gap,
-        )
 
   def getBusinessTemplateList(self):
     """ """
@@ -830,57 +899,7 @@
 
   def stepCreateSaleInvoiceTransactionRule(self, sequence, **kw) :
     """Create the rule for accounting. """
-    return UnrestrictedMethod(self._stepCreateSaleInvoiceTransactionRule)(
-                  sequence, **kw)
-
-  def _stepCreateSaleInvoiceTransactionRule(self, sequence, **kw) :
-    portal = self.getPortal()
-    account_module = self.getAccountModule()
-    for account_id, account_gap, account_type \
-               in self.account_definition_list:
-      if not account_id in account_module.objectIds():
-        account = account_module.newContent(id=account_id)
-        account.setGap(account_gap)
-        account.setAccountType(account_type)
-        portal.portal_workflow.doActionFor(account, 'validate_action')
-    invoice_rule = self.getPortal().portal_rules\
-                          .default_invoice_transaction_rule
-    
-    invoice_rule.deleteContent([x.getId()
-                          for x in invoice_rule.objectValues()])
-    get_transaction().commit()
-    self.tic()
-    region_predicate = invoice_rule.newContent(portal_type = 'Predicate')
-    product_line_predicate = invoice_rule.newContent(portal_type = 'Predicate')
-    region_predicate.edit(
-      membership_criterion_base_category_list = ['destination_region'],
-      membership_criterion_category_list =
-                   ['destination_region/region/%s' % self.default_region ],
-      int_index = 1,
-      string_index = 'region'
-    )
-    product_line_predicate.edit(
-      membership_criterion_base_category_list = ['product_line'],
-      membership_criterion_category_list =
-                            ['product_line/apparel'],
-      int_index = 1,
-      string_index = 'product'
-    )
-    product_line_predicate.immediateReindexObject()
-    region_predicate.immediateReindexObject()
-
-    invoice_rule.updateMatrix()
-    cell_list = invoice_rule.getCellValueList(base_id='movement')
-    self.assertEquals(len(cell_list),1)
-    cell = cell_list[0]
-
-    for line_id, line_source_id, line_destination_id, line_ratio in \
-        self.transaction_line_definition_list:
-      line = cell.newContent(id=line_id,
-          portal_type='Accounting Transaction Line', quantity=line_ratio,
-          resource_value=sequence.get('currency'),
-          source_value=account_module[line_source_id],
-          destination_value=account_module[line_destination_id])
+    self.createInvoiceTransactionRule(resource=sequence.get('resource'))
 
   def modifyPackingListState(self, transition_name,
                              sequence,packing_list=None):
@@ -2549,8 +2568,18 @@
   invoice_cell_portal_type = 'Invoice Cell'
   invoice_transaction_line_portal_type = 'Sale Invoice Transaction Line'
   
-
-class TestPurchaseInvoice(TestInvoiceMixin, ERP5TypeTestCase):
+  # fix inheritance
+  login = TestInvoiceMixin.login
+  createCategories = TestInvoiceMixin.createCategories
+
+  def _createCategories(self):
+    TestPackingListMixin.createCategories(self)
+    TestInvoiceMixin._createCategories(self)
+
+  getNeededCategoryList = TestInvoiceMixin.getNeededCategoryList
+
+
+class TestPurchaseInvoice(TestInvoice, ERP5TypeTestCase):
   """Tests for purchase invoice.
   """
   resource_portal_type = 'Product'

Modified: erp5/trunk/products/ERP5/tests/testItem.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testItem.py?rev=22895&r1=22894&r2=22895&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testItem.py (original)
+++ erp5/trunk/products/ERP5/tests/testItem.py Wed Aug  6 12:18:57 2008
@@ -31,9 +31,9 @@
 from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
 from zLOG import LOG
 from Products.ERP5Type.tests.Sequence import SequenceList
-from testInvoice import TestInvoiceMixin
+from testInvoice import TestSaleInvoiceMixin
 
-class TestItemMixin(TestInvoiceMixin):
+class TestItemMixin(TestSaleInvoiceMixin):
   """
     Test business template erp5_trade 
   """
@@ -42,7 +42,7 @@
   def getBusinessTemplateList(self):
     """
     """
-    return TestInvoiceMixin.getBusinessTemplateList(self) + ('erp5_item',)
+    return TestSaleInvoiceMixin.getBusinessTemplateList(self) + ('erp5_item',)
   
   def stepCreateItemList(self, sequence=None, sequence_list=None, **kw):
     """ Create some items """




More information about the Erp5-report mailing list