From f97f0d87779fd9bd0ee311c013e2896930249ba5 Mon Sep 17 00:00:00 2001
From: Romain Courteaud <romain@nexedi.com>
Date: Mon, 18 Apr 2005 13:14:32 +0000
Subject: [PATCH] Test Packing List building.

git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@2908 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testOrder.py | 196 ++++++++++++++++++++++++++++----
 1 file changed, 176 insertions(+), 20 deletions(-)

diff --git a/product/ERP5/tests/testOrder.py b/product/ERP5/tests/testOrder.py
index 31a73becd9..57a55faa69 100755
--- a/product/ERP5/tests/testOrder.py
+++ b/product/ERP5/tests/testOrder.py
@@ -27,8 +27,6 @@
 #
 ##############################################################################
 
-
-
 #
 # Skeleton ZopeTestCase
 #
@@ -71,6 +69,9 @@ class TestOrder(ERP5TypeTestCase):
   cell_portal_type = 'Delivery Cell'
   applied_rule_portal_type = 'Applied Rule'
   datetime = DateTime()
+  packing_list_portal_type = 'Sale Packing List'
+  packing_list_line_portal_type = 'Sale Packing List Line'
+  packing_list_cell_portal_type = 'Delivery Cell'
 
   def getBusinessTemplateList(self):
     """
@@ -1096,12 +1097,17 @@ class TestOrder(ERP5TypeTestCase):
         # Test quantity
         self.assertEquals(order_movement.getQuantity(), \
                           simulation_movement.getQuantity())
+        # Test price
+        self.assertEquals(order_movement.getPrice(), \
+                          simulation_movement.getPrice())
         # Test resource
         self.assertEquals(order_movement.getResource(), \
                           simulation_movement.getResource())
         # Test resource variation
         self.assertEquals(order_movement.getVariationText(), \
                           simulation_movement.getVariationText())
+        self.assertEquals(order_movement.getVariationCategoryList(), \
+                          simulation_movement.getVariationCategoryList())
         # XXX Test acquisition
         self.checkAcquisition(simulation_movement, order_movement)
         # Test other attributes
@@ -1182,11 +1188,10 @@ class TestOrder(ERP5TypeTestCase):
                       OrderOrder \
                       Tic \
                       CheckOrderSimulation \
+                      ConfirmOrder \
+                      Tic \
+                      CheckOrderSimulation \
                       '
-#                       ConfirmOrder \
-#                       Tic \
-#                       CheckOrderSimulation \
-#                       '
     sequence_list.addSequenceString(sequence_string)
 
     # Test to confirm order without planned or ordered it
@@ -1201,11 +1206,10 @@ class TestOrder(ERP5TypeTestCase):
                       OrderOrder \
                       Tic \
                       CheckOrderSimulation \
+                      ConfirmOrder \
+                      Tic \
+                      CheckOrderSimulation \
                       '
-#                       ConfirmOrder \
-#                       Tic \
-#                       CheckOrderSimulation \
-#                       '
     sequence_list.addSequenceString(sequence_string)
 
     # Test to confirm order with variated resource
@@ -1223,11 +1227,10 @@ class TestOrder(ERP5TypeTestCase):
                       OrderOrder \
                       Tic \
                       CheckOrderSimulation \
+                      ConfirmOrder \
+                      Tic \
+                      CheckOrderSimulation \
                       '
-#                       ConfirmOrder \
-#                       Tic \
-#                       CheckOrderSimulation \
-#                       '
     sequence_list.addSequenceString(sequence_string)
 
     # Test to confirm order with multiples lines
@@ -1250,11 +1253,10 @@ class TestOrder(ERP5TypeTestCase):
                       OrderOrder \
                       Tic \
                       CheckOrderSimulation \
+                      ConfirmOrder \
+                      Tic \
+                      CheckOrderSimulation \
                       '
-#                       ConfirmOrder \
-#                       Tic \
-#                       CheckOrderSimulation \
-#                       '
     sequence_list.addSequenceString(sequence_string)
 
     sequence_list.play(self)
@@ -1346,12 +1348,166 @@ class TestOrder(ERP5TypeTestCase):
 
     sequence_list.play(self)
 
-  def test_14_testBuildDeliveryList(self, quiet=0, run=run_all_test):
+# XXX
+#   def test_14_readOnlyConfirmedOrder(self, quiet=0, run=run_all_test):
+#     """
+#       Test if confirmed order can not be modificated anymore.
+#     """
+#     if not run: return
+#     self.failUnless(1==2)
+
+  def stepCheckDeliveryBuilding(self, sequence=None, sequence_list=None, **kw):
+    """
+      Test if packing list is well created.
+    """
+    order = sequence.get('order')
+    related_applied_rule_list = order.getCausalityRelatedValueList( \
+                                   portal_type=self.applied_rule_portal_type)
+    related_packing_list_list = order.getCausalityRelatedValueList( \
+                                   portal_type=self.packing_list_portal_type)
+
+    packing_list_building_state = ('confirmed', )
+    order_state = order.getSimulationState()
+    if order_state not in packing_list_building_state:
+      self.assertEquals(0, len(related_packing_list_list))
+    else:
+      self.assertEquals(1, len(related_packing_list_list))
+
+      packing_list = related_packing_list_list[0].getObject()
+      self.failUnless(packing_list is not None)
+      
+      applied_rule = related_applied_rule_list[0].getObject()
+      simulation_movement_list = applied_rule.objectValues()
+
+      # First, test if each Simulation Movement is related to a Packing List
+      # Movement
+      packing_list_relative_url = packing_list.getRelativeUrl()
+      for simulation_movement in simulation_movement_list:
+        packing_list_movement_list = simulation_movement.getDeliveryValueList()
+        self.failUnless(len(packing_list_movement_list), 1)
+        packing_list_movement = packing_list_movement_list[0]
+        self.failUnless(packing_list_movement is not None)
+        self.failUnless(packing_list_movement.getRelativeUrl().\
+                                      startswith(packing_list_relative_url))
+
+      # Then, test if each packing list movement is equals to the sum of somes
+      # Simulation Movement
+      packing_list_movement_list = []
+      for packing_list_line in packing_list.objectValues(
+                                   portal_type=packing_list_line_portal_type):
+        cell_list = packing_list_line.objectValues(
+                                   portal_type=packing_list_cell_portal_type)
+        if len(cell_list) == 0:
+          packing_list_movement_list.append(packing_list_line)
+        else:
+          packing_list_movement_list.extend(cell_list)
+
+      for packing_list_movement in packing_list_movement_list:
+        related_simulation_movement_list = packing_list_movement.\
+                 getDeliveryRelatedValueList(portal_type='Simulation Movement')
+        quantity = 0
+        for related_simulation_movement in related_simulation_movement_list:
+          quantity += related_simulation_movement.getQuantity()
+          # Test price
+          self.assertEquals(order_movement.getPrice(), \
+                            simulation_movement.getPrice())
+          # Test resource
+          self.assertEquals(packing_list_movement.getResource(), \
+                            related_simulation_movement.getResource())
+          # Test resource variation
+          self.assertEquals(packing_list_movement.getVariationText(), \
+                            related_simulation_movement.getVariationText())
+          self.assertEquals(packing_list_movement.getVariationCategoryList(), \
+                        related_simulation_movement.getVariationCategoryList())
+          # Test acquisition
+          self.checkAcquisition(packing_list_movement,
+                                related_simulation_movement)
+        self.assertEquals(quantity, packing_list_movement.getQuantity())
+
+      # Finally, test Packing List getTotalQuantity and getTotalPrice
+      self.assertEquals(order.getTotalQuantity(), packing_list.getTotalQuantity())
+      self.assertEquals(order.getTotalPrice(), packing_list.getTotalPrice())
+
+  def test_15_deliveryBuilder(self, quiet=0, run=run_all_test):
     """
       Test generation of delivery list
     """
     if not run: return
-    self.failUnless(1==2)
+    sequence_list = SequenceList()
+    # Test with a simply order without cell
+    sequence_string = '\
+                      CreateOrganisation \
+                      CreateOrder \
+                      CreateNotVariatedResource \
+                      Tic \
+                      CreateOrderLine \
+                      SetOrderLineResource \
+                      SetOrderLineDefaultValues \
+                      OrderOrder \
+                      Tic \
+                      CheckDeliveryBuilding \
+                      ConfirmOrder \
+                      Tic \
+                      CheckDeliveryBuilding \
+                      '
+    sequence_list.addSequenceString(sequence_string)
+
+    # Test to confirm order with variated resource
+    sequence_string = '\
+                      CreateOrganisation \
+                      CreateOrder \
+                      CreateVariatedResource \
+                      Tic \
+                      CreateOrderLine \
+                      SetOrderLineResource \
+                      SetOrderLineDefaultValues \
+                      SetOrderLineFullVCL \
+                      CompleteOrderLineMatrix \
+                      Tic \
+                      OrderOrder \
+                      Tic \
+                      CheckDeliveryBuilding \
+                      ConfirmOrder \
+                      Tic \
+                      CheckDeliveryBuilding \
+                      '
+    sequence_list.addSequenceString(sequence_string)
+
+    # Test to confirm order with multiples lines
+    sequence_string = '\
+                      CreateOrganisation \
+                      CreateOrder \
+                      CreateVariatedResource \
+                      Tic \
+                      CreateOrderLine \
+                      SetOrderLineResource \
+                      SetOrderLineDefaultValues \
+                      SetOrderLineFullVCL \
+                      CompleteOrderLineMatrix \
+                      CreateNotVariatedResource \
+                      Tic \
+                      CreateOrderLine \
+                      SetOrderLineResource \
+                      SetOrderLineDefaultValues \
+                      Tic \
+                      OrderOrder \
+                      Tic \
+                      CheckDeliveryBuilding \
+                      ConfirmOrder \
+                      Tic \
+                      CheckDeliveryBuilding \
+                      '
+    sequence_list.addSequenceString(sequence_string)
+
+    sequence_list.play(self)
+
+# XXX
+#   def test_16_packingListOrderAcquisition(self, quiet=0, run=run_all_test):
+#     """
+#       Test if packing list get some properties from order.
+#     """
+#     if not run: return
+#     self.failUnless(1==2)
 
 if __name__ == '__main__':
     framework()
-- 
2.30.9