[Erp5-report] r20373 - /erp5/trunk/products/ERP5/tests/testInventoryAPI.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Apr 9 11:37:53 CEST 2008


Author: seb
Date: Wed Apr  9 11:37:53 2008
New Revision: 20373

URL: http://svn.erp5.org?rev=20373&view=rev
Log:
add test to check that we do not allow duplicate inventories

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

Modified: erp5/trunk/products/ERP5/tests/testInventoryAPI.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testInventoryAPI.py?rev=20373&r1=20372&r2=20373&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testInventoryAPI.py (original)
+++ erp5/trunk/products/ERP5/tests/testInventoryAPI.py Wed Apr  9 11:37:53 2008
@@ -43,6 +43,7 @@
 from Products.ERP5.Document.OrderRule import OrderRule
 from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
 from Products.ERP5Type.tests.utils import reindex
+from Products.DCWorkflow.DCWorkflow import ValidationFailed
 
 class InventoryAPITestCase(ERP5TypeTestCase):
   """Base class for Inventory API Tests {{{
@@ -1632,6 +1633,7 @@
     # TODO: It would be better to strip numbers below seconds instead of below
     # days.
     self.MAX_DATE = MAX_DATE = DateTime(DateTime().Date()) - 1
+    self.DUPLICATE_INVENTORY_DATE = MAX_DATE - 8 # Newest
     self.INVENTORY_DATE_3 = INVENTORY_DATE_3 = MAX_DATE - 10 # Newest
     self.INVENTORY_QUANTITY_3 = INVENTORY_QUANTITY_3 = 100000
     self.INVENTORY_DATE_2 = INVENTORY_DATE_2 = INVENTORY_DATE_3 - 10
@@ -2000,7 +2002,59 @@
                       self.getInventory(optimisation__=False,
                                         **inventory_kw))
 
-
+  def test_14_TwoInventoryWithSameDateAndResourceAndNode(self):
+    """
+    It makes no sense to validate two inventories with same date,
+    same resource, and same node. The calculation of inventories
+    will not work in such case. So here we test that a constraint
+    does not allow such things
+    """
+    portal = self.getPortal()
+    inventory_module = portal.getDefaultModule(portal_type='Inventory')
+    inventory = inventory_module.newContent(portal_type='Inventory')
+    date = self.DUPLICATE_INVENTORY_DATE
+    inventory.edit(destination_value=self.node,
+                   destination_section_value=self.section,
+                   start_date=date)
+    inventory_line = inventory.newContent(
+        resource_value = self.resource,
+        quantity = 1)
+    self.workflow_tool = portal.portal_workflow
+    workflow_id = 'inventory_workflow'
+    transition_id = 'deliver_action'
+    workflow_id= 'inventory_workflow'
+    self.workflow_tool.doActionFor(inventory, transition_id,
+            wf_id=workflow_id)
+    self.assertEquals('delivered', inventory.getSimulationState())
+    get_transaction().commit()
+    self.tic()
+    
+    # We should detect the previous inventory and fails
+    new_inventory = inventory.Base_createCloneDocument(batch_mode=1)
+    self.assertRaises(ValidationFailed, self.workflow_tool.doActionFor, 
+        new_inventory, transition_id, wf_id=workflow_id)
+    workflow_history = self.workflow_tool.getInfoFor(ob=new_inventory, 
+        name='history', wf_id=workflow_id)
+    workflow_error_message = str(workflow_history[-1]['error_message'])
+    self.assertTrue(workflow_error_message.find('There is already an inventory')>=0)
+
+    # Add a case in order to check a bug when the other inventory at the
+    # same date does not change stock values
+    new_inventory = inventory.Base_createCloneDocument(batch_mode=1)
+    new_inventory.setStartDate(self.DUPLICATE_INVENTORY_DATE + 1)
+    self.workflow_tool.doActionFor(new_inventory, transition_id,
+            wf_id=workflow_id)
+    self.assertEquals('delivered', new_inventory.getSimulationState())
+    get_transaction().commit()
+    self.tic()
+
+    new_inventory = new_inventory.Base_createCloneDocument(batch_mode=1)
+    self.assertRaises(ValidationFailed, self.workflow_tool.doActionFor, 
+        new_inventory, transition_id, wf_id=workflow_id)
+    workflow_history = self.workflow_tool.getInfoFor(ob=new_inventory, 
+        name='history', wf_id=workflow_id)
+    workflow_error_message = str(workflow_history[-1]['error_message'])
+    self.assertTrue(workflow_error_message.find('There is already an inventory')>=0)
 
 def test_suite():
   suite = unittest.TestSuite()




More information about the Erp5-report mailing list