def test_get_eye_level_shelves(self): scene_tool_box = PngcnSceneKpis(self.ProjectConnector_mock, self.common_mock, 16588190, self.data_provider_mock) data = pd.DataFrame( [{'bay_number': 1, 'shelf_number': 3}, {'bay_number': 1, 'shelf_number': 3}, {'bay_number': 1, 'shelf_number': 6}, {'bay_number': 1, 'shelf_number': 6}, {'bay_number': 2, 'shelf_number': 2}, {'bay_number': 2, 'shelf_number': 4}, {'bay_number': 2, 'shelf_number': 10}, {'bay_number': 2, 'shelf_number': 9}, {'bay_number': 3, 'shelf_number': 1}, {'bay_number': 3, 'shelf_number': 1}, {'bay_number': 3, 'shelf_number': 2}, {'bay_number': 3, 'shelf_number': 2}]) scene_tool_box.get_filterd_matches = MagicMock(return_value=pd.DataFrame(data)) scene_tool_box.common.write_to_db_result = MagicMock() kpi_results = scene_tool_box.get_eye_level_shelves(data) self.assertEqual(len(kpi_results[kpi_results['bay_number'] == 3]), 4, 'expects to have 4 lines with bay number 3') self.assertTrue(kpi_results[kpi_results['bay_number'] == 1].empty, "Expected to have an empty df where bay number =1") # try blade & razor template blade_template_fk = 144 self.data_provider_mock['templates'] = pd.DataFrame([{'template_fk': 144}]) scene_tool_box = PngcnSceneKpis(self.ProjectConnector_mock, self.common_mock, 16588190, self.data_provider_mock) scene_tool_box.get_filterd_matches = MagicMock(return_value=pd.DataFrame(data)) scene_tool_box.common.write_to_db_result = MagicMock() kpi_results = scene_tool_box.get_eye_level_shelves( data, psdataprovider=self.psdataprovider, template_fk=blade_template_fk) self.assertEqual(len(kpi_results[kpi_results['bay_number'] == 3]), 2, 'expects to have only 2 lines with bay number 3 since the eye level for blade is [2, 3]') self.assertEqual(len(kpi_results[kpi_results['bay_number'] == 2]), 1, 'expects to have only 1 line with bay number 2 since the eye level for blade is [2, 3]')
def test_calculate_facing_eye_level(self): scene_tool_box = PngcnSceneKpis(self.ProjectConnector_mock, self.common_mock, 16588190, self.data_provider_mock) data = pd.DataFrame( [{'scene_fk': 16588190, 'manufacturer_name': 'P&G\xe5\xae\x9d\xe6\xb4\x81', 'brand_name': 'Safeguard', 'category': 'Personal Cleaning Care', 'product_fk': 152, 'stacking_layer': 1, 'category_fk': 101, 'bay_number': 1, 'shelf_number': 1, 'facing_sequence_number': 3, 'sub_category': 'Handwash'}, {'scene_fk': 16588190, 'manufacturer_name': 'P&G\xe5\xae\x9d\xe6\xb4\x81', 'brand_name': 'Safeguard', 'category': 'something', 'product_fk': 152, 'stacking_layer': 2, 'category_fk': 101, 'bay_number':1, 'shelf_number':2, 'facing_sequence_number': 3, 'sub_category': 'Handwash'}, {'scene_fk': 16588190, 'manufacturer_name': 'P&G\xe5\xae\x9d\xe6\xb4\x81', 'brand_name': 'Safeguard', 'category': 'Personal Cleaning Care', 'product_fk': 152, 'stacking_layer': 1, 'category_fk': 102, 'bay_number': 2, 'shelf_number': 2, 'facing_sequence_number': 1, 'sub_category': 'Bodywash'}, {'scene_fk': 16588190, 'manufacturer_name': 'P&G\xe5\xae\x9d\xe6\xb4\x81', 'brand_name': 'Safeguard', 'category': 'Personal Cleaning Care', 'product_fk': 152, 'stacking_layer': 1, 'category_fk': 101, 'bay_number': 2, 'shelf_number': 2, 'facing_sequence_number': 3, 'sub_category': 'Handwash'}, {'scene_fk': 16588190, 'manufacturer_name': 'P&G\xe5\xae\x9d\xe6\xb4\x81', 'brand_name': 'hola', 'category': 'Personal Cleaning Care', 'product_fk': 152, 'stacking_layer': 1, 'category_fk': 101, 'bay_number': 2, 'shelf_number': 2, 'facing_sequence_number': 2, 'sub_category': 'HOLA'}]) scene_tool_box.get_filterd_matches = MagicMock(return_value=pd.DataFrame(data)) scene_tool_box.common.write_to_db_result = MagicMock() scene_tool_box.calculate_facing_eye_level(data, 2) kpi_results = scene_tool_box.common.write_to_db_result.mock_calls if kpi_results: self.assertEqual(len(kpi_results), 2, 'expects to write 2 parameters to db') self.assertEqual(kpi_results[1][2]['result'], 4, "result isn't 4 although there are 4 facings in shelf 2") else: raise Exception('No results were saved')
def test__get_filterd_matches_test_type(self): """ test that the result is a DF """ scene_tool_box = PngcnSceneKpis(self.ProjectConnector_mock, self.common_mock, 16588190, self.data_provider_mock) # test that the result is a DF df_type = scene_tool_box.get_filterd_matches() self.assertIsInstance(df_type, type(pd.DataFrame()))
def test__get_filterd_matches_test_manufacturer_size(self): """ test that there is only one manufacturer fk in the return DF """ scene_tool_box = PngcnSceneKpis(self.ProjectConnector_mock, self.common_mock, 16588190, self.data_provider_mock) # test that the result is a DF df_type = scene_tool_box.get_filterd_matches() # test that there is only one manufacturer fk in the return DF unique_fk = len(df_type['manufacturer_fk'].unique()) self.assertEqual(unique_fk, 1)
def test__get_filterd_matches_test_manufacturer_fk(self): """ test that the only manufacturer fk in DF is Png """ scene_tool_box = PngcnSceneKpis(self.ProjectConnector_mock, self.common_mock, 16588190, self.data_provider_mock) # test that the result is a DF df_type = scene_tool_box.get_filterd_matches() # test that the only manufacturer fk in DF is Png png_fk = df_type['manufacturer_fk'].unique()[0] self.assertEqual(png_fk, 4)
def test_calculate_linear_or_presize_linear_length_test_results_length(self): """ test that we write 8 fields to DB """ scene_tool_box = PngcnSceneKpis(self.ProjectConnector_mock, self.common_mock, 16588190, self.data_provider_mock) data = [{'scene_fk': 101, 'manufacturer_fk': 2, 'product_fk': 252, 'width_mm': 0.84, 'width_mm_advance': 1.23}, {'scene_fk': 121, 'manufacturer_fk': 4, 'product_fk': 132, 'width_mm': 0.80, 'width_mm_advance': 0.99}, {'scene_fk': 201, 'manufacturer_fk': 4, 'product_fk': 152, 'width_mm': 0.28, 'width_mm_advance': 0.75}, {'scene_fk': 151, 'manufacturer_fk': 5, 'product_fk': 172, 'width_mm': 0.95, 'width_mm_advance': 0.15}] scene_tool_box.get_filterd_matches = MagicMock(return_value=pd.DataFrame(data)) scene_tool_box.png_manufacturer_fk = 4 scene_tool_box.common.write_to_db_result = MagicMock() width = random.choice(['width_mm', 'width_mm_advance']) scene_tool_box.calculate_linear_or_presize_linear_length(width) kpi_results = scene_tool_box.common.write_to_db_result.mock_calls[0][2] if kpi_results: self.assertEqual(len(kpi_results), 8, 'expects to write 8 parameters to db')
def test_calculate_linear_or_presize_linear_length_test_results_sanity(self): """ test if the numerator is greater then denominator (if the subgroup is greater then containing group) """ scene_tool_box = PngcnSceneKpis(self.ProjectConnector_mock, self.common_mock, 16588190, self.data_provider_mock) data = [{'scene_fk': 101, 'manufacturer_fk': 2, 'product_fk': 252, 'width_mm': 0.84, 'width_mm_advance': 1.23}, {'scene_fk': 121, 'manufacturer_fk': 4, 'product_fk': 132, 'width_mm': 0.80, 'width_mm_advance': 0.99}, {'scene_fk': 201, 'manufacturer_fk': 4, 'product_fk': 152, 'width_mm': 0.28, 'width_mm_advance': 0.75}, {'scene_fk': 151, 'manufacturer_fk': 5, 'product_fk': 172, 'width_mm': 0.95, 'width_mm_advance': 0.15}] scene_tool_box.get_filterd_matches = MagicMock(return_value=pd.DataFrame(data)) scene_tool_box.png_manufacturer_fk = 4 scene_tool_box.common.write_to_db_result = MagicMock() width = random.choice(['width_mm', 'width_mm_advance']) scene_tool_box.calculate_linear_or_presize_linear_length(width) kpi_results = scene_tool_box.common.write_to_db_result.mock_calls[0][2] if kpi_results: numerator = kpi_results['numerator_result'] denominator = kpi_results['denominator_result'] self.assertGreaterEqual(denominator, numerator, 'the numerator cant be greater then denominator')