コード例 #1
0
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
コード例 #2
0
 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)
コード例 #3
0
    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)
コード例 #4
0
 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)
コード例 #5
0
    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))
コード例 #6
0
 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)
コード例 #7
0
 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)
コード例 #8
0
    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))
コード例 #9
0
ファイル: api_to_db.py プロジェクト: tohugaby/pur_beurre_web
 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)
コード例 #10
0
    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)
コード例 #11
0
    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)
コード例 #12
0
    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)