[Erp5-report] r27004 - in /erp5/trunk/products/ERP5/tests: testInvoice.py testPackingList.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Fri May 15 14:18:09 CEST 2009
Author: luke
Date: Fri May 15 14:18:06 2009
New Revision: 27004
URL: http://svn.erp5.org?rev=27004&view=rev
Log:
- check for Delivery Rule and Invoice Rule simulation impact in various simulation states on typical documents related to those rules (Sale & Purchase Packing Lists and Invoices)
Modified:
erp5/trunk/products/ERP5/tests/testInvoice.py
erp5/trunk/products/ERP5/tests/testPackingList.py
Modified: erp5/trunk/products/ERP5/tests/testInvoice.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testInvoice.py?rev=27004&r1=27003&r2=27004&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testInvoice.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testInvoice.py [utf8] Fri May 15 14:18:06 2009
@@ -41,7 +41,7 @@
from Acquisition import aq_parent
from zLOG import LOG
from Products.ERP5Type.tests.Sequence import SequenceList
-from testPackingList import TestPackingListMixin
+from testPackingList import TestPackingListMixin, TestDeliveryRule
from testAccountingRules import TestAccountingRulesMixin
class TestInvoiceMixin(TestPackingListMixin,
@@ -2120,24 +2120,6 @@
portal_type=self.invoice_line_portal_type):
self.assertEquals(self.default_quantity + last_delta,
line.getQuantity())
-
- def stepAddInvoiceLinesManyTransactions(self, sequence=None, sequence_list=[]):
- """
- add some invoice and accounting lines to the invoice
- """
- invoice = sequence.get('invoice')
- invoice_line = invoice.newContent(portal_type='Invoice Line')
- transaction_line_1 = invoice.newContent(portal_type='Sale Invoice Transaction Line')
- transaction_line_2 = invoice.newContent(portal_type='Sale Invoice Transaction Line')
- transaction.commit()
- self.tic()
- invoice_line.edit(resource_value=sequence.get('resource'), quantity=3,
- price=555)
- transaction_line_1.edit(id ='receivable', source='account_module/customer',
- destination='account_module/supplier', quantity=-1665)
- transaction_line_2.edit(
- id='income', source='account_module/sale',
- destination='account_module/purchase', quantity=1665)
def stepAddInvoiceLines(self, sequence=None, sequence_list=[]):
"""
@@ -2668,6 +2650,58 @@
sequence_list.addSequenceString(sequence)
sequence_list.play(self, quiet=quiet)
+ def stepAddInvoiceLinesManyTransactions(self, sequence=None, sequence_list=[]):
+ """
+ add some invoice and accounting lines to the invoice
+ """
+ invoice = sequence.get('invoice')
+ invoice_line = invoice.newContent(portal_type='Invoice Line')
+ transaction_line_1 = invoice.newContent(portal_type='Sale Invoice Transaction Line')
+ transaction_line_2 = invoice.newContent(portal_type='Sale Invoice Transaction Line')
+ transaction.commit()
+ self.tic()
+ invoice_line.edit(resource_value=sequence.get('resource'), quantity=3,
+ price=555)
+ transaction_line_1.edit(id ='receivable', source='account_module/customer',
+ destination='account_module/supplier', quantity=-1665)
+ transaction_line_2.edit(
+ id='income', source='account_module/sale',
+ destination='account_module/purchase', quantity=1665)
+
+
+ def test_16a_ManuallyAddedMovementsManyTransactions(self, quiet=quiet):
+ """
+ Checks that adding invoice lines and accounting lines to one invoice
+ generates correct simulation
+
+ In this case checks what is happening, where movements are added in
+ one transaction and edited in another
+ """
+ if not quiet:
+ self.logMessage('Invoice with Manually Added Movements in separate transactions')
+ sequence_list = SequenceList()
+ for base_sequence in (self.PACKING_LIST_DEFAULT_SEQUENCE, ) :
+ sequence_list.addSequenceString(
+ base_sequence +
+ """
+ stepSetReadyPackingList
+ stepTic
+ stepStartPackingList
+ stepCheckInvoicingRule
+ stepTic
+ stepCheckInvoiceBuilding
+ stepRebuildAndCheckNothingIsCreated
+ stepCheckInvoicesConsistency
+ stepAddInvoiceLinesManyTransactions
+ stepTic
+ stepCheckInvoiceIsSolved
+ stepStartInvoice
+ stepTic
+ stepCheckSimulationTrees
+ """)
+ sequence_list.play(self, quiet=quiet)
+
+
def test_11_AcceptDecisionOnPackingListAndInvoice(self, quiet=quiet,
run=RUN_ALL_TESTS):
"""
@@ -3059,38 +3093,6 @@
""")
sequence_list.play(self, quiet=quiet)
- def test_16a_ManuallyAddedMovementsManyTransactions(self, quiet=quiet):
- """
- Checks that adding invoice lines and accounting lines to one invoice
- generates correct simulation
-
- In this case checks what is happening, where movements are added in
- one transaction and edited in another
- """
- if not quiet:
- self.logMessage('Invoice with Manually Added Movements in separate transactions')
- sequence_list = SequenceList()
- for base_sequence in (self.PACKING_LIST_DEFAULT_SEQUENCE, ) :
- sequence_list.addSequenceString(
- base_sequence +
- """
- stepSetReadyPackingList
- stepTic
- stepStartPackingList
- stepCheckInvoicingRule
- stepTic
- stepCheckInvoiceBuilding
- stepRebuildAndCheckNothingIsCreated
- stepCheckInvoicesConsistency
- stepAddInvoiceLinesManyTransactions
- stepTic
- stepCheckInvoiceIsSolved
- stepStartInvoice
- stepTic
- stepCheckSimulationTrees
- """)
- sequence_list.play(self, quiet=quiet)
-
def test_17_ManuallyAddedWrongMovements(self, quiet=quiet, run=RUN_ALL_TESTS):
"""
Checks that adding invoice lines and accounting lines to one invoice
@@ -3256,9 +3258,46 @@
stepTic
"""
+class TestInvoiceRule(TestDeliveryRule):
+ rule_portal_type = 'Invoice Rule'
+ delivery_line_portal_type = 'Invoice Line'
+
+ def test_delivery_rule_simulation_ready(self):
+ # not available on invoice
+ return
+
+ def test_delivery_rule_simulation_confirm(self):
+ self.createDocuments()
+ self.delivery.plan()
+ self.assertEqual('planned', self.delivery.getSimulationState())
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+ self.modifyDelivery()
+
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+
+class TestInvoiceRuleSaleInvoiceTransaction(TestInvoiceRule):
+ delivery_portal_type = 'Sale Invoice Transaction'
+
+ def getTitle(self):
+ return "Sale Invoice Transaction Invoice Rule"
+
+class TestInvoiceRulePurchaseInvoiceTransaction(TestInvoiceRule):
+ delivery_portal_type = 'Purchase Invoice Transaction'
+
+ def getTitle(self):
+ return "Purchase Invoice Transaction Invoice Rule"
+
import unittest
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestSaleInvoice))
suite.addTest(unittest.makeSuite(TestPurchaseInvoice))
+ suite.addTest(unittest.makeSuite(TestInvoiceRuleSaleInvoiceTransaction))
+ suite.addTest(unittest.makeSuite(TestInvoiceRulePurchaseInvoiceTransaction))
return suite
Modified: erp5/trunk/products/ERP5/tests/testPackingList.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testPackingList.py?rev=27004&r1=27003&r2=27004&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testPackingList.py [utf8] (original)
+++ erp5/trunk/products/ERP5/tests/testPackingList.py [utf8] Fri May 15 14:18:06 2009
@@ -27,7 +27,6 @@
##############################################################################
import unittest
-
import transaction
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
@@ -42,7 +41,6 @@
container_portal_type = 'Container'
container_line_portal_type = 'Container Line'
container_cell_portal_type = 'Container Cell'
-
default_order_sequence = '\
stepCreateOrganisation1 \
stepCreateOrganisation2 \
@@ -1415,9 +1413,219 @@
"""Tests for purchase packing list.
"""
+class TestDeliveryRule(TestPackingListMixin, ERP5TypeTestCase):
+ applied_rule_portal_type = 'Applied Rule'
+
+ def createResource(self, **kw):
+ module = self.portal.getDefaultModule(portal_type=self.resource_portal_type)
+ resource = module.newContent(portal_type=self.resource_portal_type, **kw)
+ return resource
+
+ def createOrganisation(self, **kw):
+ organisation_portal_type = 'Organisation'
+ module = self.portal.getDefaultModule(portal_type=organisation_portal_type)
+ organisation = module.newContent(portal_type=organisation_portal_type, **kw)
+ return organisation
+
+ def createDelivery(self, **kw):
+ module = self.portal.getDefaultModule(portal_type=self.delivery_portal_type)
+ delivery = module.newContent(portal_type=self.delivery_portal_type, **kw)
+ return delivery
+
+ def checkDeliverySimulation(self):
+ delivery = self.delivery
+ delivery_line = self.delivery_line
+ applied_rule_list = delivery.getCausalityRelatedValueList(
+ portal_type=self.applied_rule_portal_type)
+
+ # delivery shall have one applied rule
+ self.assertEqual(1, len(applied_rule_list))
+ applied_rule = applied_rule_list[0]
+
+ self.assertEqual(self.rule_portal_type, applied_rule.getSpecialiseValue()
+ .getPortalType())
+
+ simulation_movement_list = applied_rule.contentValues()
+
+ # there is one delivery line - so one simulation movement
+ self.assertEqual(1, len(simulation_movement_list))
+
+ simulation_movement = simulation_movement_list[0]
+
+ # now check if simulation movement has all properties set correctly
+
+ self.assertEqual( self.expected_resource, simulation_movement.getResourceValue())
+ self.assertEqual( self.expected_quantity, simulation_movement.getQuantity())
+ self.assertEqual( self.expected_source, simulation_movement.getSourceValue())
+ self.assertEqual( self.expected_source_section, simulation_movement.getSourceSectionValue())
+ self.assertEqual( self.expected_destination, simulation_movement.getDestinationValue())
+ self.assertEqual( self.expected_destination_section,
+ simulation_movement.getDestinationSectionValue())
+ self.assertEqual( self.expected_start_date, simulation_movement.getStartDate())
+ self.assertEqual( self.expected_stop_date, simulation_movement.getStopDate()
+ )
+
+ def createDocuments(self):
+ self.resource = self.createResource()
+ self.source = self.createOrganisation()
+ self.source_section = self.createOrganisation()
+ self.destination = self.createOrganisation()
+ self.destination_section = self.createOrganisation()
+ self.delivery = self.createDelivery(
+ source_value = self.source,
+ source_section_value = self.source_section,
+ destination_value = self.destination,
+ destination_section_value = self.destination_section,
+ start_date = self.datetime,
+ stop_date = self.datetime,
+ )
+
+ self.delivery_line = self.delivery.newContent(
+ portal_type=self.delivery_line_portal_type)
+ self.delivery_line.edit(
+ resource_value = self.resource,
+ quantity = self.default_quantity
+ )
+
+ self.expected_resource = self.resource
+ self.expected_quantity = self.default_quantity
+ self.expected_start_date = self.datetime
+ self.expected_stop_date = self.datetime
+ self.expected_source = self.source
+ self.expected_source_section = self.source_section
+ self.expected_destination = self.destination
+ self.expected_destination_section = self.destination_section
+
+ def modifyDelivery(self, change_expected=True):
+ # for now only quantity
+ new_quantity = self.delivery_line.getQuantity() - 1
+ self.delivery_line.edit(quantity = new_quantity)
+ if change_expected:
+ self.expected_quantity = new_quantity
+
+ def test_delivery_rule_simulation_confirm(self):
+ self.createDocuments()
+ self.delivery.confirm()
+ self.assertEqual('confirmed', self.delivery.getSimulationState())
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+ self.modifyDelivery()
+
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+ def test_delivery_rule_simulation_ready(self):
+ self.createDocuments()
+ self.delivery.confirm()
+ self.delivery.setReady()
+ self.assertEqual('ready', self.delivery.getSimulationState())
+
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+ self.modifyDelivery()
+
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+ def test_delivery_rule_simulation_start(self):
+ self.createDocuments()
+ self.delivery.confirm()
+ self.delivery.setReady()
+ self.delivery.start()
+ self.assertEqual('started', self.delivery.getSimulationState())
+
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+ self.modifyDelivery()
+
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+ def test_delivery_rule_simulation_stop(self):
+ self.createDocuments()
+ self.delivery.confirm()
+ self.delivery.setReady()
+ self.delivery.start()
+ self.delivery.stop()
+ self.assertEqual('stopped', self.delivery.getSimulationState())
+
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+ # stopped state freezes simulation
+ self.modifyDelivery(False)
+
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+ def test_delivery_rule_simulation_deliver(self):
+ self.createDocuments()
+ self.delivery.confirm()
+ self.delivery.setReady()
+ self.delivery.start()
+ self.delivery.stop()
+ self.delivery.deliver()
+ self.assertEqual('delivered', self.delivery.getSimulationState())
+
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+ # delivered state freezes simulation
+ self.modifyDelivery(False)
+
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+ def test_delivery_rule_simulation_cancel(self):
+ self.createDocuments()
+ self.delivery.confirm()
+ self.delivery.cancel()
+ self.assertEqual('cancelled', self.delivery.getSimulationState())
+
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+ # cancelled state freezes simulation
+ self.modifyDelivery(False)
+
+ transaction.commit() ; self.tic()
+
+ self.checkDeliverySimulation()
+
+class TestDeliveryRuleSalePackingList(TestDeliveryRule):
+ delivery_portal_type = 'Sale Packing List'
+ delivery_line_portal_type = 'Sale Packing List Line'
+ rule_portal_type = 'Delivery Rule'
+
+ def getTitle(self):
+ return "Sale Packing List Delivery Rule"
+
+class TestDeliveryRulePurchasePackingList(TestDeliveryRule):
+ delivery_portal_type = 'Purchase Packing List'
+ delivery_line_portal_type = 'Purchase Packing List Line'
+ rule_portal_type = 'Delivery Rule'
+
+ def getTitle(self):
+ return "Purchase Packing List Delivery Rule"
def test_suite():
suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(TestPackingList))
suite.addTest(unittest.makeSuite(TestPurchasePackingList))
+ suite.addTest(unittest.makeSuite(TestDeliveryRuleSalePackingList))
+ suite.addTest(unittest.makeSuite(TestDeliveryRulePurchasePackingList))
return suite
More information about the Erp5-report
mailing list