[Erp5-report] r27337 - /erp5/trunk/products/ERP5/tests/testBPMCore.py

nobody at svn.erp5.org nobody at svn.erp5.org
Tue Jun 2 17:31:17 CEST 2009


Author: fabien
Date: Tue Jun  2 17:31:15 2009
New Revision: 27337

URL: http://svn.erp5.org?rev=27337&view=rev
Log:
add new step and new tests. This tests check that it's possible to have model_line that depend each other in both cases :
1 - if the model line creation order follow the dependencies, there should be no problem
2 - if the model lines are randomly created (ie, if you create first a line A wich applied on base_amount X, and after you define the line B wich contribute to base_amount X)

in both cases, getAggregatedAmountList should be able to return the same result

Modified:
    erp5/trunk/products/ERP5/tests/testBPMCore.py

Modified: erp5/trunk/products/ERP5/tests/testBPMCore.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testBPMCore.py?rev=27337&r1=27336&r2=27337&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testBPMCore.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testBPMCore.py [utf8] Tue Jun  2 17:31:15 2009
@@ -90,7 +90,7 @@
   def createCategories(self):
     category_tool = getToolByName(self.portal, 'portal_categories')
     self.createCategoriesInCategory(category_tool.base_amount, ['discount',
-      'tax'])
+      'tax', 'total_tax', 'total_discount'])
     self.createCategoriesInCategory(category_tool.use,
         self.normal_resource_use_category_list + \
             self.invoicing_resource_use_category_list)
@@ -915,9 +915,27 @@
       use='tax',
     ))
 
+  def stepCreateServiceTax2(self, sequence=None, **kw):
+    sequence.edit(service_tax_2 = self.createResource('Service',
+      title='Tax 2',
+      use='tax',
+    ))
+
+  def stepCreateServiceTax3(self, sequence=None, **kw):
+    sequence.edit(service_tax_3 = self.createResource('Service',
+      title='Tax 3',
+      use='tax',
+    ))
+
   def stepCreateServiceDiscount(self, sequence=None, **kw):
     sequence.edit(service_discount = self.createResource('Service',
       title='Discount',
+      use='discount',
+    ))
+
+  def stepCreateServiceDiscount2(self, sequence=None, **kw):
+    sequence.edit(service_discount_2 = self.createResource('Service',
+      title='Discount 2',
       use='discount',
     ))
 
@@ -1144,6 +1162,38 @@
       trade_model_line_discount = trade_model_line
     )
 
+  def stepModifyTradeModelLineTotalDiscount(self, sequence=None, **kw):
+    trade_model_line = sequence.get('trade_model_line')
+    service_discount = sequence.get('service_discount_2')
+
+    trade_model_line.edit(
+      price=0.8,
+      base_application='base_amount/total_discount',
+      trade_phase='default/discount',
+      resource_value=service_discount,
+    )
+    sequence.edit(
+      trade_model_line = None,
+      trade_model_line_discount = trade_model_line
+    )
+
+  def stepModifyTradeModelLineDiscountContributingToTotalDiscount(self,
+      sequence=None, **kw):
+    trade_model_line = sequence.get('trade_model_line')
+    service_discount = sequence.get('service_discount')
+
+    trade_model_line.edit(
+      price=0.32,
+      base_application='base_amount/discount',
+      base_contribution='base_amount/total_discount',
+      trade_phase='default/discount',
+      resource_value=service_discount,
+    )
+    sequence.edit(
+      trade_model_line = None,
+      trade_model_line_discount = trade_model_line
+    )
+
   def stepModifyTradeModelLineNewTax(self, sequence=None, **kw):
     trade_model_line = sequence.get('trade_model_line')
     service_tax = sequence.get('service_tax')
@@ -1166,6 +1216,56 @@
     trade_model_line.edit(
       price=self.default_tax_ratio,
       base_application='base_amount/tax',
+      trade_phase='default/tax',
+      resource_value=service_tax,
+    )
+    sequence.edit(
+      trade_model_line = None,
+      trade_model_line_tax = trade_model_line
+    )
+
+  def stepModifyTradeModelLineTotalTax(self, sequence=None, **kw):
+    trade_model_line = sequence.get('trade_model_line')
+    service_tax = sequence.get('service_tax_3')
+
+    trade_model_line.edit(
+      price=0.12,
+      base_application='base_amount/total_tax',
+      base_contribution='base_amount/total_discount',
+      trade_phase='default/tax',
+      resource_value=service_tax,
+    )
+    sequence.edit(
+      trade_model_line = None,
+      trade_model_line_tax = trade_model_line
+    )
+
+  def stepModifyTradeModelLineTaxContributingToTotalTax(self,
+      sequence=None, **kw):
+    trade_model_line = sequence.get('trade_model_line')
+    service_tax = sequence.get('service_tax')
+
+    trade_model_line.edit(
+      price=0.2,
+      base_application='base_amount/tax',
+      base_contribution='base_amount/total_tax',
+      trade_phase='default/tax',
+      resource_value=service_tax,
+    )
+    sequence.edit(
+      trade_model_line = None,
+      trade_model_line_tax = trade_model_line
+    )
+
+  def stepModifyTradeModelLineTaxContributingToTotalTax2(self,
+      sequence=None, **kw):
+    trade_model_line = sequence.get('trade_model_line')
+    service_tax = sequence.get('service_tax_2')
+
+    trade_model_line.edit(
+      price=0.2,
+      base_application='base_amount/tax',
+      base_contribution='base_amount/total_tax',
       trade_phase='default/tax',
       resource_value=service_tax,
     )
@@ -1310,6 +1410,76 @@
       (order_line_taxed.getTotalPrice()
         + order_line_discounted_taxed.getTotalPrice()
         + discount_amount.getTotalPrice()) * self.default_tax_ratio
+    )
+
+  def stepCheckAggregatedAmountListWithComplexBaseContributionBaseApplication(self,
+      sequence=None, **kw):
+    trade_condition = sequence.get('trade_condition')
+    order = sequence.get('order')
+    order_line_discounted = sequence.get('order_line_discounted')
+    order_line_discounted_taxed = sequence.get('order_line_discounted_taxed')
+    order_line_taxed = sequence.get('order_line_taxed')
+
+    amount_list = trade_condition.getAggregatedAmountList(order)
+    self.assertEquals(5, len(amount_list))
+    tax_amount_list = [q for q in amount_list
+        if q.getBaseApplication() == 'base_amount/tax']
+    total_tax_amount_list = [q for q in amount_list
+        if q.getBaseApplication() == 'base_amount/total_tax']
+    discount_amount_list = [q for q in amount_list
+        if q.getBaseApplication() == 'base_amount/discount']
+    total_discount_amount_list = [q for q in amount_list
+        if q.getBaseApplication() == 'base_amount/total_discount']
+
+    self.assertEquals(2, len(tax_amount_list))
+    self.assertEquals(1, len(total_tax_amount_list))
+    self.assertEquals(1, len(discount_amount_list))
+    self.assertEquals(1, len(total_discount_amount_list))
+
+    total_tax_amount = total_tax_amount_list[0]
+    discount_amount = discount_amount_list[0]
+    total_discount_amount = total_discount_amount_list[0]
+
+    self.assertSameSet(['base_amount/total_tax'], total_tax_amount. \
+        getBaseApplicationList())
+    self.assertSameSet(['base_amount/total_discount'], total_tax_amount. \
+        getBaseContributionList())
+
+    self.assertSameSet(['base_amount/discount'], discount_amount. \
+        getBaseApplicationList())
+    self.assertSameSet(['base_amount/total_discount'], discount_amount. \
+        getBaseContributionList())
+
+    self.assertSameSet(['base_amount/total_discount'], total_discount_amount. \
+        getBaseApplicationList())
+    self.assertSameSet([], total_discount_amount.getBaseContributionList())
+
+    for tax_amount in tax_amount_list:
+      self.assertSameSet(['base_amount/tax'], tax_amount. \
+          getBaseApplicationList())
+      self.assertSameSet(['base_amount/total_tax'], tax_amount. \
+          getBaseContributionList())
+
+    for tax_amount in tax_amount_list:
+      self.assertEqual(
+        tax_amount.getTotalPrice(),
+        order_line_taxed.getTotalPrice() * 0.2
+      )
+
+    self.assertEqual(
+      total_tax_amount.getTotalPrice(),
+      (order_line_taxed.getTotalPrice() * 0.2) * 2 * 0.12
+    )
+
+    self.assertEqual(
+      discount_amount.getTotalPrice(),
+      order_line_discounted.getTotalPrice() * 0.32
+    )
+
+    self.assertEqual(
+      total_discount_amount.getTotalPrice(),
+      ((order_line_taxed.getTotalPrice() * 0.2) * 2 * 0.12 + \
+      order_line_discounted.getTotalPrice() * 0.32) * 0.8
     )
 
 class TestBPMTestCases(TestBPMMixin):
@@ -1910,6 +2080,104 @@
     sequence_list = SequenceList()
     sequence_list.addSequenceString(
         self.PACKING_LIST_SPLIT_INVOICE_BUILD_SEQUENCE_STRING)
+    sequence_list.play(self)
+
+  def test_getAggregatedAmountListWithComplexModelLinesCreateInGoodOrder(self):
+    """
+    Test the return of getAggregatedAmountList in the case of many model lines
+    depending each others. In this test, lines are created in the order of the
+    dependancies (it means that if a line A depend of a line B, line B is
+    created before A). This is the most easy case.
+    """
+    sequence_list = SequenceList()
+    sequence_string = self.COMMON_DOCUMENTS_CREATION_SEQUENCE_STRING + """
+              CreateServiceTax2
+              CreateServiceTax3
+              CreateServiceDiscount2
+              CreateBusinessProcess
+              CreateBusinessState
+              ModifyBusinessStateTaxed
+              CreateBusinessState
+              ModifyBusinessStateInvoiced
+              CreateBusinessPath
+              ModifyBusinessPathTaxing
+              CreateBusinessPath
+              ModifyBusinessPathDiscounting
+              CreateTradeCondition
+              SpecialiseTradeConditionWithBusinessProcess
+              CreateTradeModelLine
+              ModifyTradeModelLineTotalDiscount
+              CreateTradeModelLine
+              ModifyTradeModelLineTotalTax
+              CreateTradeModelLine
+              ModifyTradeModelLineTaxContributingToTotalTax2
+              CreateTradeModelLine
+              ModifyTradeModelLineDiscountContributingToTotalDiscount
+              CreateTradeModelLine
+              ModifyTradeModelLineTaxContributingToTotalTax
+              Tic
+              CreateOrder
+              SpecialiseOrderTradeCondition
+              FillOrder
+              Tic
+              CreateOrderLine
+              ModifyOrderLineTaxed
+              CreateOrderLine
+              ModifyOrderLineDiscounted
+              Tic
+              CheckAggregatedAmountListWithComplexBaseContributionBaseApplication
+    """
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
+  def test_getAggregatedAmountListWithComplexModelLinesCreateInRandomOrder(self):
+    """
+    Test the return of getAggregatedAmountList in the case of many model lines
+    depending each others. In this test, lines are created in a random order,
+    not in the dependancies order (it means that if a line A depend of a 
+    line B, line A can be created before line B). getAggregatedAmountList
+    should be able to handle this case and redo calculation unill all
+    dependancies are satified
+    """
+    sequence_list = SequenceList()
+    sequence_string = self.COMMON_DOCUMENTS_CREATION_SEQUENCE_STRING + """
+              CreateServiceTax2
+              CreateServiceTax3
+              CreateServiceDiscount2
+              CreateBusinessProcess
+              CreateBusinessState
+              ModifyBusinessStateTaxed
+              CreateBusinessState
+              ModifyBusinessStateInvoiced
+              CreateBusinessPath
+              ModifyBusinessPathTaxing
+              CreateBusinessPath
+              ModifyBusinessPathDiscounting
+              CreateTradeCondition
+              SpecialiseTradeConditionWithBusinessProcess
+              CreateTradeModelLine
+              ModifyTradeModelLineTaxContributingToTotalTax
+              CreateTradeModelLine
+              ModifyTradeModelLineTaxContributingToTotalTax2
+              CreateTradeModelLine
+              ModifyTradeModelLineTotalTax
+              CreateTradeModelLine
+              ModifyTradeModelLineDiscountContributingToTotalDiscount
+              CreateTradeModelLine
+              ModifyTradeModelLineTotalDiscount
+              Tic
+              CreateOrder
+              SpecialiseOrderTradeCondition
+              FillOrder
+              Tic
+              CreateOrderLine
+              ModifyOrderLineTaxed
+              CreateOrderLine
+              ModifyOrderLineDiscounted
+              Tic
+              CheckAggregatedAmountListWithComplexBaseContributionBaseApplication
+    """
+    sequence_list.addSequenceString(sequence_string)
     sequence_list.play(self)
 
 class TestBPMSale(TestBPMTestCases):




More information about the Erp5-report mailing list