diff --git a/product/ERP5/tests/testInventoryAPI.py b/product/ERP5/tests/testInventoryAPI.py index 00c91cb191e47a8b3f701222abf96a9f0886d9e7..29986fbd195322d9f8fd30708955830e61c64252 100644 --- a/product/ERP5/tests/testInventoryAPI.py +++ b/product/ERP5/tests/testInventoryAPI.py @@ -38,13 +38,10 @@ if __name__ == '__main__': from AccessControl.SecurityManagement import newSecurityManager from DateTime import DateTime +from Testing import ZopeTestCase +from Products.ERP5.Document.OrderRule import OrderRule from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase -from Products.ERP5Type.ERP5Type import ERP5TypeInformation -from Products.ERP5Type.Base import initializePortalTypeDynamicProperties, \ - _aq_reset -from Products.ERP5Type.Utils import DocumentConstructor,\ - setDefaultClassProperties # Needed in order to have a log file inside the current folder os.environ.setdefault('EVENT_LOG_FILE', 'zLOG.log') @@ -72,10 +69,11 @@ class InventoryAPITestCase(ERP5TypeTestCase): """set up """ self.createCategories() self.login() - if not hasattr(self.getPortal(), 'testing_folder'): - self.getPortal().newContent(portal_type='Folder', + self.portal = self.getPortal() + if not hasattr(self.portal, 'testing_folder'): + self.portal.newContent(portal_type='Folder', id='testing_folder') - self.folder = self.getPortal().testing_folder + self.folder = self.portal.testing_folder self.section = self._makeOrganisation(title='Section') self.node = self._makeOrganisation(title='Node') @@ -87,6 +85,11 @@ class InventoryAPITestCase(ERP5TypeTestCase): self.resource = self.getCurrencyModule().newContent( title='Resource', portal_type='Currency') + # create a dummy Rule, to be able to create simulation movements + rule_tool = self.portal.portal_rules + if not hasattr(rule_tool, 'default_order_rule'): + rule_tool._setObject('default_order_rule', + OrderRule('default_order_rule')) def _safeTic(self): """Like tic, but swallowing errors, usefull for teardown""" @@ -211,6 +214,23 @@ class InventoryAPITestCase(ERP5TypeTestCase): self.tic() return mvt + def _makeSimulationMovement(self, **kw): + """Creates a simulation movement. + """ + ar = self.getSimulationTool().newContent(portal_type='Applied Rule') + # we created a default_order_rule in setUp + ar.setSpecialise('portal_rules/default_order_rule') + mvt = ar.newContent(portal_type='Simulation Movement') + kw.setdefault('destination_section_value', self.section) + kw.setdefault('source_section_value', self.mirror_section) + kw.setdefault('destination_value', self.node) + kw.setdefault('source_value', self.mirror_node) + kw.setdefault('resource_value', self.resource) + mvt.edit(**kw) + get_transaction().commit() + self.tic() + return mvt + # }}} class TestInventory(InventoryAPITestCase): @@ -218,7 +238,7 @@ class TestInventory(InventoryAPITestCase): """ RUN_ALL_TESTS = 1 - def testReturnedTypeIsList(self): + def testReturnedTypeIsFloat(self): """getInventory returns a float""" # XXX it may return a Decimal some day getInventory = self.getSimulationTool().getInventory @@ -226,6 +246,31 @@ class TestInventory(InventoryAPITestCase): # default is 0 self.assertEquals(0, getInventory()) + def test_SimulationMovement(self, quiet=0, run=RUN_ALL_TESTS): + """Test Simulation Movements works in this testing environnement. + """ + getInventory = self.getSimulationTool().getInventory + self._makeSimulationMovement(quantity=100) + self.assertEquals(100, getInventory(section_uid=self.section.getUid())) + # mixed with a real movement + self._makeMovement(quantity=100) + self.assertEquals(200, getInventory(section_uid=self.section.getUid())) + + def test_SimulationMovementisAccountable(self, quiet=0, run=RUN_ALL_TESTS): + """Test Simulation Movements are not accountable if related to a delivery. + """ + getInventory = self.getSimulationTool().getInventory + sim_mvt = self._makeSimulationMovement(quantity=100) + mvt = self._makeMovement(quantity=100) + # simulation movement are accountable, + self.failUnless(sim_mvt.isAccountable()) + # unless connected to a delivery movement + sim_mvt.setDeliveryValue(mvt) + self.failIf(sim_mvt.isAccountable()) + # not accountable movement are not counted by getInventory + get_transaction().commit(); self.tic() # (after reindexing of course) + self.assertEquals(100, getInventory(section_uid=self.section.getUid())) + def test_SectionCategory(self, quiet=0, run=RUN_ALL_TESTS): """Tests inventory on section category. """ getInventory = self.getSimulationTool().getInventory @@ -749,11 +794,15 @@ class TestMovementHistoryList(InventoryAPITestCase): ('stock.uid', 'ascending'),)) ] self.assertEquals(movement_date_list, date_list) + # FIXME: do we want to include it or no ? def test_Limit(self): - pass - # TODO - # test limit argument, as used by listbox - + return "is it part of this API ?" # XXX + getMovementHistoryList = self.getSimulationTool().getMovementHistoryList + for q in range(10): + self._makeMovement(quantity=1) + self.assertEquals(3, len(getMovementHistoryList(list_start=2, + list_lines=3))) + def test_SimulationState(self): getMovementHistoryList = self.getSimulationTool().getMovementHistoryList self._makeMovement(quantity=2, simulation_state="confirmed")