[Erp5-report] r31297 kazuhiko - /erp5/trunk/products/ERP5/tests/testERP5Simulation.py

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Dec 14 18:21:56 CET 2009


Author: kazuhiko
Date: Mon Dec 14 18:21:56 2009
New Revision: 31297

URL: http://svn.erp5.org?rev=31297&view=rev
Log:
initial commit of testERP5Simulation.py that is is experimental for new simulation implementation.

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

Added: erp5/trunk/products/ERP5/tests/testERP5Simulation.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testERP5Simulation.py?rev=31297&view=auto
==============================================================================
--- erp5/trunk/products/ERP5/tests/testERP5Simulation.py (added)
+++ erp5/trunk/products/ERP5/tests/testERP5Simulation.py [utf8] Mon Dec 14 18:21:56 2009
@@ -1,0 +1,140 @@
+##############################################################################
+#
+# Copyright (c) 2009 Nexedi SA and Contributors. All Rights Reserved.
+#
+# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+##############################################################################
+"""
+This test is experimental for new simulation implementation.
+"""
+
+import unittest
+import transaction
+
+from testPackingList import TestPackingList, TestPackingListMixin
+
+class TestERP5SimulationMixin(TestPackingListMixin):
+  def getBusinessTemplateList(self):
+    return list(TestPackingListMixin.getBusinessTemplateList(self)) + \
+           ['erp5_simulation',]
+
+  def afterSetUp(self, quiet=1, run=1):
+    TestPackingListMixin.afterSetUp(self, quiet, run)
+    self.validateNewRules()
+
+  def validateNewRules(self):
+    portal_types = self.portal.portal_types
+
+    # add New Order Rule in Rule Tool's allowed content types.
+    rule_tool_type = portal_types._getOb('Rule Tool')
+    if not 'New Order Rule' in rule_tool_type.getTypeAllowedContentTypeList():
+      rule_tool_type.edit(
+        type_allowed_content_type_list=rule_tool_type.getTypeAllowedContentTypeList() + ['New Order Rule'])
+
+    # select New Order Rule in 'SaleOrder_selectMovement' script.
+    script = self.portal.SaleOrder_selectMovement
+    script.write(script.read().replace("'Order Rule'", "'New Order Rule'"))
+
+    # create a New Order Rule document.
+    portal_rules = self.portal.portal_rules
+    if portal_rules._getOb('new_order_rule', None) is None:
+      new_order_rule = portal_rules.newContent(
+        portal_type='New Order Rule',
+        reference='default_order_rule',
+        version=2,
+        )
+      # create category divergence testers
+      for i in ('aggregate',
+                'base_application',
+                'base_contribution',
+                'destination',
+                'destination_account',
+                'destination_function',
+                'destination_project',
+                'destination_section',
+                'price_currency',
+                'source',
+                'source_account',
+                'source_function',
+                'source_project',
+                'source_section',):
+        new_order_rule.newContent(
+          portal_type='Category Membership Divergence Tester',
+          tested_property=i)
+      # create category divergence testers that is also used for matching
+      for i in ('resource',
+                'variation_category',):
+        new_order_rule.newContent(
+          portal_type='Category Membership Divergence Tester',
+          tested_property=i,
+          matching_provider=1)
+      # create datetime divergence testers
+      for i in ('start_date',
+                'stop_date',):
+        new_order_rule.newContent(
+          portal_type='DateTime Divergence Tester',
+          tested_property=i,
+          quantity=0)
+      # create float divergence testers
+      for i in ('quantity',):
+        new_order_rule.newContent(
+          portal_type='Float Divergence Tester',
+          tested_property=i,
+          use_delivery_ratio=1,
+          quantity=0)
+      new_order_rule.validate()
+
+class TestERP5Simulation(TestERP5SimulationMixin, TestPackingList):
+  def stepAcceptDecisionQuantity(self,sequence=None, sequence_list=None, **kw):
+    """
+    Solve quantity divergence by using solver tool.
+    """
+    packing_list = sequence.get('packing_list')
+    quantity_divergence = [x for x in packing_list.getDivergenceList() \
+                           if x.getProperty('tested_property') == 'quantity'][0]
+    solver_tool = self.portal.portal_solvers
+    # create a solver process
+    solver_process = solver_tool.newContent(portal_type='Solver Process')
+    # create a target solver
+    solver = solver_process.newContent(
+      portal_type='Accept Solver',
+      delivery=quantity_divergence.getProperty('object_relative_url')
+      )
+    # create a solver decision
+    solver_decision = solver_process.newContent(
+      portal_type='Solver Decision',
+      causality=quantity_divergence.getProperty('tester_relative_url'),
+      delivery=quantity_divergence.getProperty('object_relative_url'),
+      solver_value=solver,
+      )
+    # Solver Decision should be indexed to find the related Solver
+    # Decision document from a Target Solver document.
+    transaction.commit()
+    self.tic()
+    # then call solve() on solver process
+    solver_process.solve()
+
+def test_suite():
+  suite = unittest.TestSuite()
+  suite.addTest(unittest.makeSuite(TestERP5Simulation))
+  return suite




More information about the Erp5-report mailing list