From 8352cf33ed037f09429240b47295bee59d7beb1f Mon Sep 17 00:00:00 2001
From: Yusei Tahara <yusei@nexedi.com>
Date: Mon, 30 May 2011 11:18:45 +0900
Subject: [PATCH] Add a test for product which is variated and have multiple
 quantity units.

---
 product/ERP5/tests/testInventory.py | 48 +++++++++++++++++++++++++++++
 product/ERP5/tests/testOrder.py     | 46 +++++++++++++++++++++++++++
 2 files changed, 94 insertions(+)

diff --git a/product/ERP5/tests/testInventory.py b/product/ERP5/tests/testInventory.py
index 0184888500..daf8fd0427 100644
--- a/product/ERP5/tests/testInventory.py
+++ b/product/ERP5/tests/testInventory.py
@@ -328,6 +328,15 @@ class TestInventory(TestOrderMixin, ERP5TypeTestCase):
           )
     sequence.edit(delivery_line_list=delivery_line_list)
 
+  def stepCreateVariatedNonDefaultQuantityUnitPackingListLine(
+    self, sequence=None, sequence_list=None, **kw):
+    """
+    Create a line not variated
+    """
+    self.stepCreateVariatedPackingListLine(sequence, sequence_list, **kw)
+    delivery_line = sequence.get('delivery_line_list')[-1]
+    delivery_line.setQuantityUnitValue(self.portal.portal_categories.quantity_unit.unit.drum)
+
   def stepDeliverPackingList(self, sequence=None,
                                       sequence_list=None, **kw):
     # Switch to "started" state
@@ -1778,6 +1787,20 @@ class TestInventory(TestOrderMixin, ERP5TypeTestCase):
     self.checkVariatedInventory(variation_category_list=variation_category_list,
                                 quantity=quantity,sequence=sequence)
 
+  def stepTestInitialVariatedNonDefaultQuantityUnitInventory(self, sequence=None, sequence_list=None, **kw):
+    """
+      Test Inventory Module behavior
+    """
+    resource = sequence.get('resource')
+    variation_category_list = sequence.get('variation_1')
+    quantity = 100
+    self.checkVariatedInventory(variation_category_list=variation_category_list,
+                                quantity=quantity,sequence=sequence)
+    variation_category_list = sequence.get('variation_2')
+    quantity = 300
+    self.checkVariatedInventory(variation_category_list=variation_category_list,
+                                quantity=quantity,sequence=sequence)
+
   def stepTestVariatedInventoryAfterInventory(self, sequence=None, sequence_list=None, **kw):
     """
       Test Inventory Module behavior
@@ -1928,6 +1951,31 @@ class TestInventory(TestOrderMixin, ERP5TypeTestCase):
 
     sequence_list.play(self)
 
+  def test_04_InventoryModuleWithVariationAndMultiQuantityUnit(self, quiet=0, run=run_all_test):
+    """
+      Test InventoryModule behavior with product which has
+      variation and multiple quantity units.
+    """
+    if not run: return
+    sequence_list = SequenceList()
+
+    sequence_string = 'stepCreateOrganisationsForModule \
+                       stepCreateVariatedMultipleQuantityUnitResource \
+                       stepTic \
+                       stepCreatePackingListForModule \
+                       stepTic \
+                       stepCreateVariatedNonDefaultQuantityUnitPackingListLine \
+                       stepTic \
+                       stepDeliverPackingList \
+                       stepTic \
+                       stepTestInitialVariatedNonDefaultQuantityUnitInventory \
+                       stepCreateSingleVariatedInventory \
+                       stepTic \
+                       stepTestVariatedInventoryAfterInventory \
+                       '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self)
+
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestInventory))
diff --git a/product/ERP5/tests/testOrder.py b/product/ERP5/tests/testOrder.py
index 9c1b56f029..ad5d8ed7c4 100644
--- a/product/ERP5/tests/testOrder.py
+++ b/product/ERP5/tests/testOrder.py
@@ -218,6 +218,52 @@ class TestOrderMixin(SubcontentReindexingWrapper):
     resource_list.append(resource)
     sequence.edit( resource_list = resource_list )
 
+  def stepCreateVariatedMultipleQuantityUnitResource(self, sequence=None, sequence_list=None, **kw):
+    """
+    Create a resource with variation and multiple quantity units
+    """
+    # Extend quantity_unit category if needed
+    quantity_unit = self.portal.portal_categories.quantity_unit
+    if not 'unit' in quantity_unit.objectIds():
+      quantity_unit.newContent(id='unit')
+    if not 'drum' in quantity_unit.unit.objectIds():
+      quantity_unit.unit.newContent(id='drum', quantity=1)
+    if not 'mass' in quantity_unit.objectIds():
+      quantity_unit.newContent(id='mass')
+    if not 'kilogram' in quantity_unit.mass.objectIds():
+      quantity_unit.mass.newContent(id='kilogram', quantity=1)
+    # Extend metric_type category if needed
+    metric_type = self.portal.portal_categories.metric_type
+    if not 'unit' in metric_type.objectIds():
+      metric_type.newContent(id='unit')
+    if not 'mass' in metric_type.objectIds():
+      metric_type.newContent(id='mass')
+
+    # Create resource
+    self.stepCreateVariatedResource(sequence, sequence_list, **kw)
+    resource = sequence.get('resource')
+
+    # Extend resource portal type
+    resource_portal_type = getattr(self.portal.portal_types, resource.portal_type)
+    type_allowed_content_type_list = resource_portal_type.getTypeAllowedContentTypeList()
+    if not 'Measure' in type_allowed_content_type_list:
+      type_allowed_content_type_list.append('Measure')
+      resource_portal_type.setTypeAllowedContentTypeList(type_allowed_content_type_list)
+
+    # Set quantity units to product
+    resource.setQuantityUnitValueList([quantity_unit.mass.kilogram,
+                                       quantity_unit.unit.drum])
+    # Set measures to products
+    resource.newContent(portal_type='Measure',
+                        metric_type_value=metric_type.mass,
+                        default_metric_type=True,
+                        quantity_unit_value=quantity_unit.mass.kilogram,
+                        quantity=1)
+    resource.newContent(portal_type='Measure',
+                        metric_type_value=metric_type.unit,
+                        quantity_unit_value=quantity_unit.unit.drum,
+                        quantity=0.01)
+
   def stepCreateOrganisation(self, sequence=None, sequence_list=None,
                              title=None, **kw):
     """
-- 
2.30.9