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)
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)