[Erp5-report] r29961 - /erp5/trunk/products/ERP5/tests/testReturnedSalePackingList.py

nobody at svn.erp5.org nobody at svn.erp5.org
Fri Oct 23 11:06:33 CEST 2009


Author: tatuya
Date: Fri Oct 23 11:06:31 2009
New Revision: 29961

URL: http://svn.erp5.org?rev=29961&view=rev
Log:
create returned sale packing list test-cases

Added:
    erp5/trunk/products/ERP5/tests/testReturnedSalePackingList.py

Added: erp5/trunk/products/ERP5/tests/testReturnedSalePackingList.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testReturnedSalePackingList.py?rev=29961&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/tests/testReturnedSalePackingList.py (added)
+++ erp5/trunk/products/ERP5/tests/testReturnedSalePackingList.py [utf8] Fri Oct 23 11:06:31 2009
@@ -1,0 +1,570 @@
+##############################################################################
+#
+# Copyright (c) 2009 Nexedi KK and Contributors. All Rights Reserved.
+#          Tatuya Kamada <tatuya at nexedi.com>
+#
+# WARNING: This program as such is intended to be used by professional
+# programmers who take the whole responsibility of assessing all potential
+# consequences resulting from its eventual inadequacies and bugs
+# End users who are looking for a ready-to-use solution with commercial
+# guarantees and support are strongly adviced to contract a Free Software
+# Service Company
+#
+# This program is Free Software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+##############################################################################
+
+import unittest
+import transaction
+
+from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
+from zLOG import LOG
+from AccessControl.SecurityManagement import newSecurityManager
+from Products.ERP5Type.tests.Sequence import SequenceList
+from testPackingList import TestPackingListMixin
+from DateTime import DateTime
+from Products.ERP5Type.Errors import UnsupportedWorkflowMethod 
+
+class ReturnedSalePackingListMixin(TestPackingListMixin):
+  """Mixing class with steps to test returned sale packing lists.
+  """
+  
+  returned_packing_list_portal_type = 'Returned Sale Packing List'
+  returned_packing_list_line_portal_type = 'Returned Sale Packing List Line'
+  returned_packing_list_cell_portal_type = 'Returned Sale Packing List Cell'
+  inventory_line_portal_type = 'Inventory Line'
+  order_portal_type = 'Sale Order'
+  view_stock_date = '2009/12/01'
+  first_date_string = '2009/01/01'
+  shipping_date_string = '2009/10/03'
+  inventory_quantity = 2000.
+
+  default_sequence = '\
+                      stepCreateOrganisation1 \
+                      stepCreateOrganisation2 \
+                      stepCreateOrganisation3 \
+                      stepCreateCurrency \
+                      stepCreateNotVariatedResource \
+                      stepTic '
+    
+
+  def beforeTearDown(self):
+    transaction.abort()
+    self.tic()
+    for folder in (self.portal.organisation_module,
+                   self.portal.sale_order_module,
+                   self.portal.inventory_module,
+                   self.portal.apparel_model_module,
+                   self.portal.product_module,
+                   self.portal.returned_sale_packing_list_module,
+                   self.portal.portal_simulation,):
+      folder.manage_delObjects([x for x in folder.objectIds()])
+    transaction.commit()
+    self.tic()
+
+
+  def loginAsManager(self, quiet=0, run=1):
+    uf = self.getPortal().acl_users
+    uf._doAddUser('manager', '', ['Manager', 'Member', 'Assignee'], [])
+    user = uf.getUserById('manager').__of__(uf)
+    newSecurityManager(None, user)
+
+  def loginAsMember(self, quiet=0, run=1):
+    uf = self.getPortal().acl_users
+    uf._doAddUser('member', '', ['Member', 'Assignor'], [])
+    user = uf.getUserById('member').__of__(uf)
+    newSecurityManager(None, user)
+    
+  def afterSetUp(self, quiet=1, run=1):
+    self.loginAsManager()
+    portal = self.getPortal()
+    self.createCategories()
+    self.validateRules()
+    self.setUpPreferences()
+    # test with not a manager
+    self.loginAsMember()
+    
+  def stepCreateReturnedPackingList(self, sequence=None, sequence_list=None, **kw):
+    """
+      Adds a Returned Packing List
+    """
+    returned_packing_list = self.getPortal().getDefaultModule(
+        self.returned_packing_list_portal_type).newContent(
+            portal_type=self.returned_packing_list_portal_type)
+            
+    
+    organisation = sequence.get('organisation1')
+    organisation3 = sequence.get('organisation3')
+    
+    start_date = DateTime(self.shipping_date_string)
+    returned_packing_list.edit(
+      title = "RPL%s" % returned_packing_list.getId(),
+      start_date = start_date,
+      stop_date = start_date + 20,
+    )
+    if organisation is not None:
+      returned_packing_list.edit(source_value=organisation3,
+                 source_section_value=organisation3,
+                 destination_value=organisation,
+                 destination_section_value=organisation,
+                 source_decision_value=organisation3,
+                 destination_decision_value=organisation,
+                 source_administration_value=organisation3,
+                 destination_administration_value=organisation,
+                 )
+    
+    returned_packing_list_line = returned_packing_list.newContent(
+        portal_type=self.returned_packing_list_line_portal_type)
+    resource = sequence.get('resource')
+    returned_packing_list_line.setResourceValue(resource)
+    returned_packing_list_line.edit(quantity=200)
+    sequence.edit(returned_packing_list=returned_packing_list)
+    
+  def stepCheckReturnedPackingListCreating(self, sequence=None, sequence_list=None, **kw):
+    returned_packing_list = sequence.get('returned_packing_list')
+    organisation = sequence.get('organisation1')
+    organisation3 = sequence.get('organisation3')
+    
+    self.assertEquals(organisation3, returned_packing_list.getSourceValue())
+    self.assertEquals(organisation3, returned_packing_list.getSourceSectionValue())
+    self.assertEquals(organisation, returned_packing_list.getDestinationValue())
+    self.assertEquals(organisation, returned_packing_list.getDestinationSectionValue())
+    self.assertEquals(organisation3, returned_packing_list.getSourceDecisionValue())
+    self.assertEquals(organisation, returned_packing_list.getDestinationDecisionValue())
+    self.assertEquals(organisation3, returned_packing_list.getSourceAdministrationValue())
+    self.assertEquals(organisation, returned_packing_list.getDestinationAdministrationValue())
+
+    returned_packing_list_line_list = returned_packing_list.objectValues(
+                        portal_type=self.returned_packing_list_line_portal_type)
+                        
+    self.assertEquals(1, len(returned_packing_list_line_list))
+    returned_packing_list_line = returned_packing_list_line_list[0]
+    self.assertEquals(self.returned_packing_list_line_portal_type,
+                      returned_packing_list_line.getPortalType())
+    resource = sequence.get('resource')    
+    created_resource = returned_packing_list_line.getResourceValue()
+    self.assertEquals(resource, created_resource)
+    self.assertEquals(200, returned_packing_list_line.getQuantity())
+  
+  def stepCheckReturnedPackingListDeleting(self, sequence=None, 
+                                           sequence_list=None, **kw):
+    returned_packing_list = sequence.get('returned_packing_list')
+    returned_packing_list_line_list = returned_packing_list.objectValues(
+                        portal_type=self.returned_packing_list_line_portal_type)
+    self.assertEquals(1, len(returned_packing_list_line_list))
+    returned_packing_list_line = returned_packing_list_line_list[0]
+    # delete a line
+    returned_packing_list.manage_delObjects([returned_packing_list_line.getId()])
+
+    portal_catalog = self.getCatalogTool()
+    returned_packing_list_uid = returned_packing_list.getUid()    
+    found_rpl = portal_catalog(uid=returned_packing_list_uid)
+    self.assertEquals(1, len(found_rpl))    
+    rpl = found_rpl[0].getObject()
+    self.assertEquals(0, len(rpl.objectValues(
+        portal_type=self.returned_packing_list_line_portal_type)))
+        
+    # delete a delivery
+    self.portal.returned_sale_packing_list_module.manage_delObjects(
+        [returned_packing_list.getId(),])
+    
+    found_rpl =  portal_catalog(uid=returned_packing_list_uid)
+    self.assertEquals(0, len(found_rpl))
+    
+  def stepConfirmReturnedPackingList(self, sequence=None, sequence_list=None, **kw):
+    returned_packing_list = sequence.get('returned_packing_list')
+    returned_packing_list.confirm()
+
+  def stepShipReturnedPackingList(self,sequence=None, sequence_list=None, **kw):
+    returned_packing_list = sequence.get('returned_packing_list')
+    returned_packing_list.start()
+    
+  def stepReceiveReturnedPackingList(self,sequence=None, sequence_list=None, **kw):
+    returned_packing_list = sequence.get('returned_packing_list')
+    returned_packing_list.stop()
+ 
+  def stepDeliverReturnedPackingList(self,sequence=None, sequence_list=None, **kw):
+    returned_packing_list = sequence.get('returned_packing_list')
+    returned_packing_list.deliver()
+
+  def stepCheckConfirmedReturnedPackingList(self, sequence=None,
+                                            sequence_list=None, **kw):
+    returned_packing_list = sequence.get('returned_packing_list')
+    self.assertEquals('confirmed', returned_packing_list.getSimulationState())
+    
+  def stepCheckShippedReturnedPackingList(self, sequence=None,
+                                          sequence_list=None, **kw):
+    returned_packing_list = sequence.get('returned_packing_list')
+    self.assertEquals('started', returned_packing_list.getSimulationState())
+    
+  def stepCheckReceivedReturnedPackingList(self, sequence=None,
+                                           sequence_list=None, **kw):
+    returned_packing_list = sequence.get('returned_packing_list')
+    self.assertEquals('stopped', returned_packing_list.getSimulationState())
+    
+  
+  def stepCheckDeliveredReturnedPackingList(self, sequence=None,
+                                            sequence_list=None, **kw):
+    returned_packing_list = sequence.get('returned_packing_list')
+    self.assertEquals('delivered', returned_packing_list.getSimulationState())
+
+  
+  def _getInventoryModule(self):
+    return getattr(self.getPortal(), 'inventory_module',None)
+
+  def stepCreateInitialInventory(self, sequence=None, **kw):
+    """
+    We will put default values for an inventory
+    """
+    portal = self.getPortal()
+    organisation =  sequence.get('organisation1')
+    inventory = self._getInventoryModule().newContent()
+    inventory.edit(start_date=self.first_date_string,
+                   destination_value=organisation,
+                   destination_section_value=organisation)
+    inventory_list = sequence.get('inventory_list', [])
+    inventory_line = inventory.newContent(portal_type = self.inventory_line_portal_type)
+    inventory_line.edit(resource_value = sequence.get('resource'),
+                        quantity = self.inventory_quantity)
+    inventory.deliver()
+    inventory_list.append(inventory)
+    sequence.edit(inventory_list=inventory_list)
+    
+  def stepCheckInitialInventory(self, sequence=None, sequence_list=None, **kw):
+    node_uid = sequence.get('organisation1').getUid()
+    resource_url = sequence.get('resource').getRelativeUrl()
+    # inventory quantity:2000 (2009/01/01)
+    first_date = DateTime(self.first_date_string) + 1
+    quantity = self.getSimulationTool().getInventory(node_uid=node_uid,
+                                                     resource=resource_url,
+                                                     to_date=first_date)
+    self.assertEquals(2000, quantity)
+    
+    view_date = DateTime(self.view_stock_date)
+    quantity = self.getSimulationTool().getInventory(node_uid=node_uid,
+                        resource=resource_url,
+                        to_date=view_date)  
+    self.assertEquals(2000, quantity)
+    
+  def stepCheckReturnedInventory(self, sequence=None, sequence_list=None, **kw):
+    # returned packing list returns
+    # From: 'organisation3'
+    # To:   'organisation1'
+    # Quantity: 200
+    node_uid = sequence.get('organisation1').getUid()
+    resource_url = sequence.get('resource').getRelativeUrl()
+    date = DateTime(self.view_stock_date)
+    quantity = self.getSimulationTool().getInventory(node_uid=node_uid,
+                        resource=resource_url,
+                        to_date=date) 
+    self.assertEquals(2200, quantity)
+
+    shipping_date = DateTime(self.shipping_date_string) 
+    quantity = self.getSimulationTool().getInventory(node_uid=node_uid,
+                                                     resource=resource_url,
+                                                     to_date=shipping_date) 
+    self.assertEquals(2000, quantity)
+    
+    
+  def stepCheckReturnedPackingLineEmptyCell(self, sequence=None, \
+                                    sequence_list=None, **kw):
+    """
+      Check if the matrix of the current order line is empty.
+    """
+    order_line = sequence.get('returned_packing_list')
+    cell_list = order_line.objectValues(portal_type=self.order_cell_portal_type)
+    self.failIfDifferentSet( cell_list , [] )
+    
+        
+  def stepCreateReturnedPackingListWithCell(self, sequence=None,
+                                            sequence_list=None, **kw):
+    returned_packing_list = self.getPortal().getDefaultModule(
+        self.returned_packing_list_portal_type).newContent(
+            portal_type=self.returned_packing_list_portal_type)
+    
+    organisation = sequence.get('organisation1')
+    organisation3 = sequence.get('organisation3')
+    
+    start_date = DateTime(self.shipping_date_string)
+    returned_packing_list.edit(
+      title = "RPL%s" % returned_packing_list.getId(),
+      start_date = start_date,
+      stop_date = start_date + 20,
+    )
+    if organisation is not None:
+      returned_packing_list.edit(source_value=organisation3,
+                 source_section_value=organisation3,
+                 destination_value=organisation,
+                 destination_section_value=organisation,
+                 source_decision_value=organisation3,
+                 destination_decision_value=organisation,
+                 source_administration_value=organisation3,
+                 destination_administration_value=organisation,
+                 )
+    
+    returned_packing_list_line = returned_packing_list.newContent(
+        portal_type=self.returned_packing_list_line_portal_type)
+    size_list = ['Baby','Child', 'Man', 'Woman']
+    resource = sequence.get('resource')
+    resource.edit(
+      industrial_phase_list=["phase1", "phase2"],
+      size_list=size_list,
+      variation_base_category_list=['size']
+    )
+    
+    returned_packing_list_line.setResourceValue(resource)
+    variation_category_list = ['size/Baby', 'size/Child']
+    
+    resource_vbcl = resource.getVariationBaseCategoryList()
+    line_vcl = []
+    for vbc in resource_vbcl:
+      resource_vcl = list(resource.getVariationCategoryList(
+                                  base_category_list=[vbc],
+                                  omit_individual_variation=0))
+      resource_vcl.sort()
+      line_vcl.extend(self.splitList(resource_vcl)[0]) 
+    
+    returned_packing_list_line.setVariationCategoryList(line_vcl)   
+    base_id = 'variation'
+    returned_packing_list_line.setCellRange(line_vcl, base_id=base_id) 
+    transaction.commit()
+    self.stepTic()
+   
+    self.assertEquals(2, len(variation_category_list))
+    cell_key_list = list(returned_packing_list_line.getCellKeyList(base_id=base_id))
+    
+    self.assertNotEquals(0, len(cell_key_list))
+    for cell_key in cell_key_list:
+      cell = returned_packing_list_line.newCell(base_id=base_id,
+                                         portal_type=self.returned_packing_list_cell_portal_type,
+                                         *cell_key)
+      cell.edit(mapped_value_property_list=['price','quantity'],
+                price=100, quantity=200,
+                predicate_category_list=cell_key,
+                variation_category_list=cell_key)
+    transaction.commit()
+    cell_list = returned_packing_list_line.objectValues(
+        portal_type=self.returned_packing_list_cell_portal_type)
+    self.assertEquals(2, len(cell_list))
+    sequence.edit(returned_packing_list_with_cell=returned_packing_list)
+    
+
+  def stepCheckReturnedPackingListWithCell(self, sequence=None,
+                                           sequence_list=None, **kw):
+    """
+      Check order line matrix range
+    """
+    rplwc = sequence.get('returned_packing_list_with_cell')
+    rplwc_line_list = rplwc.objectValues(
+                portal_type=self.returned_packing_list_line_portal_type)
+    self.assertEquals(1, len(rplwc_line_list))
+    rplwc_line = rplwc_line_list[0]
+    
+    vcl = rplwc_line.getVariationCategoryList(omit_optional_variation=1)
+    self.assertEquals(2, len(vcl))
+    cell_list = rplwc_line.objectValues(
+        portal_type=self.returned_packing_list_cell_portal_type)
+    self.assertEquals(2, len(cell_list))
+    
+ 
+  def stepCheckReturnedPackingListWithCellDeleting(self, sequence=None,
+                                            sequence_list=None, **kw):
+    """
+    check that deleting cell
+    """
+    rplwc = sequence.get('returned_packing_list_with_cell')
+    rplwc_line_list = rplwc.objectValues(
+                portal_type=self.returned_packing_list_line_portal_type)
+    self.assertEquals(1, len(rplwc_line_list))
+    rplwc_line = rplwc_line_list[0]
+    
+    vcl = rplwc_line.getVariationCategoryList(omit_optional_variation=1)
+    self.assertEquals(2, len(vcl))
+    cell_list = rplwc_line.objectValues(
+        portal_type=self.returned_packing_list_cell_portal_type)
+    self.assertEquals(2, len(cell_list))
+    # delete cells
+    rplwc_line.deleteContent(map(lambda x: x.getId(), cell_list))
+    transaction.commit()
+    
+    cell_list = rplwc_line.objectValues(
+    ortal_type=self.returned_packing_list_cell_portal_type)
+    self.assertEquals(0, len(cell_list))
+    
+  def stepCheckReturnedPackingListIsNotDivergent(self, sequence=None,
+                                         sequence_list=None, **kw):
+    """
+      Test if packing list is not divergent
+    """
+    packing_list = sequence.get('returned_packing_list')
+    self.assertFalse(packing_list.isDivergent())
+    
+class TestReturnedSalePackingList(ReturnedSalePackingListMixin, ERP5TypeTestCase):
+  """Tests for returned sale packing list.
+  """    
+  run_all_test = 1
+  quiet = 0
+
+  def test_01_ReturnedSalePackingListWithInventory(self, quiet=quiet,
+                                                   run=run_all_test):
+    """
+    test returned sale packing list with its inventory
+    """
+    if not run: return
+    
+    sequence_list = SequenceList()
+    
+    sequence_string = self.default_sequence + '\
+                      stepTic \
+                      stepCreateInitialInventory \
+                      stepTic \
+                      stepCheckInitialInventory \
+                      stepCreateReturnedPackingList \
+                      stepConfirmReturnedPackingList \
+                      stepShipReturnedPackingList \
+                      stepReceiveReturnedPackingList \
+                      stepDeliverReturnedPackingList \
+                      stepTic \
+                      stepCheckReturnedInventory \
+                      '
+    sequence_list.addSequenceString(sequence_string)
+
+    sequence_list.play(self, quiet=quiet)
+
+
+  def test_02_ReturnedSalePackingListWorkflow(self, quiet=quiet,
+                                                   run=run_all_test):
+    """
+    test returned sale packing list workflow
+    """
+    if not run: return
+    
+    sequence_list = SequenceList()
+    
+    sequence_string = self.default_sequence + '\
+                      stepTic \
+                      stepCreateReturnedPackingList \
+                      stepConfirmReturnedPackingList \
+                      stepTic \
+                      stepCheckConfirmedReturnedPackingList \
+                      stepShipReturnedPackingList \
+                      stepTic \
+                      stepCheckShippedReturnedPackingList \
+                      stepReceiveReturnedPackingList \
+                      stepTic \
+                      stepCheckReceivedReturnedPackingList \
+                      stepDeliverReturnedPackingList \
+                      stepTic \
+                      stepCheckDeliveredReturnedPackingList \
+                      '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
+    
+    
+  def test_03_ReturnedSalePackingListWorkflowFail(self, quiet=quiet,
+                                                   run=run_all_test):
+    """
+    test that can not change workflow when delivered
+    """
+    if not run: return
+    
+    sequence_list = SequenceList()
+    
+    sequence_string = self.default_sequence + '\
+                      stepTic \
+                      stepCreateReturnedPackingList \
+                      stepConfirmReturnedPackingList \
+                      stepTic \
+                      stepCheckConfirmedReturnedPackingList \
+                      stepShipReturnedPackingList \
+                      stepTic \
+                      stepCheckShippedReturnedPackingList \
+                      stepReceiveReturnedPackingList \
+                      stepTic \
+                      stepCheckReceivedReturnedPackingList \
+                      stepDeliverReturnedPackingList \
+                      stepTic \
+                      stepCheckDeliveredReturnedPackingList \
+                      stepTic \
+                      stepConfirmReturnedPackingList \
+                      stepTic \
+                      '
+    sequence_list.addSequenceString(sequence_string)
+    try:
+      sequence_list.play(self, quiet=quiet)
+    except UnsupportedWorkflowMethod, e:
+      self.assertTrue(True)
+    
+  def test_04_ReturnedSalePackingListCreating(self, quiet=quiet,
+                                              run=run_all_test):
+    """
+    test Returned Sale Packing List document creating
+    """
+    if not run: return
+    
+    sequence_list = SequenceList()
+    
+    sequence_string = self.default_sequence + '\
+                      stepTic \
+                      stepCreateReturnedPackingList \
+                      stepTic \
+                      stepCheckReturnedPackingListCreating \
+                      '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
+    
+  def test_05_ReturnedSalePackingListDeleting(self, quiet=quiet,
+                                              run=run_all_test):
+    """
+    test Returned Sale Packing List document deleting
+    """
+    if not run: return
+
+    sequence_list = SequenceList()    
+    sequence_string = self.default_sequence + '\
+                      stepTic \
+                      stepCreateReturnedPackingList \
+                      stepTic \
+                      stepCheckReturnedPackingListDeleting \
+                      '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
+    
+  def test_06_ReturnedSalePackingListWithCell(self, quiet=quit,
+                                              run=run_all_test):
+    sequence_list = SequenceList()    
+    sequence_string = self.default_sequence + '\
+                      stepTic \
+                      stepCreateReturnedPackingListWithCell \
+                      stepCheckReturnedPackingListWithCell \
+                      '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
+    
+  def test_07_ReturnedSalePackingListWithCellDeleting(self, quiet=quit,
+                                              run=run_all_test):
+    sequence_list = SequenceList()    
+    sequence_string = self.default_sequence + '\
+                      stepTic \
+                      stepCreateReturnedPackingListWithCell \
+                      stepCheckReturnedPackingListWithCellDeleting \
+                      '
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
+    
+def test_suite():
+  suite = unittest.TestSuite()
+  suite.addTest(unittest.makeSuite(TestReturnedSalePackingList))
+  return suite




More information about the Erp5-report mailing list