Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: updated test for serving_size for nutrition table #8685

Merged
merged 1 commit into from
Jul 12, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
);
Comment on lines +572 to +586
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

When I see we reapeat the test 3 times, shan't we change check_quality_and_test_product_has_quality_tag to have a list of tags to check for presence, and a list of tags to check for absence ?

Of course in another PR.

# 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
Loading