From 0862b6aef8da879e299512a642a05a721a977c93 Mon Sep 17 00:00:00 2001
From: Julien Muchembled <jm@nexedi.com>
Date: Fri, 3 Sep 2010 12:32:06 +0000
Subject: [PATCH] Many fixes in testInvoice

In particular, merge patches from testERP5Simulation.

git-svn-id: https://svn.erp5.org/repos/public/erp5/sandbox/amount_generator@38139 20353a03-c40f-0410-a6d1-a30d3c3de9de
---
 product/ERP5/tests/testERP5Simulation.py | 120 +-----------------
 product/ERP5/tests/testInvoice.py        | 155 ++++++++++-------------
 product/ERP5/tests/testOrder.py          |   1 +
 product/ERP5/tests/testPackingList.py    |   8 +-
 4 files changed, 73 insertions(+), 211 deletions(-)

diff --git a/product/ERP5/tests/testERP5Simulation.py b/product/ERP5/tests/testERP5Simulation.py
index 204497b0f3..6fae43e46f 100644
--- a/product/ERP5/tests/testERP5Simulation.py
+++ b/product/ERP5/tests/testERP5Simulation.py
@@ -35,8 +35,8 @@ import transaction
 from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
 from Products.ERP5Type.tests.Sequence import SequenceList
 from Products.ERP5Type.UnrestrictedMethod import UnrestrictedMethod
-from testPackingList import TestPackingList, TestPackingListMixin
-from testInvoice import TestSaleInvoice, TestInvoiceMixin
+from testPackingList import TestPackingListMixin
+from testInvoice import TestInvoiceMixin
 from Products.ERP5Type.tests.backportUnittest import expectedFailure
 from Products.ERP5Type.Document.BusinessTemplate import getChainByType
 
@@ -49,73 +49,6 @@ class TestERP5SimulationMixin(TestInvoiceMixin):
     pay_business_link.setSource('account_module/bank')
     pay_business_link.setDestination('account_module/bank')
 
-  @UnrestrictedMethod
-  def createInvoiceTransactionRule(self, resource=None):
-    """Create a sale invoice transaction rule with only one cell for
-    product_line/apparel and default_region
-    The accounting rule cell will have the provided resource, but this his more
-    or less optional (as long as price currency is set correctly on order)
-    """
-    portal = self.portal
-    account_module = portal.account_module
-    for account_id, account_gap, account_type \
-               in self.account_definition_list:
-      if not account_id in account_module.objectIds():
-        account = account_module.newContent(id=account_id)
-        account.setGap(account_gap)
-        account.setAccountType(account_type)
-        portal.portal_workflow.doActionFor(account, 'validate_action')
-    invoice_rule = portal.portal_rules.new_invoice_transaction_simulation_rule
-    if invoice_rule.getValidationState() == 'validated':
-      invoice_rule.invalidate()
-    invoice_rule.deleteContent(list(invoice_rule.contentIds(filter={'portal_type':['Predicate', 'Accounting Rule Cell']})))
-    transaction.commit()
-    self.tic()
-    region_predicate = invoice_rule.newContent(portal_type = 'Predicate')
-    product_line_predicate = invoice_rule.newContent(portal_type = 'Predicate')
-    region_predicate.edit(
-      membership_criterion_base_category_list = ['destination_region'],
-      membership_criterion_category_list =
-                   ['destination_region/region/%s' % self.default_region ],
-      int_index = 1,
-      string_index = 'region'
-    )
-    product_line_predicate.edit(
-      membership_criterion_base_category_list = ['product_line'],
-      membership_criterion_category_list =
-                            ['product_line/apparel'],
-      int_index = 1,
-      string_index = 'product'
-    )
-    product_line_predicate.immediateReindexObject()
-    region_predicate.immediateReindexObject()
-
-    invoice_rule.updateMatrix()
-    cell_list = invoice_rule.getCellValueList(base_id='movement')
-    self.assertEquals(len(cell_list),1)
-    cell = cell_list[0]
-
-    for line_id, line_source_id, line_destination_id, line_ratio in \
-        self.transaction_line_definition_list:
-      line = cell.newContent(id=line_id,
-          portal_type='Accounting Transaction Line', quantity=line_ratio,
-          resource_value=resource,
-          source_value=account_module[line_source_id],
-          destination_value=account_module[line_destination_id])
-
-    invoice_rule.validate()
-    transaction.commit()
-    self.tic()
-
-  def validateNewRules(self):
-    # create an Order Rule document.
-    portal_rules = self.portal.portal_rules
-    new_order_rule = filter(
-      lambda x:x.title == 'New Default Order Root Simulation Rule',
-      portal_rules.objectValues(portal_type='Order Root Simulation Rule'))[0]
-    if new_order_rule.getValidationState() != 'validated':
-      new_order_rule.validate()
-
 class TestERP5Simulation(TestERP5SimulationMixin, ERP5TypeTestCase):
   run_all_test = 1
   quiet = 0
@@ -277,52 +210,7 @@ class TestERP5Simulation(TestERP5SimulationMixin, ERP5TypeTestCase):
 
     sequence_list.play(self, quiet=quiet)
 
-class TestERP5SimulationInvoice(TestERP5SimulationMixin, TestSaleInvoice):
-  quiet = TestSaleInvoice.quiet
-
-  def test_09_InvoiceChangeStartDateFail(self, quiet=quiet):
-    """
-    Change the start_date of a Invoice Line,
-    check that the invoice is divergent,
-    then accept decision, and check Packing list is *not* divergent,
-    because Unify Solver does not propagage the change to the upper
-    simulation movement.
-    """
-    if not quiet:
-      self.logMessage('Invoice Change Sart Date')
-    sequence = self.PACKING_LIST_DEFAULT_SEQUENCE + \
-    """
-    stepSetReadyPackingList
-    stepTic
-    stepStartPackingList
-    stepCheckInvoicingRule
-    stepCheckInvoiceTransactionRule
-    stepTic
-    stepCheckInvoiceBuilding
-
-    stepChangeInvoiceStartDate
-    stepCheckInvoiceIsDivergent
-    stepCheckInvoiceIsCalculating
-    stepTic
-    stepCheckInvoiceIsDiverged
-    stepUnifyStartDateWithDecisionInvoice
-    stepTic
-
-    stepCheckInvoiceNotSplitted
-    stepCheckInvoiceIsNotDivergent
-    stepCheckInvoiceIsSolved
-
-    stepCheckPackingListIsNotDivergent
-    stepCheckPackingListIsSolved
-    stepCheckInvoiceTransactionRule
-
-    stepRebuildAndCheckNothingIsCreated
-    stepCheckInvoicesConsistency
-    """
-    self.playSequence(sequence, quiet=quiet)
-
-class TestAutomaticSolvingPackingList(TestERP5SimulationMixin, TestPackingListMixin,
-                                      ERP5TypeTestCase):
+class TestAutomaticSolvingPackingList(TestPackingListMixin, ERP5TypeTestCase):
   quiet = 0
 
   def afterSetUp(self, quiet=1, run=1):
@@ -424,7 +312,5 @@ class TestAutomaticSolvingPackingList(TestERP5SimulationMixin, TestPackingListMi
 def test_suite():
   suite = unittest.TestSuite()
   suite.addTest(unittest.makeSuite(TestERP5Simulation))
-  suite.addTest(unittest.makeSuite(TestERP5SimulationPackingList))
-  suite.addTest(unittest.makeSuite(TestERP5SimulationInvoice))
   suite.addTest(unittest.makeSuite(TestAutomaticSolvingPackingList))
   return suite
diff --git a/product/ERP5/tests/testInvoice.py b/product/ERP5/tests/testInvoice.py
index c29480869b..2258480abc 100644
--- a/product/ERP5/tests/testInvoice.py
+++ b/product/ERP5/tests/testInvoice.py
@@ -42,10 +42,8 @@ from Acquisition import aq_parent
 from zLOG import LOG
 from Products.ERP5Type.tests.Sequence import SequenceList
 from testPackingList import TestPackingListMixin
-from testAccountingRules import TestAccountingRulesMixin
 
-class TestInvoiceMixin(TestPackingListMixin,
-                       TestAccountingRulesMixin,):
+class TestInvoiceMixin(TestPackingListMixin):
   """Test methods for invoices
   """
   default_region = "europe/west/france"
@@ -120,21 +118,12 @@ class TestInvoiceMixin(TestPackingListMixin,
   def afterSetUp(self):
     self.createCategories()
     self.validateRules()
+    self.createBusinessProcess()
     self.login()
-    self.oldMailHost = getattr(self.portal, 'MailHost', None)
-    if self.oldMailHost is not None:
-      self.portal.manage_delObjects(['MailHost'])
-      self.portal._setObject('MailHost', DummyMailHost('MailHost'))
-    transaction.commit()
-    self.tic()
 
   def beforeTearDown(self):
     transaction.abort()
-    self.tic()
-    # restore the original MailHost
-    if self.oldMailHost is not None:
-      self.portal.manage_delObjects(['MailHost'])
-      self.portal._setObject('MailHost', DummyMailHost('MailHost'))
+    super(TestInvoiceMixin, self).beforeTearDown()
     for folder in (self.portal.accounting_module,
                    self.portal.organisation_module,
                    self.portal.sale_order_module,
@@ -142,9 +131,7 @@ class TestInvoiceMixin(TestPackingListMixin,
                    self.portal.sale_packing_list_module,
                    self.portal.purchase_packing_list_module,
                    self.portal.portal_simulation,):
-      
       folder.manage_delObjects([x for x in folder.objectIds() if x not in ('organisation_1','organisation_2','ppl_1','ppl_2')])
-     
     transaction.commit()
     self.tic()
 
@@ -156,68 +143,44 @@ class TestInvoiceMixin(TestPackingListMixin,
     user = uf.getUserById('test_invoice_user').__of__(uf)
     newSecurityManager(None, user)
 
-  def stepCreateSaleInvoiceTransactionRule(self, sequence, **kw) :
-    """Create the rule for accounting. """
-    self.createInvoiceTransactionRule(resource=sequence.get('resource'))
+  ## XXX move this to "Sequence class"
+  def playSequence(self, sequence_string, quiet=0) :
+    sequence_list = SequenceList()
+    sequence_list.addSequenceString(sequence_string)
+    sequence_list.play(self, quiet=quiet)
 
-  @UnrestrictedMethod
-  def createInvoiceTransactionRule(self, resource=None):
-    """Create a sale invoice transaction rule with only one cell for
-    product_line/apparel and default_region
-    The accounting rule cell will have the provided resource, but this his more
-    or less optional (as long as price currency is set correctly on order)
-    """
+  def createBusinessProcess(self):
     portal = self.portal
-    account_module = portal.account_module
-    for account_id, account_gap, account_type \
-               in self.account_definition_list:
-      if not account_id in account_module.objectIds():
-        account = account_module.newContent(id=account_id)
-        account.setGap(account_gap)
-        account.setAccountType(account_type)
-        portal.portal_workflow.doActionFor(account, 'validate_action')
-
-    invoice_rule = portal.portal_rules.default_invoice_transaction_simulation_rule
-    if invoice_rule.getValidationState() == 'validated':
-      invoice_rule.invalidate()
-    invoice_rule.deleteContent(list(invoice_rule.objectIds()))
-    transaction.commit()
-    self.tic()
-    region_predicate = invoice_rule.newContent(portal_type = 'Predicate')
-    product_line_predicate = invoice_rule.newContent(portal_type = 'Predicate')
-    region_predicate.edit(
-      membership_criterion_base_category_list = ['destination_region'],
-      membership_criterion_category_list =
-                   ['destination_region/region/%s' % self.default_region ],
-      int_index = 1,
-      string_index = 'region'
-    )
-    product_line_predicate.edit(
-      membership_criterion_base_category_list = ['product_line'],
-      membership_criterion_category_list =
-                            ['product_line/apparel'],
-      int_index = 1,
-      string_index = 'product'
-    )
-    product_line_predicate.immediateReindexObject()
-    region_predicate.immediateReindexObject()
-
-    invoice_rule.updateMatrix()
-    cell_list = invoice_rule.getCellValueList(base_id='movement')
-    self.assertEquals(len(cell_list),1)
-    cell = cell_list[0]
-
-    for line_id, line_source_id, line_destination_id, line_ratio in \
-        self.transaction_line_definition_list:
-      line = cell.newContent(id=line_id,
-          portal_type='Accounting Transaction Line', quantity=line_ratio,
-          resource_value=resource,
+    business_process_id = self.__class__.__name__
+    try:
+      business_process = portal.business_process_module[business_process_id]
+    except KeyError:
+      business_process = portal.business_process_module.newContent(
+        business_process_id, 'Business Process',
+        specialise=self.__class__.business_process)
+      kw = dict(portal_type='Trade Model Path',
+                trade_phase='default/accounting',
+                trade_date='trade_phase/default/invoicing',
+                membership_criterion_base_category_list=('destination_region',
+                                                         'product_line'),
+                membership_criterion_category=(
+                  'destination_region/region/' + self.default_region,
+                  'product_line/apparel'))
+      account_module = portal.account_module
+      for account_id, account_gap, account_type in self.account_definition_list:
+        if not account_module.has_key(account_id):
+          account = account_module.newContent(account_id, gap=account_gap,
+                                              account_type=account_type)
+          portal.portal_workflow.doActionFor(account, 'validate_action')
+      for line_id, line_source_id, line_destination_id, line_ratio in \
+          self.transaction_line_definition_list:
+        business_process.newContent(
+          reference='accounting_' + line_id,
+          efficiency=line_ratio,
           source_value=account_module[line_source_id],
-          destination_value=account_module[line_destination_id])
-
-    invoice_rule.validate()
-    transaction.commit()
-    self.tic()
+          destination_value=account_module[line_destination_id],
+          **kw)
+    self.business_process = business_process.getRelativeUrl()
 
   def stepCreateEntities(self, sequence, **kw) :
     """Create a vendor and two clients. """
@@ -727,7 +690,7 @@ class TestInvoiceMixin(TestPackingListMixin,
         portal_type=self.invoice_transaction_line_portal_type)))
     self.assertEquals(3,len(new_invoice.objectValues(
         portal_type=self.invoice_transaction_line_portal_type)))
-    account_module = self.getAccountModule()
+    account_module = self.portal.account_module
     found_dict = {}
     for line in invoice.objectValues(
         portal_type=self.invoice_transaction_line_portal_type):
@@ -761,7 +724,7 @@ class TestInvoiceMixin(TestPackingListMixin,
                                            sequence_list=None, **kw):
     """Rebuilds with sale_invoice_builder and checks nothing more is
     created. """
-    accounting_module = self.getAccountingModule()
+    accounting_module = self.portal.accounting_module
     portal_type_list = ('Sale Invoice Transaction', 'Purchase Invoice Transaction')
     sale_invoice_transaction_count = len(accounting_module.objectValues(
       portal_type=portal_type_list))
@@ -1195,8 +1158,6 @@ class TestInvoice(TestInvoiceMixin):
                                 portal_type='Currency',
                                 title='Currency',
                                 base_unit_quantity=0.01)
-    self.createInvoiceTransactionRule(currency)
-
     client = self.portal.organisation_module.newContent(
                             portal_type='Organisation',
                             title='Client',
@@ -1209,6 +1170,7 @@ class TestInvoice(TestInvoiceMixin):
                             default_address_region=self.default_region)
     order = self.portal.getDefaultModule(self.order_portal_type).newContent(
                               portal_type=self.order_portal_type,
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -1266,6 +1228,7 @@ class TestInvoice(TestInvoiceMixin):
                             price_currency= currency.getRelativeUrl())
     order = self.portal.getDefaultModule(self.order_portal_type).newContent(
                               portal_type=self.order_portal_type,
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -1457,8 +1420,6 @@ class TestInvoice(TestInvoiceMixin):
                                 portal_type='Currency',
                                 title='Currency',
                                 base_unit_quantity=0.01)
-    self.createInvoiceTransactionRule(currency)
-
     client = self.portal.organisation_module.newContent(
                             portal_type='Organisation',
                             title='Client',
@@ -1469,6 +1430,7 @@ class TestInvoice(TestInvoiceMixin):
                             default_address_region=self.default_region)
     order = self.portal.getDefaultModule(self.order_portal_type).newContent(
                               portal_type=self.order_portal_type,
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -1675,6 +1637,7 @@ class TestInvoice(TestInvoiceMixin):
                               portal_type=self.invoice_portal_type,
                               start_date=DateTime(2008, 12, 31),
                               title='Invoice',
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -1714,6 +1677,7 @@ class TestInvoice(TestInvoiceMixin):
                               portal_type=self.invoice_portal_type,
                               start_date=DateTime(2008, 12, 31),
                               title='Invoice',
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -1765,6 +1729,7 @@ class TestInvoice(TestInvoiceMixin):
                               portal_type=self.invoice_portal_type,
                               start_date=DateTime(2008, 12, 31),
                               title='Invoice',
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -1804,6 +1769,7 @@ class TestInvoice(TestInvoiceMixin):
                             title='Vendor')
     order = self.portal.getDefaultModule(self.order_portal_type).newContent(
                               portal_type=self.order_portal_type,
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -1900,6 +1866,7 @@ class TestInvoice(TestInvoiceMixin):
     no_order_packing_list = \
 self.portal.getDefaultModule(self.packing_list_portal_type).newContent(
                               portal_type=self.packing_list_portal_type,
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -1992,6 +1959,7 @@ self.portal.getDefaultModule(self.packing_list_portal_type).newContent(
                             title='Vendor')
     order = self.portal.getDefaultModule(self.order_portal_type).newContent(
                               portal_type=self.order_portal_type,
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -2088,6 +2056,7 @@ self.portal.getDefaultModule(self.packing_list_portal_type).newContent(
                             title='Vendor')
     order = self.portal.getDefaultModule(self.order_portal_type).newContent(
                               portal_type=self.order_portal_type,
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -2173,7 +2142,6 @@ self.portal.getDefaultModule(self.packing_list_portal_type).newContent(
                                 portal_type='Currency',
                                 title='euro')
     currency.setBaseUnitQuantity(0.01)
-    self.createInvoiceTransactionRule(currency)
     transaction.commit()
     self.tic()#execute transaction
     client = self.portal.organisation_module.newContent(
@@ -2186,6 +2154,7 @@ self.portal.getDefaultModule(self.packing_list_portal_type).newContent(
                             default_address_region=self.default_region)
     order = self.portal.getDefaultModule(self.order_portal_type).newContent(
                               portal_type=self.order_portal_type,
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -2250,6 +2219,7 @@ self.portal.getDefaultModule(self.packing_list_portal_type).newContent(
                             default_address_region=self.default_region)
     order = self.portal.getDefaultModule(self.order_portal_type).newContent(
                               portal_type=self.order_portal_type,
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -2470,7 +2440,6 @@ class TestSaleInvoiceMixin(TestInvoiceMixin,
   PACKING_LIST_DEFAULT_SEQUENCE = """
       stepCreateEntities
       stepCreateCurrency
-      stepCreateSaleInvoiceTransactionRule
       stepCreateOrder
       stepSetOrderProfile
       stepSetOrderPriceCurrency
@@ -2498,7 +2467,6 @@ class TestSaleInvoiceMixin(TestInvoiceMixin,
   PACKING_LIST_TWO_LINES_DEFAULT_SEQUENCE = """
       stepCreateEntities
       stepCreateCurrency
-      stepCreateSaleInvoiceTransactionRule
       stepCreateOrder
       stepSetOrderProfile
       stepSetOrderPriceCurrency
@@ -2532,7 +2500,6 @@ class TestSaleInvoiceMixin(TestInvoiceMixin,
   TWO_PACKING_LIST_DEFAULT_SEQUENCE = """
       stepCreateEntities
       stepCreateCurrency
-      stepCreateSaleInvoiceTransactionRule
       stepCreateOrder
       stepSetOrderProfile
       stepSetOrderPriceCurrency
@@ -2602,6 +2569,7 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase):
         stepRebuildAndCheckNothingIsCreated
         stepCheckInvoicesConsistency
         stepCheckInvoiceLineHasReferenceAndIntIndex
+        Pdb
       """)
     sequence_list.play(self, quiet=quiet)
 
@@ -2665,6 +2633,7 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase):
         stepEditInvoice
         stepCheckInvoiceRuleNotAppliedOnInvoiceEdit
         stepCheckInvoicesConsistency
+        stepTic
       """)
     sequence_list.play(self, quiet=quiet)
 
@@ -2683,6 +2652,7 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase):
         stepEditPackingList
         stepCheckDeliveryRuleNotAppliedOnPackingListEdit
         stepCheckInvoicesConsistency
+        stepTic
       """)
     sequence_list.play(self, quiet=quiet)
 
@@ -2731,6 +2701,7 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase):
       stepCheckInvoiceBuilding
       stepRebuildAndCheckNothingIsCreated
       stepCheckInvoicesConsistency
+      stepTic
     """)
     sequence_list.play(self, quiet=quiet)
 
@@ -2804,10 +2775,12 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase):
     """
     Change the start_date of a Invoice Line,
     check that the invoice is divergent,
-    then accept decision, and check Packing list is divergent
+    then accept decision, and check Packing list is *not* divergent,
+    because Unify Solver does not propagage the change to the upper
+    simulation movement.
     """
     if not quiet:
-      self.logMessage('Invoice Change Sart Date')
+      self.logMessage('Invoice Change Start Date')
     sequence = self.PACKING_LIST_DEFAULT_SEQUENCE + \
     """
     stepSetReadyPackingList
@@ -2830,7 +2803,12 @@ class TestSaleInvoice(TestSaleInvoiceMixin, TestInvoice, ERP5TypeTestCase):
     stepCheckInvoiceIsNotDivergent
     stepCheckInvoiceIsSolved
 
-    stepCheckPackingListIsDivergent
+    stepCheckPackingListIsNotDivergent
+    stepCheckPackingListIsSolved
+    stepCheckInvoiceTransactionRule
+
+    stepRebuildAndCheckNothingIsCreated
+    stepCheckInvoicesConsistency
     """
     self.playSequence(sequence, quiet=quiet)
 
@@ -3504,7 +3482,6 @@ class TestPurchaseInvoice(TestInvoice, ERP5TypeTestCase):
   PACKING_LIST_DEFAULT_SEQUENCE = """
       stepCreateEntities
       stepCreateCurrency
-      stepCreateSaleInvoiceTransactionRule
       stepCreateOrder
       stepSetOrderProfile
       stepSetOrderPriceCurrency
diff --git a/product/ERP5/tests/testOrder.py b/product/ERP5/tests/testOrder.py
index 1b03c20dd3..c8f6a02363 100644
--- a/product/ERP5/tests/testOrder.py
+++ b/product/ERP5/tests/testOrder.py
@@ -51,6 +51,7 @@ class TestOrderMixin(SubcontentReindexingWrapper):
   order_line_portal_type = 'Sale Order Line'
   order_cell_portal_type = 'Sale Order Cell'
   applied_rule_portal_type = 'Applied Rule'
+  simulation_movement_portal_type = 'Simulation Movement'
   datetime = DateTime()
   packing_list_portal_type = 'Sale Packing List'
   packing_list_line_portal_type = 'Sale Packing List Line'
diff --git a/product/ERP5/tests/testPackingList.py b/product/ERP5/tests/testPackingList.py
index 9381cf71a3..8d200a99ab 100644
--- a/product/ERP5/tests/testPackingList.py
+++ b/product/ERP5/tests/testPackingList.py
@@ -1464,7 +1464,7 @@ class TestPackingList(TestPackingListMixin, ERP5TypeTestCase) :
     packing_list = self.portal.getDefaultModule(self.packing_list_portal_type).newContent(
                               portal_type=self.packing_list_portal_type,
                               title='Packing List',
-                              specialise='business_process_module/erp5_default_business_process',
+                              specialise=self.business_process,
                               source_value=vendor,
                               source_section_value=vendor,
                               destination_value=client,
@@ -1538,7 +1538,7 @@ class TestPackingList(TestPackingListMixin, ERP5TypeTestCase) :
         portal_type=self.packing_list_portal_type,
         source_value=source,
         destination_value=destination,
-        specialise='business_process_module/erp5_default_business_process',
+        specialise=self.business_process,
         start_date=DateTime())
     packing_list_line = packing_list.newContent(
         portal_type=self.packing_list_line_portal_type,
@@ -1778,9 +1778,7 @@ class TestSolvingPackingList(TestPackingListMixin, ERP5TypeTestCase):
     self.portal.portal_solvers.manage_delObjects(self.added_target_solver_list)
     transaction.commit()
     self.tic()
-    beforeTearDown = getattr(TestPackingListMixin, 'beforeTearDown',
-                             ERP5TypeTestCase.beforeTearDown)
-    beforeTearDown(self)
+    super(TestSolvingPackingList, self).beforeTearDown()
 
   @UnrestrictedMethod
   def _setUpTargetSolver(self, solver_id, solver_class, tested_property_list):
-- 
2.30.9