diff --git a/product/ERP5/tests/testInventory.py b/product/ERP5/tests/testInventory.py index 4569b60ea2ad10ede29e924e7f2f63651d70d113..198e1ce0eadc562f3a3c968800073ed2e11ec079 100644 --- a/product/ERP5/tests/testInventory.py +++ b/product/ERP5/tests/testInventory.py @@ -351,14 +351,18 @@ class TestInventory(TestOrderMixin, ERP5TypeTestCase): portal_type=self.packing_list_portal_type) packing_list = packing_list_module.newContent( portal_type=self.packing_list_portal_type) + if kw.get('start_date', None) is not None: + start_date = stop_date = kw['start_date'] + else: + start_date = stop_date = DateTime() - 2 packing_list.edit( specialise=self.business_process, source_section_value = mirror_section, source_value = mirror_node, destination_section_value = section, destination_value = node, - start_date = DateTime() - 2, - stop_date = DateTime() - 2, + start_date = start_date, + stop_date = stop_date, price_currency = self.price_currency ) self.assertNotEquals( packing_list.getSourceSectionValue(), None) @@ -2185,14 +2189,18 @@ class TestInventory(TestOrderMixin, ERP5TypeTestCase): def stepCreateFullInventoryAtTheDate(self, sequence=None, sequence_list=None, **kw): - """ Create Full Inventory at the date: '2013/03/12 GMT+9' """ + """ Create Full Inventory at the date' """ inventory_list = sequence.get('inventory_list',[]) self.assertEquals(len(inventory_list), 0) + if kw.get('start_date', None) is not None: + start_date = kw['start_date'] + else: + start_date = '2013/03/12 00:00:00 GMT+9' inventory = self.createInventory(sequence=sequence) inventory.edit(full_inventory=True, destination_section_value=sequence.get('section'), destination_value=sequence.get('node'), - start_date='2013/03/12 00:00:00 GMT+9') + start_date=start_date) inventory_line = inventory.newContent( portal_type = self.inventory_line_portal_type, resource_value = sequence.get("resource"), @@ -2202,6 +2210,14 @@ class TestInventory(TestOrderMixin, ERP5TypeTestCase): sequence.edit(inventory_list=inventory_list) + def stepCreateFullInventoryAtTheDate1(self, sequence=None, + sequence_list=None, **kw): + if getattr(self, 'inventory_start_date_1', None) is None: + raise UnboundLocalError('Please assign self.inventory_start_date_1 ' + 'in your test method') + self.stepCreateFullInventoryAtTheDate( + sequence, sequence_list, start_date=self.inventory_start_date_1) + def stepCheckMultipleSectionAndFullInventory(self, sequence=None, sequence_list=None, **kw): """ Check that getInvetory() is surely working in @@ -2265,6 +2281,71 @@ class TestInventory(TestOrderMixin, ERP5TypeTestCase): workflow_action() self.tic() + def stepCreatePackingListAtTheDate1(self, + sequence=None, + sequence_list=None, + **kw): + """ Create Packing List with self.start_date_1""" + if getattr(self, 'start_date_1', None) is None: + raise UnboundLocalError('Please Assign self.start_date_1 ' + 'in your test method') + start_date = self.start_date_1 + self.stepCreatePackingListForModule(sequence=sequence, + sequence_list=sequence_list, + start_date=start_date) + + def stepCreatePackingListAtTheDate2(self, + sequence=None, + sequence_list=None, + **kw): + """ Create Packing List with self.start_date_2""" + if getattr(self, 'start_date_2', None) is None: + raise UnboundLocalError('Please Assign self.start_date_2 ' + 'in your test method') + start_date = self.start_date_2 + self.stepCreatePackingListForModule(sequence=sequence, + sequence_list=sequence_list, + start_date=start_date) + + def _testGetMovementHistoryList(self, expected_history=None, **kw): + """ Helper method to check getMovementHistoryList """ + simulation = self.getPortal().portal_simulation + LOG('Testing movement history with args :', 0, kw) + result = simulation.getMovementHistoryList(**kw) + self.assertTrue(len(result) > 0) + # Note: Now only checking total_quantity but can be checked more + actual_history = [{'total_quantity':x.total_quantity} for x in result] + try: + self.assertEquals(len(expected_history), len(actual_history)) + for expected, actual in zip(expected_history, actual_history): + shared_keys = set(expected.keys()) & set(actual.keys()) + self.assertEquals(len(shared_keys), len(expected.keys())) + shared_item = set(expected.items()) & set(actual.items()) + self.assertEquals(len(shared_item), len(expected.keys())) + except AssertionError: + msg = 'History differs between expected:\n%s\nand real:\n%s'\ + % (repr(expected_history), repr(actual_history)) + LOG('TestInventory._testGetMovementHistoryList', 0, msg) + LOG('SQL Query was : ', 0, + str(simulation.getMovementHistoryList(src__=1, **kw))) + raise AssertionError(msg) + + def stepCheckFullInventoryAddOldMovement(self, + sequence=None, + sequence_list=None, + **kw): + """ Check Create Full Inventory Then Add Old Movement use case """ + section = sequence.get('section') + node = sequence.get('node') + self._testGetInventory(expected=100, + section_uid=section.getUid(), + node_uid=node.getUid()) + self._testGetMovementHistoryList(expected_history=[{'total_quantity':-100}, + {'total_quantity':100}, + {'total_quantity':100},], + section_uid=section.getUid(), + node_uid=node.getUid()) + def test_01_getInventory(self, quiet=0, run=run_all_test): """ @@ -2597,6 +2678,52 @@ class TestInventory(TestOrderMixin, ERP5TypeTestCase): sequence_list.addSequenceString(sequence_string) sequence_list.play(self) + # Note: This inventory reindex function is not implemented yet + @expectedFailure + def test_11_FullInventoryAddOldMovement(self, quiet=0, run=run_all_test): + """ + Make sure the following case: + + 1) add movement 2013/02/10, quantity=100 + 2) full inventory: 2013/03/15, quantity=100 + + [test] + getInventory() should return 100 + getMovementHistory() should return 100 ([100]) + + 3) add movement: 2013/02/01, quantity=100 + + [test] + getInventory() should return 100 + getMovementHistory() should return 100 ([-100, 100, 100]) + """ + if not run: return + + self.inventory_start_date_1 = '2013/03/15 00:00:00 GMT+9' + self.start_date_1 = '2013/02/10 00:00:00 GMT+9' + self.start_date_2 = '2013/02/01 00:00:00 GMT+9' + sequence_list = SequenceList() + sequence_string = 'CreateOrganisationsForModule \ + CreateNotVariatedResource \ + Tic \ + CreatePackingListAtTheDate1 \ + CreatePackingListLine \ + Tic \ + DeliverPackingList \ + Tic \ + CreateFullInventoryAtTheDate1 \ + Tic \ + CreatePackingListAtTheDate2 \ + CreatePackingListLine \ + Tic \ + DeliverPackingList \ + Tic \ + CheckFullInventoryAddOldMovement \ + ' + sequence_list.addSequenceString(sequence_string) + sequence_list.play(self) + + def test_suite(): suite = unittest.TestSuite() suite.addTest(unittest.makeSuite(TestInventory))