def test_insert_product_without_an_url(self):
        data = [
            {
                "nutriscore_grade": "d",
                "code": "7622210449283",
                "product_name": "Prince goût chocolat au blé complet",
            }
        ]
        feeder = FeedDb()
        feeder.feed_db(data)
        product = Product.objects.filter(code="7622210449283")

        self.assertFalse(product)
    def test_insert_product_without_a_code(self):
        data = [
            {
                "nutriscore_grade": "d",
                "url": "https://fr.openfoodfacts.org/produit/chocolat-au-ble-complet-lu",
                "product_name": "Prince goût chocolat au blé complet",
            }
        ]
        feeder = FeedDb()
        feeder.feed_db(data)
        product = Product.objects.filter(nutriscore_grade="d")

        self.assertFalse(product)
    def test_insert_product_with_all_required_fields(self):
        data = [
            {
                "nutriscore_grade": "d",
                "code": "7622210449283",
                "url": "https://fr.openfoodfacts.org/produit/chocolat-au-ble-complet-lu",
                "product_name": "Prince goût chocolat au blé complet",
            }
        ]
        feeder = FeedDb()
        feeder.feed_db(data)
        product = Product.objects.filter(code="7622210449283")

        self.assertTrue(product)
    def test_insert_product_with_a_category_name_too_long(self):
        data = [
            {
                "nutriscore_grade": "d",
                "code": "7622210449283",
                "url": "https://fr.openfoodfacts.org/produit/chocolat-au-ble-complet-lu",
                "product_name": "Prince goût chocolat au blé complet",
                "categories": 105 * "a",
            }
        ]
        feeder = FeedDb()
        feeder.feed_db(data)
        categories = Category.objects.all()
        product = Product.objects.filter(code="7622210449283")

        self.assertFalse(categories)
        self.assertTrue(product)
    def test_insert_product_with_categories(self):
        data = [
            {
                "nutriscore_grade": "d",
                "code": "7622210449283",
                "url": "https://fr.openfoodfacts.org/produit/chocolat-au-ble-complet-lu",
                "product_name": "Prince goût chocolat au blé complet",
                "categories": "foo,bar",
            }
        ]
        feeder = FeedDb()
        feeder.feed_db(data)
        categories = Category.objects.all()
        product = Product.objects.all().first()

        self.assertTrue(categories)
        self.assertTrue(len(categories) == 2)
        self.assertTrue(product)
        self.assertTrue(len(product.categories.all()) == 2)
Esempio n. 6
0
    def handle(self, *args, **options):
        try:
            raw_products = Api().get_products()
        except HTTPError as err:
            if err.status_code == 404:
                self.stdout.write(
                    self.style.http_not_found(
                        "Could'nt reach Open Food Facts' API."))
            elif err.status_code == 500:
                message = """Something went wrong with Open Food Facts' servers,
                    please try again later."""

                self.stdout.write(self.style.http_server_error(message))
            else:
                self.stdout.write(
                    self.style.warning(
                        "Something went wrong with Open Food Facts'."))
        except ConnectionError:
            self.stdout.write(
                self.style.WARNING("Please check your connection."))
        except Timeout:
            self.stdout.write(self.style.WARNING("The request timed out."))
        else:
            FeedDb().feed_db(raw_products)