From 2e256ba9abee6d50ed651c284d724fa53ce390ae Mon Sep 17 00:00:00 2001 From: Sebastien Robin <seb@nexedi.com> Date: Mon, 19 Apr 2004 15:27:57 +0000 Subject: [PATCH] submitting a bad version before rewriting git-svn-id: https://svn.erp5.org/repos/public/erp5/trunk@699 20353a03-c40f-0410-a6d1-a30d3c3de9de --- product/Coramy/tests/testOrder.py | 471 ++++++++++++++++++++++++++++++ 1 file changed, 471 insertions(+) create mode 100755 product/Coramy/tests/testOrder.py diff --git a/product/Coramy/tests/testOrder.py b/product/Coramy/tests/testOrder.py new file mode 100755 index 0000000000..f43b6f4bae --- /dev/null +++ b/product/Coramy/tests/testOrder.py @@ -0,0 +1,471 @@ +############################################################################## +# +# Copyright (c) 2004 Nexedi SARL and Contributors. All Rights Reserved. +# Sebastien Robin <seb@nexedi.com> +# +# WARNING: This program as such is intended to be used by professional +# programmers who take the whole responsability 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 +# garantees 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. +# +############################################################################## + + + +# +# Skeleton ZopeTestCase +# + +from random import randint + +import os, sys +if __name__ == '__main__': + execfile(os.path.join(sys.path[0], 'framework.py')) + +# Needed in order to have a log file inside the current folder +os.environ['EVENT_LOG_FILE'] = os.path.join(os.getcwd(), 'zLOG.log') +os.environ['EVENT_LOG_SEVERITY'] = '-300' + +from Testing import ZopeTestCase +from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase +from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager +from DateTime import DateTime +from Acquisition import aq_base, aq_inner +from zLOG import LOG +import time + +class SequenceTest: + + def play(self): + pass + + def append(self): + pass + + + +class TestOrder(ERP5TypeTestCase): + + # Different variables used for this test + run_all_test = 1 + source_company_id = 'Nexedi' + destination_company_stock = 'site/Stock_MP/Gravelines' + destination_company_group = 'group/Coramy' + destination_company_id = 'Coramy' + component_id = 'brick' + sales_order_id = '1' + purchase_order_id = '1' + quantity = 10 + base_price = 0.7832 + + def getBusinessTemplateList(self): + """ + Return the list of business templates. + + the business template crm give the following things : + modules: + - person + - organisation + base categories: + - region + - subordination + + /organisation + """ + return ('erp5_crm','coramy_order') + + def getCategoriesTool(self): + return getattr(self.getPortal(), 'portal_categories', None) + + def getCatalogTool(self): + return getattr(self.getPortal(), 'portal_catalog', None) + + def getSqlConnection(self): + return getattr(self.getPortal(), 'erp5_sql_connection', None) + + def getTypesTool(self): + return getattr(self.getPortal(), 'portal_types', None) + + def getSimulationTool(self): + return getattr(self.getPortal(), 'portal_simulation', None) + + def getRuleTool(self): + return getattr(self.getPortal(), 'portal_Rules', None) + + def getPersonModule(self): + return getattr(self.getPortal(), 'person', None) + + def getOrganisationModule(self): + return getattr(self.getPortal(), 'organisation', None) + + def getSalesModule(self): + return getattr(self.getPortal(), 'commande_vente', None) + + def getComponentModule(self): + return getattr(self.getPortal(), 'composant', None) + + def getPortalId(self): + return self.getPortal().getId() + +# def testHasEverything(self, quiet=0, run=run_all_test): +# # Test if portal_synchronizations was created +# if not run: return +# if not quiet: +# ZopeTestCase._print('\nTest Has Everything ') +# LOG('Testing... ',0,'testHasEverything') +# self.failUnless(self.getCategoriesTool()!=None) +# self.failUnless(self.getPersonModule()!=None) +# self.failUnless(self.getOrganisationModule()!=None) +# self.failUnless(self.getSalesModule()!=None) +# self.failUnless(self.getComponentModule()!=None) +# self.failUnless(self.getSimulationTool()!=None) + + #def populate(self, quiet=1, run=1): + def afterSetUp(self, quiet=1, run=1): + self.login() + portal = self.getPortal() + portal_catalog = self.getCatalogTool() + portal_catalog.manage_catalogClear() + # First reindex + # portal.ERP5Site_reindexAll() + LOG('afterSetup',0,'portal.portal_categories.immediateReindexObject') + portal.portal_categories.immediateReindexObject() + for o in portal.portal_categories.objectValues(): + o.recursiveImmediateReindexObject() + LOG('afterSetup',0,'portal.portal_simulation.immediateReindexObject') + portal.portal_simulation.immediateReindexObject() + for o in portal.portal_simulation.objectValues(): + o.recursiveImmediateReindexObject() + LOG('afterSetup',0,'portal.portal_rules.immediateReindexObject') + portal.portal_rules.immediateReindexObject() + # Then add new components + portal.portal_types.constructContent(type_name='Person Module', + container=portal, + id='person') + portal.portal_types.constructContent(type_name='Organisation Module', + container=portal, + id='organisation') + portal.portal_types.constructContent(type_name='Sales Order Module', + container=portal, + id='commande_vente') + portal.portal_types.constructContent(type_name='Purchase Order Module', + container=portal, + id='commande_achat') + portal.portal_types.constructContent(type_name='Purchase Packing List Module', + container=portal, + id='livraison_vente') + portal.portal_types.constructContent(type_name='Sales Packing List Module', + container=portal, + id='livraison_achat') + portal.portal_types.constructContent(type_name='Composant Module', + container=portal, + id='composant') + portal.portal_types.constructContent(type_name='Production Order Module', + container=portal, + id='ordre_fabrication') + organisation_module = self.getOrganisationModule() + o1 = organisation_module.newContent(id=self.source_company_id) + o2 = organisation_module.newContent(id=self.destination_company_id) + component_module = self.getComponentModule() + c1 = component_module.newContent(id=self.component_id) + c1.setBasePrice(self.base_price) + + def login(self, quiet=0, run=run_all_test): + uf = self.getPortal().acl_users + uf._doAddUser('seb', '', ['Manager'], []) + user = uf.getUserById('seb').__of__(uf) + newSecurityManager(None, user) + +# def testAddSalesOrder(self, quiet=0, run=0): +# # Test if we can add a complete sales order +# if not run: return +# if not quiet: +# ZopeTestCase._print('\nTest Add Sales Order ') +# LOG('Testing... ',0,'testAddSalesOrder') +# # Test if we can add a complete sales order +# sales_module = self.getSalesModule() +# sales_order = sales_module.newContent(id=self.sales_order_id,portal_type='Sales Order') +# source_company = self.getOrganisationModule()._getOb(self.source_company_id) +# sales_order.setSourceValue(source_company) +# destination_company = self.getOrganisationModule()._getOb(self.destination_company_id) +# sales_order.setDestinationValue(destination_company) +# # Set date +# date = DateTime() # the value is now +# target_start_date = date + 10 # Add 10 days +# target_stop_date = date + 12 # Add 12 days +# sales_order.setTargetStartDate(target_start_date) +# sales_order.setTargetStopDate(target_stop_date) +# # Set Profile +# sales_order.setSourceValue(source_company) +# sales_order.setSourceSectionValue(source_company) +# sales_order.setSourceDecisionValue(source_company) +# sales_order.setSourceAdministrationValue(source_company) +# sales_order.setSourcePaymentValue(source_company) +# sales_order.setDestinationValue(destination_company) +# sales_order.setDestinationSectionValue(destination_company) +# sales_order.setDestinationDecisionValue(destination_company) +# sales_order.setDestinationAdministrationValue(destination_company) +# sales_order.setDestinationPaymentValue(destination_company) +# # Add a sales order line +# sales_order_line = sales_order.newContent(id='1',portal_type='Sales Order Line') +# component_module = self.getComponentModule() +# component = component_module._getOb(self.component_id) +# sales_order_line.setResourceValue(component) +# self.assertEquals(sales_order_line.getResourceValue(),component) +# sales_order_line.setTargetQuantity(self.quantity) +# # Look if the profile is good +# self.failUnless(sales_order.getSourceValue()!=None) +# self.failUnless(sales_order.getDestinationValue()!=None) +# self.failUnless(sales_order.getSourceSectionValue()!=None) +# self.failUnless(sales_order.getDestinationSectionValue()!=None) +# self.failUnless(sales_order.getSourceDecisionValue()!=None) +# self.failUnless(sales_order.getDestinationDecisionValue()!=None) +# self.failUnless(sales_order.getSourceAdministrationValue()!=None) +# self.failUnless(sales_order.getDestinationAdministrationValue()!=None) +# self.failUnless(sales_order.getSourcePaymentValue()!=None) +# self.failUnless(sales_order.getDestinationPaymentValue()!=None) +# # See what's the output of Order_lightControl +# result=sales_order.Order_lightControl() +# self.assertEquals(result,'') +# sales_order.confirm() + + def AddPurchaseOrder(self, quiet=0, run=0): + # Test if we can add a complete sales order + if not run: return + if not quiet: + ZopeTestCase._print('\nTest Add Purchase Order ') + LOG('Testing... ',0,'testAddPurchaseOrder') + # Test if we can add a complete sales order + purchase_module = self.getSalesModule() + purchase_order = purchase_module.newContent(id=self.purchase_order_id,portal_type='Sales Order') + source_company = self.getOrganisationModule()._getOb(self.source_company_id) + purchase_order.setSourceValue(source_company) + destination_company = self.getOrganisationModule()._getOb(self.destination_company_id) + purchase_order.setDestinationValue(destination_company) + # Set date + date = DateTime() # the value is now + target_start_date = date + 10 # Add 10 days + target_stop_date = date + 12 # Add 12 days + purchase_order.setTargetStartDate(target_start_date) + purchase_order.setTargetStopDate(target_stop_date) + # Set Profile + portal_categories = self.getCategoriesTool() + stock_category = portal_categories.resolveCategory(self.destination_company_stock) + group_category = portal_categories.resolveCategory(self.destination_company_group) + purchase_order.setSourceValue(source_company) + purchase_order.setSourceSectionValue(source_company) + purchase_order.setSourceDecisionValue(source_company) + purchase_order.setSourceAdministrationValue(source_company) + purchase_order.setSourcePaymentValue(source_company) + purchase_order.setDestinationValue(stock_category) + purchase_order.setDestinationSectionValue(group_category) + purchase_order.setDestinationDecisionValue(destination_company) + purchase_order.setDestinationAdministrationValue(destination_company) + purchase_order.setDestinationPaymentValue(destination_company) + # Add a purchase order line + purchase_order_line = purchase_order.newContent(id='1',portal_type='Sales Order Line') + component_module = self.getComponentModule() + component = component_module._getOb(self.component_id) + purchase_order_line.setResourceValue(component) + self.assertEquals(purchase_order_line.getResourceValue(),component) + purchase_order_line.setTargetQuantity(self.quantity) + # Look if the profile is good + self.failUnless(purchase_order.getSourceValue()!=None) + self.failUnless(purchase_order.getDestinationValue()!=None) + self.failUnless(purchase_order.getSourceSectionValue()!=None) + self.failUnless(purchase_order.getDestinationSectionValue()!=None) + self.failUnless(purchase_order.getSourceDecisionValue()!=None) + self.failUnless(purchase_order.getDestinationDecisionValue()!=None) + self.failUnless(purchase_order.getSourceAdministrationValue()!=None) + self.failUnless(purchase_order.getDestinationAdministrationValue()!=None) + self.failUnless(purchase_order.getSourcePaymentValue()!=None) + self.failUnless(purchase_order.getDestinationPaymentValue()!=None) + # See what's the output of Order_lightControl + result=purchase_order.Order_lightControl() + self.assertEquals(result,'') + purchase_order.confirm() + portal = self.getPortal() + #message_list = portal.portal_activities.getMessageList() + #LOG('testAddPurchaseOrder... message_list:',0,message_list) + sql_connection = self.getSqlConnection() + sql = 'select * from message' + result = sql_connection.manage_test(sql) + for line in result: + LOG('testAddPurchaseOrder... method_id in message table:',0,line['method_id']) + return purchase_order + + +# def testPlanSimpleOrder(self, quiet=0, run=0): +# # Test if we can add a complete sales order +# if not run: return +# if not quiet: +# ZopeTestCase._print('\nTest Plan Simple Order ') +# LOG('Testing... ',0,'testPlanSimpleOrder') +# portal = self.getPortal() +# self.testAddSalesOrder(quiet=1,run=1) +# sales_module = self.getSalesModule() +# sales_order = sales_module._getOb(self.sales_order_id) +# sales_order_line = sales_order._getOb('1') +# #self.assertEquals(len(sales_order_line.objectValues()),0) +# # Test Before if there is uid on portal_simulation +# simulation_tool = self.getSimulationTool() +# LOG('testPlanSimpleOrder.CHECK',0,portal.portal_simulation.uid) +# LOG('testPlanSimpleOrder.CHECK2',0,getattr(aq_base(simulation_tool),'uid',None)) +# #LOG('testPlanSimpleOrder',0,'portal.portal_simulation.immediateReindexObject') +# #LOG('testPlanSimpleOrder, portal_simulation',0,simulation_tool) +# sql_connection = self.getSqlConnection() +# sql = 'select uid from catalog' +# result = sql_connection.manage_test(sql) +# uid_list = map(lambda x: x['uid'],result) +# LOG('testPlanSimpleOrder, uid_list',0,uid_list) +# portal_id = self.getPortalId() +# #simulation_tool.immediateReindexObject() +# # Get the movement index +# #LOG('testPlanSimpleOrder, movementIndex:',0,sales_order.getMovementIndex()) +# for m in portal.portal_activities.getMessageList(): +# portal.portal_activities.invoke(m) +# LOG('Testing... message:',0,m) +# sales_order.plan() +# simulation_tool = self.getSimulationTool() +# simulation_object_list = simulation_tool.objectValues() +# self.assertEquals(len(simulation_object_list),1) +# simulation_object = simulation_object_list[0] +# self.assertEquals(simulation_object.getCausalityValue(),sales_order) +# # See what's the output of Order_heavyControl +# result=sales_order.Order_heavyControl() +# self.assertEquals(result,'') +# source_state_list = ('auto_planned', 'planned', 'ordered', 'confirmed', \ +# 'getting_ready', 'ready', 'started', 'stopped', 'delivered', 'invoiced') +# inventory_list = portal.SimulationTool_getGroupFutureInventoryList(simulation_state=source_state_list) +# for inventory in inventory_list: +# LOG('inventory.inventory',0,inventory['inventory']) +# LOG('inventory.section_title',0,inventory['section_title']) +# LOG('inventory.resource_title',0,inventory['resource_title']) +# LOG('inventory.resource_relative_url',0,inventory['resource_relative_url']) +# LOG('inventory.path',0,inventory['path']) +# LOG('inventory.variation_text',0,inventory['variation_text']) +# LOG('Testing... inventory_list',0,inventory_list) +# result = portal.SimulationTool_activateRequirementList() +# LOG('Testing... SimulationTool_activateRequirementList:',0,result) +# portal.portal_activities.distribute() +# portal.portal_activities.tic() +# for m in portal.portal_activities.getMessageList(): +# LOG('Testing... message:',0,m) +# portal.portal_activities.invoke(m) + + def testPlanPurchaseOrder(self, quiet=0, run=run_all_test): + # Test if we can add a complete sales order + if not run: return + if not quiet: + ZopeTestCase._print('\nTest Plan Simple Order ') + LOG('Testing... ',0,'testPlanSimpleOrder') + portal = self.getPortal() + self.AddPurchaseOrder(quiet=1,run=1) + purchase_module = self.getSalesModule() + purchase_order = purchase_module._getOb(self.purchase_order_id) + purchase_order_line = purchase_order._getOb('1') + #self.assertEquals(len(purchase_order_line.objectValues()),0) + # Test Before if there is uid on portal_simulation + simulation_tool = self.getSimulationTool() + LOG('testPlanSimpleOrder.CHECK',0,portal.portal_simulation.uid) + LOG('testPlanSimpleOrder.CHECK2',0,getattr(aq_base(simulation_tool),'uid',None)) + #LOG('testPlanSimpleOrder',0,'portal.portal_simulation.immediateReindexObject') + #LOG('testPlanSimpleOrder, portal_simulation',0,simulation_tool) + sql_connection = self.getSqlConnection() + sql = 'select uid from catalog' + result = sql_connection.manage_test(sql) + uid_list = map(lambda x: x['uid'],result) + LOG('testPlanSimpleOrder, uid_list',0,uid_list) + portal_id = self.getPortalId() + #simulation_tool.immediateReindexObject() + # Get the movement index + #LOG('testPlanSimpleOrder, movementIndex:',0,purchase_order.getMovementIndex()) + #portal.portal_activities.distribute() + #portal.portal_activities.tic() + #message_list = portal.portal_activities.getMessageList() + #LOG('testPlanPurchaseOrder... message_list:',0,message_list) + #for m in message_list: + #portal.portal_activities.invoke(m) + #LOG('Testing... message:',0,m) + get_transaction().commit() + purchase_order.plan() + get_transaction().commit() + simulation_tool = self.getSimulationTool() + simulation_object_list = simulation_tool.objectValues() + self.assertEquals(len(simulation_object_list),1) + simulation_object = simulation_object_list[0] + self.assertEquals(simulation_object.getCausalityValue(),purchase_order) + # See what's the output of Order_heavyControl + result=purchase_order.Order_heavyControl() + self.assertEquals(result,'') + source_state_list = ('auto_planned', 'planned', 'ordered', 'confirmed', \ + 'getting_ready', 'ready', 'started', 'stopped', 'delivered', 'invoiced') + inventory_list = portal.SimulationTool_getGroupFutureInventoryList(simulation_state=source_state_list) + for inventory in inventory_list: + LOG('inventory.inventory',0,inventory['inventory']) + LOG('inventory.section_title',0,inventory['section_title']) + LOG('inventory.resource_title',0,inventory['resource_title']) + LOG('inventory.resource_relative_url',0,inventory['resource_relative_url']) + LOG('inventory.path',0,inventory['path']) + LOG('inventory.variation_text',0,inventory['variation_text']) + LOG('Testing... inventory_list',0,inventory_list) + result = portal.SimulationTool_activateRequirementList() + LOG('Testing... SimulationTool_activateRequirementList:',0,result) + portal.portal_activities.distribute() + portal.portal_activities.tic() + commande_vente = portal.commande_vente + commande_list = commande_vente.objectValues() + self.assertEquals(len(commande_list),1) + commande = commande_list[0] + + def testOrder(self, quiet=0,run=1): + sequence = Sequence() + Sequence.append('AddPurchaseOrder',repeatable=0,mandatory=1) + Sequence.append('tic',repeatable=1,mandatory=0) + Sequence.append('plan',repeatable=0,mandatory=1) + Sequence.append('tic',repeatable=1,mandatory=0) + Sequence.append('confirm',repeatable=0,mandatory=1) + Sequence.play('tic','plan','AddPurchaseOrder', + pass + + + + + + + +# vérifier quand confirmé, que les délivery sont bien créées + +# essayer en mode actif, combiner des morceaux de unit test précédent, +#a, b, tic, e, tic, f, tic +# genre on confirme quand l'applied rule n'est pas faite (elle est en faite +# dans le portal_activities + + + + +if __name__ == '__main__': + framework() +else: + import unittest + def test_suite(): + suite = unittest.TestSuite() + suite.addTest(unittest.makeSuite(TestOrder)) + return suite + -- 2.30.9