diff --git a/product/ERP5/tests/testInventoryAPI.py b/product/ERP5/tests/testInventoryAPI.py
index acaf51414c7905c1632f15ebb23b03369c72fa50..2234952e1714c86801407e439b10ac8f5ff381e7 100644
--- a/product/ERP5/tests/testInventoryAPI.py
+++ b/product/ERP5/tests/testInventoryAPI.py
@@ -47,9 +47,6 @@ from Products.ERP5Type.Utils import DocumentConstructor,\
 from AccessControl.SecurityManagement import newSecurityManager
 from DateTime import DateTime
 
-import Products.ERP5.Document
-from Products.ERP5.Document.Movement import Movement
-
 class InventoryAPITestCase(ERP5TypeTestCase):
   """Base class for Inventory API Tests {{{
   """
@@ -194,6 +191,7 @@ class InventoryAPITestCase(ERP5TypeTestCase):
     get_transaction().commit()
     self.tic()
     return currency
+  _makeResource = _makeCurrency
   # }}}
 
   def _makeMovement(self, **kw):
@@ -216,6 +214,14 @@ class TestInventory(InventoryAPITestCase):
   """Tests getInventory methods.
   """
   RUN_ALL_TESTS = 1
+  
+  def testReturnedTypeIsList(self):
+    """getInventory returns a float"""
+    # XXX it may return a Decimal some day
+    getInventory = self.getSimulationTool().getInventory
+    self.assertEquals(type(getInventory()), type(0.1))
+    # default is 0
+    self.assertEquals(0, getInventory())
 
   def test_SectionCategory(self, quiet=0, run=RUN_ALL_TESTS):
     """Tests inventory on section category. """
@@ -419,10 +425,127 @@ class TestInventoryList(InventoryAPITestCase):
   """
   RUN_ALL_TESTS = 1
 
+
 class TestMovementHistoryList(InventoryAPITestCase):
   """Tests Movement history list methods.
   """
   RUN_ALL_TESTS = 1
+  
+  def testReturnedTypeIsList(self):
+    """Movement History List returns a sequence object""" 
+    getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+    mvt_history_list = getMovementHistoryList()
+    self.failUnless(str(mvt_history_list.__class__),
+                    'Shared.DC.ZRDB.Results.Results')
+    # default is an empty list
+    self.assertEquals(0, len(mvt_history_list))
+  
+  def testMovementBothSides(self):
+    getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+    self._makeMovement(quantity=100)
+    # we don't filter, so we have the same movement from both sides.
+    self.assertEquals(2, len(getMovementHistoryList()))
+
+  def testBrainClass(self):
+    """Movement History List uses InventoryListBrain for brains""" 
+    getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+    self._makeMovement(quantity=100)
+    # maybe this check is too low level (Shared/DC/ZRDB//Results.py, class r) 
+    r_bases = getMovementHistoryList()._class.__bases__
+    brain_class = r_bases[2].__name__
+    self.assertEquals('InventoryListBrain', brain_class,
+      "unexpected brain class for getMovementHistoryList InventoryListBrain"
+      " != %s (bases %s)" % (brain_class, r_bases))
+  
+  def testSection(self):
+    getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+    mvt = self._makeMovement(quantity=100)
+    mvt_history_list = getMovementHistoryList(
+                            section_uid = self.section.getUid())
+    self.assertEquals(1, len(mvt_history_list))
+    self.assertEquals(mvt.getUid(), mvt_history_list[0].uid)
+    self.assertEquals(100, mvt_history_list[0].total_quantity)
+    self.assertEquals(self.section.getRelativeUrl(),
+                  mvt_history_list[0].section_relative_url)
+  
+  def testMirrorSection(self):
+    getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+    mvt = self._makeMovement(quantity=100)
+    mvt_history_list = getMovementHistoryList(
+                            mirror_section_uid = self.section.getUid())
+    self.assertEquals(1, len(mvt_history_list))
+    self.assertEquals(mvt.getUid(), mvt_history_list[0].uid)
+    self.assertEquals(-100, mvt_history_list[0].total_quantity)
+    self.assertEquals(self.mirror_section.getRelativeUrl(),
+                  mvt_history_list[0].section_relative_url)
+    self.assertEquals(self.mirror_node.getRelativeUrl(),
+                  mvt_history_list[0].node_relative_url)
+    
+    # if we look from the other side, everything is reverted
+    mvt_history_list = getMovementHistoryList(
+                            section_uid = self.section.getUid())
+    self.assertEquals(1, len(mvt_history_list))
+    self.assertEquals(100, mvt_history_list[0].total_quantity)
+    self.assertEquals(self.section.getRelativeUrl(),
+                  mvt_history_list[0].section_relative_url)
+    self.assertEquals(self.node.getRelativeUrl(),
+                  mvt_history_list[0].node_relative_url)
+  
+  def testDifferentDatesPerSection(self):
+    getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+    start_date = DateTime(2001, 1, 1)
+    stop_date = DateTime(2002, 2, 2)
+    mvt = self._makeMovement(quantity=100,
+                             start_date=start_date,
+                             stop_date=stop_date)
+    # start_date is for source
+    self.assertEquals(start_date, getMovementHistoryList(
+                            section_uid=self.mirror_section.getUid())[0].date)
+    # stop_date is for destination
+    self.assertEquals(stop_date, getMovementHistoryList(
+                            section_uid=self.section.getUid())[0].date)
+    
+  def testNode(self):
+    getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+    mvt = self._makeMovement(quantity=100)
+    mvt_history_list = getMovementHistoryList(
+                            node_uid = self.node.getUid())
+    self.assertEquals(1, len(mvt_history_list))
+    self.assertEquals(mvt.getUid(), mvt_history_list[0].uid)
+    self.assertEquals(100, mvt_history_list[0].total_quantity)
+
+  def testMirrorNode(self):
+    getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+    mvt = self._makeMovement(quantity=100)
+    mvt_history_list = getMovementHistoryList(
+                            mirror_node_uid = self.node.getUid())
+    self.assertEquals(1, len(mvt_history_list))
+    self.assertEquals(mvt.getUid(), mvt_history_list[0].uid)
+    self.assertEquals(-100, mvt_history_list[0].total_quantity)
+
+  def testResource(self):
+    getMovementHistoryList = self.getSimulationTool().getMovementHistoryList
+    mvt = self._makeMovement(quantity=100)
+    another_resource = self._makeResource()
+    another_mvt = self._makeMovement(quantity=3,
+                                     resource_value=another_resource)
+    # we can query resource directly by uid
+    mvt_history_list = getMovementHistoryList(
+                            node_uid=self.node.getUid(),
+                            resource_uid=self.resource.getUid())
+    self.assertEquals(1, len(mvt_history_list))
+    self.assertEquals(100, mvt_history_list[0].total_quantity)
+    # getMovementHistoryList should return only movement for
+    mvt_history_list = getMovementHistoryList(
+                            node_uid=self.node.getUid(),
+                            resource_uid=another_resource.getUid())
+    self.assertEquals(1, len(mvt_history_list))
+    self.assertEquals(3, mvt_history_list[0].total_quantity)
+
+    # wrong value yields an empty list
+    self.assertEquals(0, len(getMovementHistoryList(
+                            resource_uid = self.node.getUid())))
+    
 
 class TestInventoryStat(InventoryAPITestCase):
   """Tests Inventory Stat methods.