[Erp5-report] r9339 - /erp5/trunk/products/ERP5/tests/testInventoryAPI.py
nobody at svn.erp5.org
nobody at svn.erp5.org
Tue Aug 22 22:51:56 CEST 2006
Author: jerome
Date: Tue Aug 22 22:51:53 2006
New Revision: 9339
URL: http://svn.erp5.org?rev=9339&view=rev
Log:
tests for getMovementHistoryList on section, date and simulation state
Modified:
erp5/trunk/products/ERP5/tests/testInventoryAPI.py
Modified: erp5/trunk/products/ERP5/tests/testInventoryAPI.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/tests/testInventoryAPI.py?rev=9339&r1=9338&r2=9339&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/tests/testInventoryAPI.py (original)
+++ erp5/trunk/products/ERP5/tests/testInventoryAPI.py Tue Aug 22 22:51:53 2006
@@ -29,23 +29,26 @@
"""Unit Tests for Inventory API.
"""
-import os, sys
+import sys
+import random
+import os
+
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.setdefault('EVENT_LOG_FILE', 'zLOG.log')
-os.environ.setdefault('EVENT_LOG_SEVERITY', '-300')
-
-import random
+from AccessControl.SecurityManagement import newSecurityManager
+from DateTime import DateTime
+
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
-from AccessControl.SecurityManagement import newSecurityManager
-from DateTime import DateTime
+
+# Needed in order to have a log file inside the current folder
+os.environ.setdefault('EVENT_LOG_FILE', 'zLOG.log')
+os.environ.setdefault('EVENT_LOG_SEVERITY', '-300')
class InventoryAPITestCase(ERP5TypeTestCase):
"""Base class for Inventory API Tests {{{
@@ -419,7 +422,6 @@
self.assertEquals(getInventory(
section_uid=self.section.getUid()), 100)
-
class TestInventoryList(InventoryAPITestCase):
"""Tests getInventoryList methods.
"""
@@ -545,7 +547,229 @@
# wrong value yields an empty list
self.assertEquals(0, len(getMovementHistoryList(
resource_uid = self.node.getUid())))
-
+
+ def testSectionCategory(self):
+ getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+ self.section.setGroup('level1/level2')
+ mvt = self._makeMovement(quantity=100)
+
+ # for section category, both exact category or any parent category works
+ # section_category can also be a list.
+ for section_category in [ 'group/level1',
+ 'group/level1/level2',
+ ['group/level1', 'group/anotherlevel'],
+ ['group/level1', 'group/level1'],
+ ['group/level1', 'group/level1/level2'], ]:
+ movement_history_list = getMovementHistoryList(
+ section_category=section_category)
+ self.assertEquals(len(movement_history_list), 1)
+ self.assertEquals(movement_history_list[0].total_quantity, 100)
+
+ # again, bad category raises an exception
+ self.assertRaises(ValueError,
+ getMovementHistoryList,
+ section_category='group/notexists')
+ # (but other arguments are ignored)
+ self.assertEquals(len(getMovementHistoryList(
+ section_category='group/level1',
+ ignored='argument')), 1)
+
+ def testNodeCategoryAndSectionCategory(self):
+ getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+ self.section.setGroup('level1/level2')
+ self.node.setGroup('level1')
+ mvt = self._makeMovement(quantity=100)
+
+ valid_category_list = [ 'group/level1',
+ ['group/level1', 'group/anotherlevel'],
+ ['group/level1', 'group/level1'],
+ ['group/level1', 'group/level1/level2'], ]
+ invalid_category_list = ['group/anotherlevel', 'product_line/level1']
+
+ # both valid
+ for section_category in valid_category_list:
+ for node_category in valid_category_list:
+ movement_history_list = getMovementHistoryList(
+ node_category=node_category,
+ section_category=section_category)
+ self.assertEquals(len(movement_history_list), 1)
+ self.assertEquals(movement_history_list[0].total_quantity, 100)
+
+ # if node category OR section category is not matched, no movement are
+ # returned.
+ for section_category in valid_category_list:
+ for node_category in invalid_category_list:
+ movement_history_list = getMovementHistoryList(
+ node_category=node_category,
+ section_category=section_category)
+ self.assertEquals(len(movement_history_list), 0)
+
+ for section_category in invalid_category_list:
+ for node_category in valid_category_list:
+ movement_history_list = getMovementHistoryList(
+ node_category=node_category,
+ section_category=section_category)
+ self.assertEquals(len(movement_history_list), 0)
+
+
+ # Date tests:
+ # ===========
+ #
+ # For all date tests, we create a list of movements with dates:
+ # start_date (date for source) stop_date(date for destination)
+ # 2006/01/01 2006/01/02
+ # 2006/01/02 2006/01/03
+ # 2006/01/03 2006/01/04
+ # 2006/01/04 2006/01/05
+ # in all those tests, we usually look from the destination, so the first
+ # movement is at 2006/01/02
+ #
+
+ def test_FromDate(self):
+ getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+ for date in [DateTime(2006, 01, day) for day in range(1, 4)]:
+ self._makeMovement(quantity=100,
+ start_date=date,
+ stop_date=date+1)
+ # from_date takes all movements >=
+ self.assertEquals(len(getMovementHistoryList(
+ from_date=DateTime(2006, 01, 03),
+ section_uid=self.section.getUid())), 2)
+ self.assertEquals(len(getMovementHistoryList(
+ from_date=DateTime(2006, 01, 02),
+ section_uid=self.mirror_section.getUid())), 2)
+
+ def test_AtDate(self):
+ getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+ for date in [DateTime(2006, 01, day) for day in range(1, 4)]:
+ self._makeMovement(quantity=100,
+ start_date=date,
+ stop_date=date+1)
+ # at_date takes all movements <=
+ self.assertEquals(len(getMovementHistoryList(
+ at_date=DateTime(2006, 01, 03),
+ section_uid=self.section.getUid())), 2)
+ self.assertEquals(len(getMovementHistoryList(
+ at_date=DateTime(2006, 01, 02),
+ section_uid=self.mirror_section.getUid())), 2)
+
+ def test_ToDate(self):
+ getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+ for date in [DateTime(2006, 01, day) for day in range(1, 4)]:
+ self._makeMovement(quantity=100,
+ start_date=date,
+ stop_date=date+1)
+ # to_date takes all movements <
+ self.assertEquals(len(getMovementHistoryList(
+ to_date=DateTime(2006, 01, 03),
+ section_uid=self.section.getUid())), 1)
+ self.assertEquals(len(getMovementHistoryList(
+ to_date=DateTime(2006, 01, 02),
+ section_uid=self.mirror_section.getUid())), 1)
+
+ def test_FromDateAtDate(self):
+ getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+ for date in [DateTime(2006, 01, day) for day in range(1, 4)]:
+ self._makeMovement(quantity=100,
+ start_date=date,
+ stop_date=date+1)
+ # both from_date and at_date
+ self.assertEquals(len(getMovementHistoryList(
+ from_date=DateTime(2006, 01, 03),
+ at_date=DateTime(2006, 01, 03),
+ section_uid=self.section.getUid())), 1)
+ self.assertEquals(len(getMovementHistoryList(
+ from_date=DateTime(2006, 01, 02),
+ at_date=DateTime(2006, 01, 03),
+ section_uid=self.section.getUid())), 2)
+ self.assertEquals(len(getMovementHistoryList(
+ from_date=DateTime(2005, 01, 02),
+ at_date=DateTime(2006, 01, 03),
+ section_uid=self.section.getUid())), 2)
+ # from other side
+ self.assertEquals(len(getMovementHistoryList(
+ from_date=DateTime(2006, 01, 02),
+ at_date=DateTime(2006, 01, 03),
+ section_uid=self.mirror_section.getUid())), 2)
+
+ def test_FromDateToDate(self):
+ getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+ for date in [DateTime(2006, 01, day) for day in range(1, 4)]:
+ self._makeMovement(quantity=100,
+ start_date=date,
+ stop_date=date+1)
+ # both from_date and to_date
+ self.assertEquals(len(getMovementHistoryList(
+ from_date=DateTime(2006, 01, 03),
+ to_date=DateTime(2006, 01, 03),
+ section_uid=self.section.getUid())), 0)
+ self.assertEquals(len(getMovementHistoryList(
+ from_date=DateTime(2006, 01, 02),
+ to_date=DateTime(2006, 01, 03),
+ section_uid=self.section.getUid())), 1)
+ self.assertEquals(len(getMovementHistoryList(
+ from_date=DateTime(2005, 01, 02),
+ to_date=DateTime(2007, 01, 02),
+ section_uid=self.section.getUid())), 3)
+ # from other side
+ self.assertEquals(len(getMovementHistoryList(
+ from_date=DateTime(2006, 01, 02),
+ to_date=DateTime(2006, 01, 03),
+ section_uid=self.mirror_section.getUid())), 1)
+
+ def test_SortOnDate(self):
+ getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+ date_list = [DateTime(2006, 01, day) for day in range(1, 10)]
+ reverse_date_list = date_list[:]
+ reverse_date_list.reverse()
+
+ # we create movements with a random order on dates, to have an extra change
+ # that they are not sorted accidentally.
+ random_date_list = date_list[:]
+ random.shuffle(random_date_list)
+ for date in random_date_list:
+ self._makeMovement(quantity=100,
+ start_date=date - 1,
+ stop_date=date)
+
+ movement_date_list = [ x.date for x in getMovementHistoryList(
+ section_uid=self.section.getUid(),
+ sort_on=(('stock.date', 'ascending'),)) ]
+ self.assertEquals(movement_date_list, date_list)
+ movement_date_list = [ x.date for x in getMovementHistoryList(
+ section_uid=self.section.getUid(),
+ sort_on=(('stock.date', 'descending'),)) ]
+ self.assertEquals(movement_date_list, reverse_date_list)
+ # minimum test for (('stock.date', 'ASC'), ('stock.uid', 'ASC')) which is
+ # what you want to make sure that the last line on a page precedes the
+ # first line on the previous page.
+ movement_date_list = [x.date for x in getMovementHistoryList(
+ section_uid=self.section.getUid(),
+ sort_on=(('stock.date', 'ascending'),
+ ('stock.uid', 'ascending'),)) ]
+ self.assertEquals(movement_date_list, date_list)
+
+ def test_Limit(self):
+ pass
+ # TODO
+ # test limit argument, as used by listbox
+
+ def test_SimulationState(self):
+ getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+ self._makeMovement(quantity=2, simulation_state="confirmed")
+ self._makeMovement(quantity=3, simulation_state="planned")
+ for simulation_state in ['confirmed', ['confirmed', 'stopped']]:
+ movement_history_list = getMovementHistoryList(
+ simulation_state=simulation_state,
+ section_uid=self.section.getUid())
+ self.assertEquals(len(movement_history_list), 1)
+ self.assertEquals(movement_history_list[0].total_quantity, 2)
+
+ movement_history_list = getMovementHistoryList(
+ simulation_state=["confirmed", "planned"],
+ section_uid=self.section.getUid())
+ self.assertEquals(len(movement_history_list), 2)
+
class TestInventoryStat(InventoryAPITestCase):
"""Tests Inventory Stat methods.
More information about the Erp5-report
mailing list