Skip to content

Commit

Permalink
feat: updated test for serving_size for nutrition table (#8685)
Browse files Browse the repository at this point in the history
updated test for serving_size for nutrition table
  • Loading branch information
benbenben2 committed Jul 12, 2023
1 parent 0a2805a commit 6f5a88b
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 9 deletions.
11 changes: 7 additions & 4 deletions lib/ProductOpener/DataQualityFood.pm
Original file line number Diff line number Diff line change
Expand Up @@ -668,6 +668,7 @@ sub check_nutrition_data ($product_ref) {
}
}

# catch serving_size = "serving", regardless of setting (per 100g or per serving)
if ( (defined $product_ref->{serving_size})
and ($product_ref->{serving_size} ne "")
and ($product_ref->{serving_size} !~ /\d/))
Expand All @@ -678,14 +679,16 @@ sub check_nutrition_data ($product_ref) {
and (defined $product_ref->{nutrition_data_per})
and ($product_ref->{nutrition_data_per} eq 'serving'))
{

if ((not defined $product_ref->{serving_size}) or ($product_ref->{serving_size} eq '')) {
push @{$product_ref->{data_quality_warnings_tags}},
"en:nutrition-data-per-serving-missing-serving-size";
push @{$product_ref->{data_quality_errors_tags}}, "en:nutrition-data-per-serving-missing-serving-size";
}
elsif ($product_ref->{serving_quantity} == 0) {
elsif ($product_ref->{serving_quantity} eq "0") {
push @{$product_ref->{data_quality_errors_tags}}, "en:nutrition-data-per-serving-serving-quantity-is-0";
}
elsif ($product_ref->{serving_quantity} == 0) {
push @{$product_ref->{data_quality_errors_tags}},
"en:nutrition-data-per-serving-serving-quantity-is-not-recognized";
}
}
}

Expand Down
2 changes: 1 addition & 1 deletion lib/ProductOpener/Units.pm
Original file line number Diff line number Diff line change
Expand Up @@ -307,7 +307,7 @@ sub normalize_serving_size ($serving) {
}

#$log->trace("serving size normalized", { serving => $serving, q => $q, u => $u }) if $log->is_trace();
return 0;
return;
}

# @todo we should have equivalences for more units if we are supporting this
Expand Down
12 changes: 8 additions & 4 deletions taxonomies/data_quality.txt
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,14 @@ fr:Acides gras satur茅s sup茅rieurs aux mati猫res grasses
description:en:Saturated Fat is a sub-section of Fat on the nutrition labels, as a result, it should always be smaller than fat.
description:fr:Les acides gras satur茅s sont contenus dans les mati猫res grasses. En cons茅quence, ils ne doivent jamais 锚tre plus 茅l茅v茅s que ces derni猫res.

<en:Nutrition errors
en:Nutrition data per serving - Missing serving size, serving quantity is unknown
description:en:"Nutrition facts are specified for the product as sold." is checked. "per serving" is selected. But the serving size is missing.

<en:Nutrition errors
en:Nutrition data per serving - Serving quantity is not recognized
description:en: although serving size is given, it cannot be parsed (digit or unit may be missing or unknown)

<en:Nutrition errors
en:Nutrition data per serving - Serving quantity is 0
fr:Donn茅es nutritionnelles par portion - portion nulle
Expand Down Expand Up @@ -2689,10 +2697,6 @@ description:en: We have nutrition data for prepared product
en:Nutrition data - Prepared without category dried products to be rehydrated
#description:en:

<en:Nutrition warnings
en:Nutrition data per serving - Missing serving size
#description:en:

<en:Nutri-Score warnings
en:Nutrition grade FR producer mismatch NOK
#description:en:
Expand Down
86 changes: 86 additions & 0 deletions tests/unit/dataqualityfood.t
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,92 @@ check_quality_and_test_product_has_quality_tag(
'serving size should contains digits', 0
);

# serving size is missing
$product_ref = {
nutrition_data => "on",
nutrition_data_per => "serving"
};
check_quality_and_test_product_has_quality_tag(
$product_ref,
'en:nutrition-data-per-serving-missing-serving-size',
'serving size should be provided if "per serving" is selected', 1
);
check_quality_and_test_product_has_quality_tag(
$product_ref,
'en:nutrition-data-per-serving-serving-quantity-is-0',
'serving size equal to 0 is unexpected', 0
);
check_quality_and_test_product_has_quality_tag(
$product_ref,
'en:nutrition-data-per-serving-serving-quantity-is-not-recognized',
'serving size cannot be parsed', 0
);
# serving size equal to 0
$product_ref = {
nutrition_data => "on",
nutrition_data_per => "serving",
serving_quantity => "0",
serving_size => "0g"
};
check_quality_and_test_product_has_quality_tag(
$product_ref,
'en:nutrition-data-per-serving-missing-serving-size',
'serving size should be provided if "per serving" is selected', 0
);
check_quality_and_test_product_has_quality_tag(
$product_ref,
'en:nutrition-data-per-serving-serving-quantity-is-0',
'serving size equal to 0 is unexpected', 1
);
check_quality_and_test_product_has_quality_tag(
$product_ref,
'en:nutrition-data-per-serving-serving-quantity-is-not-recognized',
'serving size cannot be parsed', 0
);
# serving size cannot be parsed
$product_ref = {
nutrition_data => "on",
nutrition_data_per => "serving",
serving_size => "1 container"
};
check_quality_and_test_product_has_quality_tag(
$product_ref,
'en:nutrition-data-per-serving-missing-serving-size',
'serving size should be provided if "per serving" is selected', 0
);
check_quality_and_test_product_has_quality_tag(
$product_ref,
'en:nutrition-data-per-serving-serving-quantity-is-0',
'serving size equal to 0 is unexpected', 0
);
check_quality_and_test_product_has_quality_tag(
$product_ref,
'en:nutrition-data-per-serving-serving-quantity-is-not-recognized',
'serving size cannot be parsed', 1
);
# last 3 tests should not appears when expected serving size is provided
$product_ref = {
nutrition_data => "on",
nutrition_data_per => "serving",
serving_quantity => "50",
serving_size => "50 mL"
};
check_quality_and_test_product_has_quality_tag(
$product_ref,
'en:nutrition-data-per-serving-missing-serving-size',
'serving size should be provided if "per serving" is selected', 0
);
check_quality_and_test_product_has_quality_tag(
$product_ref,
'en:nutrition-data-per-serving-serving-quantity-is-0',
'serving size equal to 0 is unexpected', 0
);
check_quality_and_test_product_has_quality_tag(
$product_ref,
'en:nutrition-data-per-serving-serving-quantity-is-not-recognized',
'serving size cannot be parsed', 0
);

# percentage for ingredient is higher than 100% in extracted ingredients from the picture
$product_ref = {
ingredients => [
Expand Down

0 comments on commit 6f5a88b

Please sign in to comment.