diff --git a/lib/ProductOpener/DataQualityFood.pm b/lib/ProductOpener/DataQualityFood.pm index de185d5915bb2..8ac808984760b 100644 --- a/lib/ProductOpener/DataQualityFood.pm +++ b/lib/ProductOpener/DataQualityFood.pm @@ -1203,12 +1203,18 @@ Checks related to the quantity and serving quantity. =cut +# Check quantity values. See https://en.wiki.openfoodfacts.org/Products_quantities sub check_quantity ($product_ref) { # quantity contains "e" - might be an indicator that the user might have wanted to use "℮" \N{U+212E} - if ( (defined $product_ref->{quantity}) - and ($product_ref->{quantity} =~ /(?:.*e$)|(?:[0-9]+\s*[kmc]?[gl]?\s*e)/i) - and (not($product_ref->{quantity} =~ /\N{U+212E}/i))) + # example: 650 g e + if ( + (defined $product_ref->{quantity}) + # contains "kg e", or "g e", or "cl e", etc. + and ($product_ref->{quantity} =~ /(?:[0-9]+\s*[kmc]?[gl]\s*e)/i) + # contains the "℮" symbol + and (not($product_ref->{quantity} =~ /\N{U+212E}/i)) + ) { push @{$product_ref->{data_quality_info_tags}}, "en:quantity-contains-e"; } diff --git a/tests/unit/dataqualityfood.t b/tests/unit/dataqualityfood.t index 9d336d52485d2..a269c5df9aca9 100644 --- a/tests/unit/dataqualityfood.t +++ b/tests/unit/dataqualityfood.t @@ -6,6 +6,7 @@ use utf8; use Test::More; use ProductOpener::DataQuality qw/:all/; +use ProductOpener::DataQualityFood qw/:all/; use ProductOpener::Tags qw/:all/; use ProductOpener::Ingredients qw/:all/; @@ -707,4 +708,40 @@ check_quality_and_test_product_has_quality_tag( 'sum of fructose plus glucose plus maltose plus lactose plus sucrose cannot be greater than sugars', 0 ); +# testing of ProductOpener::DataQualityFood::check_quantity subroutine +$product_ref = {quantity => "300g"}; +ProductOpener::DataQuality::check_quality($product_ref); +check_quality_and_test_product_has_quality_tag($product_ref, 'en:quantity-contains-e', + 'quantity does not contain e', 0); +$product_ref = {quantity => "1 verre"}; +ProductOpener::DataQuality::check_quality($product_ref); +check_quality_and_test_product_has_quality_tag($product_ref, 'en:quantity-contains-e', + 'quantity does not contain e', 0); +$product_ref = {quantity => "1 litre"}; +ProductOpener::DataQuality::check_quality($product_ref); +check_quality_and_test_product_has_quality_tag($product_ref, 'en:quantity-contains-e', + 'quantity does not contain e', 0); +$product_ref = {quantity => "225 g ℮"}; +ProductOpener::DataQuality::check_quality($product_ref); +check_quality_and_test_product_has_quality_tag($product_ref, 'en:quantity-contains-e', 'quantity does not contain e', + 0); +$product_ref = {quantity => "300ge"}; +ProductOpener::DataQuality::check_quality($product_ref); +check_quality_and_test_product_has_quality_tag($product_ref, 'en:quantity-contains-e', 'quantity contains e', 1); +$product_ref = {quantity => "300mge"}; +ProductOpener::DataQuality::check_quality($product_ref); +check_quality_and_test_product_has_quality_tag($product_ref, 'en:quantity-contains-e', 'quantity contains e', 1); +$product_ref = {quantity => "300 mg e"}; +ProductOpener::DataQuality::check_quality($product_ref); +check_quality_and_test_product_has_quality_tag($product_ref, 'en:quantity-contains-e', 'quantity contains e', 1); +$product_ref = {quantity => "200 g e (2x100g)"}; +ProductOpener::DataQuality::check_quality($product_ref); +check_quality_and_test_product_has_quality_tag($product_ref, 'en:quantity-contains-e', 'quantity contains e', 1); +$product_ref = {quantity => "1kge35.27oz"}; +ProductOpener::DataQuality::check_quality($product_ref); +check_quality_and_test_product_has_quality_tag($product_ref, 'en:quantity-contains-e', 'quantity contains e', 1); +$product_ref = {quantity => "300 ml e / 342 g"}; +ProductOpener::DataQuality::check_quality($product_ref); +check_quality_and_test_product_has_quality_tag($product_ref, 'en:quantity-contains-e', 'quantity contains e', 1); + done_testing();