diff --git a/product/ERP5/tests/testInventoryAPI.py b/product/ERP5/tests/testInventoryAPI.py index 7afd42eb8dc68bcf13632258f1be8ac9835cba85..e841f23c0e46bb01cc86e77ffb209a88bf4eb414 100644 --- a/product/ERP5/tests/testInventoryAPI.py +++ b/product/ERP5/tests/testInventoryAPI.py @@ -3028,8 +3028,6 @@ class TestInventoryCacheTable(InventoryAPITestCase): self.assertEqual(value, self.getInventory(optimisation__=False, **inventory_kw)) - - @expectedFailure def test_12_CheckCacheFlush(self): """ Test the cache is flushed when indexing a movement into stock @@ -3146,6 +3144,91 @@ class TestInventoryCacheTable(InventoryAPITestCase): self.getInventory(optimisation__=False, **inventory_kw), ) + @expectedFailure + def test_12_CheckCacheFlushWithInventory(self): + """ + Test the cache is flushed when indexing an inventory into stock + """ + inventory_kw = { + 'node_uid': self.node_uid, + 'to_date': self.NOW, + } + # Fill cache and make stock inconsistent + value = self.getInventory(**inventory_kw) + self.doubleStockValue() + # Create a movement after CACHE DATE + # Cache is cleared for all entry > movement date + # as at a cache date D, it contains results from stock + # for all line < D + INVENTORY_QUANTITY_4 = 5000 + INVENTORY_DATE_4 = self.CACHE_DATE + movement = self._makeMovement( + quantity=INVENTORY_QUANTITY_4, + start_date=INVENTORY_DATE_4, + simulation_state='delivered', + ) + self.tic() + # Optimisation must still be used + self.assertEqual( + value + INVENTORY_QUANTITY_4, + self.getInventory(**inventory_kw), + ) + # Edit start date so that cache table is cleared + movement.edit(start_date=self.LAST_CACHED_MOVEMENT_DATE) + self.tic() + self.assertEqual( + value + INVENTORY_QUANTITY_4 + self.INVENTORY_QUANTITY_1, + self.getInventory(**inventory_kw), + ) + self.doubleStockValue() + # Cache hit again + self.assertEqual( + value + INVENTORY_QUANTITY_4 + self.INVENTORY_QUANTITY_1, + self.getInventory(**inventory_kw), + ) + # Move movement's start date in the future and check cache is flushed + # at former date + movement.edit(start_date=self.NOW - 1) + self.tic() + self.assertEqual( + value + INVENTORY_QUANTITY_4 + 3 * self.INVENTORY_QUANTITY_1, + self.getInventory(**inventory_kw), + ) + self.doubleStockValue() + # Cache hit again + self.assertEqual( + value + INVENTORY_QUANTITY_4 + 3 * self.INVENTORY_QUANTITY_1, + self.getInventory(**inventory_kw), + ) + + # Set date back in the past, cache is clear again + movement.edit(start_date=self.LAST_CACHED_MOVEMENT_DATE) + self.tic() + self.assertEqual( + value + INVENTORY_QUANTITY_4 + 7 * self.INVENTORY_QUANTITY_1, + self.getInventory(**inventory_kw), + ) + self.doubleStockValue() + # Cache hit again + self.assertEqual( + value + INVENTORY_QUANTITY_4 + 7 * self.INVENTORY_QUANTITY_1, + self.getInventory(**inventory_kw), + ) + + # Delete movement, so it gets unindexed and cache entry is flushed + self.folder.manage_delObjects(ids=[movement.getId(), ]) + self.tic() + self.assertEqual( + value + 15 * self.INVENTORY_QUANTITY_1, + self.getInventory(**inventory_kw), + ) + self.doubleStockValue() + # Cache hit again + self.assertEqual( + value + 15 * self.INVENTORY_QUANTITY_1, + self.getInventory(**inventory_kw), + ) + # Create an inventory INVENTORY_QUANTITY_5 = 0 inventory = self._makeInventory(