def get_products_data_with_mock(fake_data_path: str, file_name: str, nb_files=1, nb_pages=None): """ Get products data with mock. :param fake_data_path: :param file_name: :param nb_files: :param nb_pages: :return: """ file_name_list = [ "%s%s.json" % (file_name, file_num) for file_num in range(1, nb_files + 1) ] fake_data_products = [] for filename in file_name_list: with open(os.path.join(fake_data_path, filename), 'r') as file: fake_data_products.append(file.read()) with requests_mock.Mocker() as mock: for index, fake_data in enumerate(fake_data_products): mock.get(Product.get_list_api_url(index + 1), text=fake_data) if not nb_pages: data = Product.get_api_data_list() else: data = Product.get_api_data_list(nb_pages=nb_pages) return data
def get_product_json_test_files(self): """ Recover category json test file from OpenfoodFacts """ Product.get_api_data_list(nb_pages=self.max_nb_pages, start_page=1, from_cache=False)
def setUp(self): self.fake_data_path = os.path.join( os.path.dirname(__file__), 'fake_data') data = get_categories_data_with_mock(self.fake_data_path, 'categories_short') Category.insert_data(data) data = get_products_data_with_mock(self.fake_data_path, 'products', nb_files=3) Product.insert_data(data)
def test_get_data_for_product_element(self): """ Test data getters for product element. :return: """ with open(os.path.join(self.fake_data_path, '3222472887966.json'), 'r') as file: fake_data_product = file.read() with requests_mock.Mocker() as mock: mock.get(Product.get_element_api_url( self.product_id), text=fake_data_product) data = Product.get_api_data_element(self.product_id) self.assertIsInstance(data, dict)
def test_get_data_for_product_element(self): """ Test data writer for product element. :return: """ # file_path = os.path.join(settings.JSON_DIR_PATH, "%s.json" % Product._meta.model_name) with open(os.path.join(self.fake_data_path, '3222472887966.json'), 'r') as file: fake_data_product = file.read() with requests_mock.Mocker() as mock: mock.get(Product.get_element_api_url( self.product_id), text=fake_data_product) data = Product.get_api_data_element(self.product_id) file = Product.write_api_data(data) self.assertTrue(os.path.exists(file))
def test_get_url_for_product_element(self): """ Test url getters for product element. :return: """ url = Product.get_element_api_url(element_id=self.product_id) self.assertIsNotNone(url)
def test_get_url_for_product_list(self): """ Test url getters for product list. :return: """ url = Product.get_list_api_url(9) self.assertIsNotNone(url) self.assertIn('9', url)
def test_write_file_for_product_list(self): """ Test data writer for product list. :return: """ # file_path = os.path.join(settings.JSON_DIR_PATH, "%s_list.json" % Product._meta.model_name) data = get_products_data_with_mock(self.fake_data_path, 'products', nb_files=3) file = Product.write_api_data(data) self.assertTrue(os.path.exists(file))
def get_product(actual_page: int = 1, from_cache: bool = False, grumpy_mode: bool = False, filters: dict = None): """ get products data and insert them into Product table. :param actual_page: start page. :param from_cache: get data from cache or online :param grumpy_mode: activate strict mode :param filters: filter to apply to products data data :return: """ data = Product.get_api_data_list(nb_pages=1, start_page=actual_page, from_cache=from_cache) Product.insert_data(data, strict_required_field_mode=grumpy_mode, data_filters=filters) return bool(data)
def test_insert_product_list(self): """ Test insert product list. :return: """ data = get_categories_data_with_mock(self.fake_data_path, 'categories_short') Category.insert_data(data) nb_elements_before = Product.objects.count() data = get_products_data_with_mock(self.fake_data_path, 'products', nb_files=3) # test create Product.insert_data(data) nb_elements_after = Product.objects.count() self.assertGreater(nb_elements_after, nb_elements_before) # test update Product.insert_data(data) new_nb_elements_after = Product.objects.count() self.assertEqual(new_nb_elements_after, nb_elements_after)
def test_insert_product_element(self): """ Test insert products element. :return: """ data = get_categories_data_with_mock(self.fake_data_path, 'categories_short') Category.insert_data(data) nb_elements_before = Product.objects.count() with open(os.path.join(self.fake_data_path, '3222472887966.json'), 'r') as file: fake_data_product = file.read() with requests_mock.Mocker() as mock: mock.get(Product.get_element_api_url( self.product_id), text=fake_data_product) data = Product.get_api_data_element(self.product_id) # test create Product.insert_data(data) nb_elements_after = Product.objects.count() self.assertGreater(nb_elements_after, nb_elements_before) # test update Product.insert_data(data) new_nb_elements_after = Product.objects.count() self.assertEqual(new_nb_elements_after, nb_elements_after)
def test_insert_product_list_with_strict_mode(self): """ Test insert products list with strict mode. :return: """ data = get_categories_data_with_mock(self.fake_data_path, 'categories_short') Category.insert_data(data) nb_elements_before = Product.objects.count() data = get_products_data_with_mock(self.fake_data_path, 'products', nb_files=3) # test create Product.insert_data(data, strict_required_field_mode=True) nb_elements_after = Product.objects.count() self.assertGreater(nb_elements_after, nb_elements_before) # test update Product.insert_data(data) new_nb_elements_after = Product.objects.count() self.assertGreater(new_nb_elements_after, nb_elements_after)