From 82fbf7c201f041342595d73e4c0771c638271783 Mon Sep 17 00:00:00 2001 From: Monalika Patnaik <99353300+MonalikaPatnaik@users.noreply.github.com> Date: Mon, 19 Jun 2023 15:52:04 +0530 Subject: [PATCH] fix: Replace existing values with Producer Supplied Allergens and Traces values (#8538) --- lib/ProductOpener/Config_off.pm | 5 + lib/ProductOpener/Import.pm | 10 + .../3003004006001.json | 713 +++++++++++++++++ .../3003004006002.json | 522 +++++++++++++ .../3003004006003.json | 499 ++++++++++++ .../3003004006004.json | 736 ++++++++++++++++++ .../3003004006005.json | 547 +++++++++++++ .../3003004006006.json | 531 +++++++++++++ .../3003004006007.json | 507 ++++++++++++ .../replace_existing_values/stats.json | 177 +++++ .../{ => test}/2003004006001.json | 0 .../{ => test}/2003004006002.json | 0 .../{ => test}/2003004006003.json | 0 .../{ => test}/2003004006004.json | 0 .../{ => test}/2003004006005.json | 0 .../{ => test}/2003004006006.json | 0 .../{ => test}/2003004006007.json | 0 .../import_csv_file/{ => test}/stats.json | 0 tests/integration/import_csv_file.t | 78 +- .../replace_existing_values_1.csv | 8 + .../replace_existing_values_2.csv | 8 + 21 files changed, 4313 insertions(+), 28 deletions(-) create mode 100644 tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006001.json create mode 100644 tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006002.json create mode 100644 tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006003.json create mode 100644 tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006004.json create mode 100644 tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006005.json create mode 100644 tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006006.json create mode 100644 tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006007.json create mode 100644 tests/integration/expected_test_results/import_csv_file/replace_existing_values/stats.json rename tests/integration/expected_test_results/import_csv_file/{ => test}/2003004006001.json (100%) rename tests/integration/expected_test_results/import_csv_file/{ => test}/2003004006002.json (100%) rename tests/integration/expected_test_results/import_csv_file/{ => test}/2003004006003.json (100%) rename tests/integration/expected_test_results/import_csv_file/{ => test}/2003004006004.json (100%) rename tests/integration/expected_test_results/import_csv_file/{ => test}/2003004006005.json (100%) rename tests/integration/expected_test_results/import_csv_file/{ => test}/2003004006006.json (100%) rename tests/integration/expected_test_results/import_csv_file/{ => test}/2003004006007.json (100%) rename tests/integration/expected_test_results/import_csv_file/{ => test}/stats.json (100%) create mode 100644 tests/integration/inputs/import_csv_file/replace_existing_values_1.csv create mode 100644 tests/integration/inputs/import_csv_file/replace_existing_values_2.csv diff --git a/lib/ProductOpener/Config_off.pm b/lib/ProductOpener/Config_off.pm index a28769f547f86..de632ee051138 100644 --- a/lib/ProductOpener/Config_off.pm +++ b/lib/ProductOpener/Config_off.pm @@ -570,6 +570,11 @@ $options{categories_exempted_from_nutrient_levels} = [ ) ]; +$options{replace_existing_values_when_importing_those_tags_fields} = { + "allergens" => 1, + "traces" => 1, +}; + # fields for which we will load taxonomies # note: taxonomies that are used as properties of other taxonomies must be loaded first # (e.g. additives_classes are referenced in additives) diff --git a/lib/ProductOpener/Import.pm b/lib/ProductOpener/Import.pm index d743897baef93..8a80d90dc15ec 100644 --- a/lib/ProductOpener/Import.pm +++ b/lib/ProductOpener/Import.pm @@ -61,6 +61,7 @@ use Log::Any qw($log); use Storable qw(dclone); use Text::Fuzzy; +use Data::DeepAccess qw(deep_exists); BEGIN { use vars qw(@ISA @EXPORT_OK %EXPORT_TAGS); @@ -519,6 +520,15 @@ sub set_field_value ( $product_ref->{$field} = ""; delete $product_ref->{$field . "_tags"}; } + + # If we are on the producers platform, replace existing values by producer supplied values for allergens and traces + if (deep_exists(\%options, "replace_existing_values_when_importing_those_tags_fields", $field)) { + if ($imported_product_ref->{$field} ne "") { + $product_ref->{$field} = ""; + delete $product_ref->{$field . "_tags"}; + } + } + # existing is the list of already existing tags # that will be completed with more values my %existing = (); diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006001.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006001.json new file mode 100644 index 0000000000000..39c6428c2c794 --- /dev/null +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006001.json @@ -0,0 +1,713 @@ +{ + "_id" : "3003004006001", + "_keywords" : [ + "au", + "chocolat", + "fr", + "gateaux", + "packaging" + ], + "added_countries_tags" : [], + "allergens" : "en:celery", + "allergens_from_ingredients" : "", + "allergens_from_user" : "(fr) Celery", + "allergens_hierarchy" : [ + "en:celery" + ], + "allergens_imported" : "Celery", + "allergens_lc" : "fr", + "allergens_tags" : [ + "en:celery" + ], + "categories" : "Gâteaux au chocolat", + "categories_hierarchy" : [ + "en:snacks", + "en:sweet-snacks", + "en:biscuits-and-cakes", + "en:cakes", + "en:chocolate-cakes" + ], + "categories_imported" : "Gâteaux au chocolat", + "categories_lc" : "fr", + "categories_properties" : { + "agribalyse_food_code:en" : "23585", + "ciqual_food_code:en" : "23585" + }, + "categories_properties_tags" : [ + "all-products", + "categories-known", + "agribalyse-food-code-23585", + "agribalyse-food-code-known", + "agribalyse-proxy-food-code-unknown", + "ciqual-food-code-23585", + "ciqual-food-code-known", + "agribalyse-known", + "agribalyse-23585" + ], + "categories_tags" : [ + "en:snacks", + "en:sweet-snacks", + "en:biscuits-and-cakes", + "en:cakes", + "en:chocolate-cakes" + ], + "checkers_tags" : [], + "code" : "3003004006001", + "codes_tags" : [ + "code-13", + "3003004006xxx", + "300300400xxxx", + "30030040xxxxx", + "3003004xxxxxx", + "300300xxxxxxx", + "30030xxxxxxxx", + "3003xxxxxxxxx", + "300xxxxxxxxxx", + "30xxxxxxxxxxx", + "3xxxxxxxxxxxx" + ], + "complete" : 0, + "completeness" : 0.2, + "correctors_tags" : [ + "test-user" + ], + "countries" : "fr", + "countries_hierarchy" : [ + "en:france" + ], + "countries_imported" : "fr", + "countries_lc" : "fr", + "countries_tags" : [ + "en:france" + ], + "created_t" : "--ignore--", + "creator" : "test-user", + "data_quality_bugs_tags" : [], + "data_quality_errors_tags" : [], + "data_quality_info_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-known", + "en:food-groups-2-known", + "en:food-groups-3-unknown" + ], + "data_quality_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-known", + "en:food-groups-2-known", + "en:food-groups-3-unknown", + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_quality_warnings_tags" : [ + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_sources" : "Producers, Producer - test-org", + "data_sources_imported" : "Producers, Producer - test-org", + "data_sources_tags" : [ + "producers", + "producer-test-org" + ], + "ecoscore_data" : { + "adjustments" : { + "origins_of_ingredients" : { + "aggregated_origins" : [ + { + "origin" : "en:unknown", + "percent" : 100 + } + ], + "epi_score" : 0, + "epi_value" : -5, + "origins_from_origins_field" : [ + "en:unknown" + ], + "transportation_scores" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "transportation_values" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "values" : { + "ad" : -5, + "al" : -5, + "at" : -5, + "ax" : -5, + "ba" : -5, + "be" : -5, + "bg" : -5, + "ch" : -5, + "cy" : -5, + "cz" : -5, + "de" : -5, + "dk" : -5, + "dz" : -5, + "ee" : -5, + "eg" : -5, + "es" : -5, + "fi" : -5, + "fo" : -5, + "fr" : -5, + "gg" : -5, + "gi" : -5, + "gr" : -5, + "hr" : -5, + "hu" : -5, + "ie" : -5, + "il" : -5, + "im" : -5, + "is" : -5, + "it" : -5, + "je" : -5, + "lb" : -5, + "li" : -5, + "lt" : -5, + "lu" : -5, + "lv" : -5, + "ly" : -5, + "ma" : -5, + "mc" : -5, + "md" : -5, + "me" : -5, + "mk" : -5, + "mt" : -5, + "nl" : -5, + "no" : -5, + "pl" : -5, + "ps" : -5, + "pt" : -5, + "ro" : -5, + "rs" : -5, + "se" : -5, + "si" : -5, + "sj" : -5, + "sk" : -5, + "sm" : -5, + "sy" : -5, + "tn" : -5, + "tr" : -5, + "ua" : -5, + "uk" : -5, + "us" : -5, + "va" : -5, + "world" : -5, + "xk" : -5 + }, + "warning" : "origins_are_100_percent_unknown" + }, + "packaging" : { + "non_recyclable_and_non_biodegradable_materials" : 0, + "packagings" : [ + { + "ecoscore_material_score" : 92, + "ecoscore_shape_ratio" : 1, + "material" : "en:cardboard", + "number_of_units" : "1", + "quantity_per_unit" : "200g", + "quantity_per_unit_unit" : "g", + "quantity_per_unit_value" : "200", + "shape" : "en:box", + "weight_specified" : 42.3 + } + ], + "score" : 92, + "value" : -1 + }, + "production_system" : { + "labels" : [], + "value" : 0, + "warning" : "no_label" + }, + "threatened_species" : { + "warning" : "ingredients_missing" + } + }, + "agribalyse" : { + "agribalyse_food_code" : "23585", + "co2_agriculture" : 2.4094363, + "co2_consumption" : 0, + "co2_distribution" : 0.019530673, + "co2_packaging" : 0.28814657, + "co2_processing" : 4.9843661, + "co2_total" : 7.877454753, + "co2_transportation" : 0.17597511, + "code" : "23585", + "dqr" : "2.4", + "ef_agriculture" : 0.28769755, + "ef_consumption" : 0, + "ef_distribution" : 0.0048315303, + "ef_packaging" : 0.018911059, + "ef_processing" : 0.269046, + "ef_total" : 0.5963655983, + "ef_transportation" : 0.015879459, + "is_beverage" : 0, + "name_en" : "Chocolate cake", + "name_fr" : "Gâteau au chocolat", + "score" : 47, + "version" : "3.1" + }, + "grade" : "c", + "grades" : { + "ad" : "c", + "al" : "c", + "at" : "c", + "ax" : "c", + "ba" : "c", + "be" : "c", + "bg" : "c", + "ch" : "c", + "cy" : "c", + "cz" : "c", + "de" : "c", + "dk" : "c", + "dz" : "c", + "ee" : "c", + "eg" : "c", + "es" : "c", + "fi" : "c", + "fo" : "c", + "fr" : "c", + "gg" : "c", + "gi" : "c", + "gr" : "c", + "hr" : "c", + "hu" : "c", + "ie" : "c", + "il" : "c", + "im" : "c", + "is" : "c", + "it" : "c", + "je" : "c", + "lb" : "c", + "li" : "c", + "lt" : "c", + "lu" : "c", + "lv" : "c", + "ly" : "c", + "ma" : "c", + "mc" : "c", + "md" : "c", + "me" : "c", + "mk" : "c", + "mt" : "c", + "nl" : "c", + "no" : "c", + "pl" : "c", + "ps" : "c", + "pt" : "c", + "ro" : "c", + "rs" : "c", + "se" : "c", + "si" : "c", + "sj" : "c", + "sk" : "c", + "sm" : "c", + "sy" : "c", + "tn" : "c", + "tr" : "c", + "ua" : "c", + "uk" : "c", + "us" : "c", + "va" : "c", + "world" : "c", + "xk" : "c" + }, + "missing" : { + "ingredients" : 1, + "labels" : 1, + "origins" : 1 + }, + "missing_data_warning" : 1, + "score" : 41, + "scores" : { + "ad" : 41, + "al" : 41, + "at" : 41, + "ax" : 41, + "ba" : 41, + "be" : 41, + "bg" : 41, + "ch" : 41, + "cy" : 41, + "cz" : 41, + "de" : 41, + "dk" : 41, + "dz" : 41, + "ee" : 41, + "eg" : 41, + "es" : 41, + "fi" : 41, + "fo" : 41, + "fr" : 41, + "gg" : 41, + "gi" : 41, + "gr" : 41, + "hr" : 41, + "hu" : 41, + "ie" : 41, + "il" : 41, + "im" : 41, + "is" : 41, + "it" : 41, + "je" : 41, + "lb" : 41, + "li" : 41, + "lt" : 41, + "lu" : 41, + "lv" : 41, + "ly" : 41, + "ma" : 41, + "mc" : 41, + "md" : 41, + "me" : 41, + "mk" : 41, + "mt" : 41, + "nl" : 41, + "no" : 41, + "pl" : 41, + "ps" : 41, + "pt" : 41, + "ro" : 41, + "rs" : 41, + "se" : 41, + "si" : 41, + "sj" : 41, + "sk" : 41, + "sm" : 41, + "sy" : 41, + "tn" : 41, + "tr" : 41, + "ua" : 41, + "uk" : 41, + "us" : 41, + "va" : 41, + "world" : 41, + "xk" : 41 + }, + "status" : "known" + }, + "ecoscore_grade" : "c", + "ecoscore_score" : 41, + "ecoscore_tags" : [ + "c" + ], + "editors_tags" : [ + "test-user" + ], + "entry_dates_tags" : "--ignore--", + "food_groups" : "en:biscuits-and-cakes", + "food_groups_tags" : [ + "en:sugary-snacks", + "en:biscuits-and-cakes" + ], + "id" : "3003004006001", + "informers_tags" : [ + "test-user" + ], + "interface_version_created" : "import_csv_file - version 2019/09/17", + "lang" : "fr", + "lang_imported" : "fr", + "languages" : { + "en:french" : 1 + }, + "languages_codes" : { + "fr" : 1 + }, + "languages_hierarchy" : [ + "en:french" + ], + "languages_tags" : [ + "en:french", + "en:1" + ], + "last_edit_dates_tags" : "--ignore--", + "last_editor" : "test-user", + "last_modified_by" : "test-user", + "last_modified_t" : "--ignore--", + "lc" : "fr", + "lc_imported" : "fr", + "main_countries_tags" : [], + "misc_tags" : [ + "en:nutriscore-not-computed", + "en:nutrition-not-enough-data-to-compute-nutrition-score", + "en:nutriscore-missing-nutrition-data", + "en:nutriscore-missing-nutrition-data-energy", + "en:nutriscore-missing-nutrition-data-fat", + "en:nutriscore-missing-nutrition-data-saturated-fat", + "en:nutriscore-missing-nutrition-data-sugars", + "en:nutriscore-missing-nutrition-data-sodium", + "en:nutriscore-missing-nutrition-data-proteins", + "en:nutrition-no-fiber", + "en:packagings-number-of-components-1", + "en:packagings-complete", + "en:packagings-not-empty", + "en:packagings-with-weights", + "en:packagings-with-all-weights", + "en:packagings-with-all-weights-complete", + "en:ecoscore-extended-data-not-computed", + "en:ecoscore-missing-data-warning", + "en:ecoscore-missing-data-labels", + "en:ecoscore-missing-data-origins", + "en:ecoscore-computed", + "en:main-countries-new-product" + ], + "nova_group_debug" : "no nova group when the product does not have ingredients", + "nova_group_error" : "missing_ingredients", + "nova_groups_tags" : [ + "unknown" + ], + "nutrient_levels" : {}, + "nutrient_levels_tags" : [], + "nutriments" : {}, + "nutrition_data_per" : "100g", + "nutrition_data_prepared_per" : "100g", + "nutrition_grades_tags" : [ + "unknown" + ], + "nutrition_score_beverage" : 0, + "nutrition_score_debug" : "missing energy - missing fat - missing saturated-fat - missing sugars - missing sodium - missing proteins", + "nutrition_score_warning_no_fiber" : 1, + "owner" : "org-test-org", + "owner_fields" : "--ignore--", + "owners_tags" : "org-test-org", + "packaging_materials_tags" : [ + "en:cardboard" + ], + "packaging_recycling_tags" : [], + "packaging_shapes_tags" : [ + "en:box" + ], + "packagings" : [ + { + "material" : "en:cardboard", + "number_of_units" : 1, + "quantity_per_unit" : "200g", + "quantity_per_unit_unit" : "g", + "quantity_per_unit_value" : 200, + "shape" : "en:box", + "weight_specified" : 42.3 + } + ], + "packagings_complete" : 1, + "packagings_n" : 1, + "photographers_tags" : [], + "pnns_groups_1" : "Sugary snacks", + "pnns_groups_1_tags" : [ + "sugary-snacks", + "known" + ], + "pnns_groups_2" : "Biscuits and cakes", + "pnns_groups_2_tags" : [ + "biscuits-and-cakes", + "known" + ], + "popularity_key" : 0, + "product_name" : "Packagings fr", + "product_name_fr" : "Packagings fr", + "product_name_fr_imported" : "Packagings fr", + "removed_countries_tags" : [], + "rev" : 2, + "sources" : [ + { + "fields" : [ + "product_name_fr", + "categories", + "countries", + "data_sources", + "allergens", + "traces" + ], + "id" : null, + "images" : [], + "import_t" : "--ignore--", + "manufacturer" : null, + "name" : null, + "url" : null + }, + { + "fields" : [ + "allergens", + "traces" + ], + "id" : null, + "images" : [], + "import_t" : "--ignore--", + "manufacturer" : null, + "name" : null, + "url" : null + } + ], + "states" : "en:to-be-completed, en:nutrition-facts-to-be-completed, en:ingredients-to-be-completed, en:expiration-date-to-be-completed, en:packaging-code-to-be-completed, en:characteristics-to-be-completed, en:origins-to-be-completed, en:categories-completed, en:brands-to-be-completed, en:packaging-to-be-completed, en:quantity-to-be-completed, en:product-name-completed, en:photos-to-be-uploaded", + "states_hierarchy" : [ + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-completed", + "en:photos-to-be-uploaded" + ], + "states_tags" : [ + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-completed", + "en:photos-to-be-uploaded" + ], + "traces" : "en:sesame-seeds", + "traces_from_ingredients" : "", + "traces_from_user" : "(fr) Sesame", + "traces_hierarchy" : [ + "en:sesame-seeds" + ], + "traces_imported" : "Sesame", + "traces_lc" : "fr", + "traces_tags" : [ + "en:sesame-seeds" + ], + "unknown_nutrients_tags" : [], + "weighers_tags" : [] + } + \ No newline at end of file diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006002.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006002.json new file mode 100644 index 0000000000000..ef78e4c714ab9 --- /dev/null +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006002.json @@ -0,0 +1,522 @@ +{ + "_id" : "3003004006002", + "_keywords" : [ + "fr", + "packaging", + "virgule" + ], + "added_countries_tags" : [], + "allergens" : "en:molluscs", + "allergens_from_ingredients" : "", + "allergens_from_user" : "(fr) Molluscs", + "allergens_hierarchy" : [ + "en:molluscs" + ], + "allergens_imported" : "Molluscs", + "allergens_lc" : "fr", + "allergens_tags" : [ + "en:molluscs" + ], + "categories_properties" : {}, + "categories_properties_tags" : [ + "all-products", + "categories-unknown", + "agribalyse-food-code-unknown", + "agribalyse-proxy-food-code-unknown", + "ciqual-food-code-unknown", + "agribalyse-unknown" + ], + "checkers_tags" : [], + "code" : "3003004006002", + "codes_tags" : [ + "code-13", + "3003004006xxx", + "300300400xxxx", + "30030040xxxxx", + "3003004xxxxxx", + "300300xxxxxxx", + "30030xxxxxxxx", + "3003xxxxxxxxx", + "300xxxxxxxxxx", + "30xxxxxxxxxxx", + "3xxxxxxxxxxxx" + ], + "complete" : 0, + "completeness" : 0.1, + "correctors_tags" : [ + "test-user" + ], + "countries" : "fr", + "countries_hierarchy" : [ + "en:france" + ], + "countries_imported" : "fr", + "countries_lc" : "fr", + "countries_tags" : [ + "en:france" + ], + "created_t" : "--ignore--", + "creator" : "test-user", + "data_quality_bugs_tags" : [], + "data_quality_errors_tags" : [], + "data_quality_info_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-unknown", + "en:food-groups-2-unknown", + "en:food-groups-3-unknown" + ], + "data_quality_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-unknown", + "en:food-groups-2-unknown", + "en:food-groups-3-unknown", + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_quality_warnings_tags" : [ + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_sources" : "Producers, Producer - test-org", + "data_sources_imported" : "Producers, Producer - test-org", + "data_sources_tags" : [ + "producers", + "producer-test-org" + ], + "ecoscore_data" : { + "adjustments" : { + "origins_of_ingredients" : { + "aggregated_origins" : [ + { + "origin" : "en:unknown", + "percent" : 100 + } + ], + "epi_score" : 0, + "epi_value" : -5, + "origins_from_origins_field" : [ + "en:unknown" + ], + "transportation_scores" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "transportation_values" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "values" : { + "ad" : -5, + "al" : -5, + "at" : -5, + "ax" : -5, + "ba" : -5, + "be" : -5, + "bg" : -5, + "ch" : -5, + "cy" : -5, + "cz" : -5, + "de" : -5, + "dk" : -5, + "dz" : -5, + "ee" : -5, + "eg" : -5, + "es" : -5, + "fi" : -5, + "fo" : -5, + "fr" : -5, + "gg" : -5, + "gi" : -5, + "gr" : -5, + "hr" : -5, + "hu" : -5, + "ie" : -5, + "il" : -5, + "im" : -5, + "is" : -5, + "it" : -5, + "je" : -5, + "lb" : -5, + "li" : -5, + "lt" : -5, + "lu" : -5, + "lv" : -5, + "ly" : -5, + "ma" : -5, + "mc" : -5, + "md" : -5, + "me" : -5, + "mk" : -5, + "mt" : -5, + "nl" : -5, + "no" : -5, + "pl" : -5, + "ps" : -5, + "pt" : -5, + "ro" : -5, + "rs" : -5, + "se" : -5, + "si" : -5, + "sj" : -5, + "sk" : -5, + "sm" : -5, + "sy" : -5, + "tn" : -5, + "tr" : -5, + "ua" : -5, + "uk" : -5, + "us" : -5, + "va" : -5, + "world" : -5, + "xk" : -5 + }, + "warning" : "origins_are_100_percent_unknown" + }, + "packaging" : { + "non_recyclable_and_non_biodegradable_materials" : 0, + "packagings" : [ + { + "ecoscore_material_score" : 76, + "ecoscore_shape_ratio" : 1, + "material" : "en:steel", + "number_of_units" : "2", + "shape" : "en:food-can", + "weight_specified" : 42.3 + } + ], + "score" : 76, + "value" : -2 + }, + "production_system" : { + "labels" : [], + "value" : 0, + "warning" : "no_label" + }, + "threatened_species" : { + "warning" : "ingredients_missing" + } + }, + "agribalyse" : { + "warning" : "missing_agribalyse_match" + }, + "missing" : { + "categories" : 1, + "ingredients" : 1, + "labels" : 1, + "origins" : 1 + }, + "missing_agribalyse_match_warning" : 1, + "status" : "unknown" + }, + "ecoscore_grade" : "unknown", + "ecoscore_tags" : [ + "unknown" + ], + "editors_tags" : [ + "test-user" + ], + "entry_dates_tags" : "--ignore--", + "food_groups_tags" : [], + "id" : "3003004006002", + "informers_tags" : [ + "test-user" + ], + "interface_version_created" : "import_csv_file - version 2019/09/17", + "lang" : "fr", + "lang_imported" : "fr", + "languages" : { + "en:french" : 1 + }, + "languages_codes" : { + "fr" : 1 + }, + "languages_hierarchy" : [ + "en:french" + ], + "languages_tags" : [ + "en:french", + "en:1" + ], + "last_edit_dates_tags" : "--ignore--", + "last_editor" : "test-user", + "last_modified_by" : "test-user", + "last_modified_t" : "--ignore--", + "lc" : "fr", + "lc_imported" : "fr", + "main_countries_tags" : [], + "misc_tags" : [ + "en:nutriscore-not-computed", + "en:nutriscore-missing-category", + "en:nutrition-not-enough-data-to-compute-nutrition-score", + "en:nutriscore-missing-nutrition-data", + "en:nutriscore-missing-nutrition-data-energy", + "en:nutriscore-missing-nutrition-data-fat", + "en:nutriscore-missing-nutrition-data-saturated-fat", + "en:nutriscore-missing-nutrition-data-sugars", + "en:nutriscore-missing-nutrition-data-sodium", + "en:nutriscore-missing-nutrition-data-proteins", + "en:nutrition-no-fiber", + "en:packagings-number-of-components-1", + "en:packagings-complete", + "en:packagings-not-empty", + "en:packagings-with-weights", + "en:packagings-with-all-weights", + "en:packagings-with-all-weights-complete", + "en:ecoscore-extended-data-not-computed", + "en:ecoscore-not-computed", + "en:main-countries-new-product" + ], + "nova_group_debug" : "no nova group when the product does not have ingredients", + "nova_group_error" : "missing_ingredients", + "nova_groups_tags" : [ + "unknown" + ], + "nutrient_levels" : {}, + "nutrient_levels_tags" : [], + "nutriments" : {}, + "nutrition_data_per" : "100g", + "nutrition_data_prepared_per" : "100g", + "nutrition_grades_tags" : [ + "unknown" + ], + "nutrition_score_beverage" : 0, + "nutrition_score_debug" : "no score when the product does not have a category - missing energy - missing fat - missing saturated-fat - missing sugars - missing sodium - missing proteins", + "nutrition_score_warning_no_fiber" : 1, + "owner" : "org-test-org", + "owner_fields" : "--ignore--", + "owners_tags" : "org-test-org", + "packaging_materials_tags" : [ + "en:steel" + ], + "packaging_recycling_tags" : [], + "packaging_shapes_tags" : [ + "en:food-can" + ], + "packagings" : [ + { + "material" : "en:steel", + "number_of_units" : 2, + "shape" : "en:food-can", + "weight_specified" : 42.3 + } + ], + "packagings_complete" : 1, + "packagings_n" : 1, + "photographers_tags" : [], + "pnns_groups_1" : "unknown", + "pnns_groups_1_tags" : [ + "unknown", + "missing-category" + ], + "pnns_groups_2" : "unknown", + "pnns_groups_2_tags" : [ + "unknown", + "missing-category" + ], + "popularity_key" : 0, + "product_name" : "Packagings fr virgule", + "product_name_fr" : "Packagings fr virgule", + "product_name_fr_imported" : "Packagings fr virgule", + "removed_countries_tags" : [], + "rev" : 2, + "sources" : [ + { + "fields" : [ + "product_name_fr", + "countries", + "data_sources", + "allergens", + "traces" + ], + "id" : null, + "images" : [], + "import_t" : "--ignore--", + "manufacturer" : null, + "name" : null, + "url" : null + }, + { + "fields" : [ + "allergens", + "traces" + ], + "id" : null, + "images" : [], + "import_t" : "--ignore--", + "manufacturer" : null, + "name" : null, + "url" : null + } + ], + "states" : "en:to-be-completed, en:nutrition-facts-to-be-completed, en:ingredients-to-be-completed, en:expiration-date-to-be-completed, en:packaging-code-to-be-completed, en:characteristics-to-be-completed, en:origins-to-be-completed, en:categories-to-be-completed, en:brands-to-be-completed, en:packaging-to-be-completed, en:quantity-to-be-completed, en:product-name-completed, en:photos-to-be-uploaded", + "states_hierarchy" : [ + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-to-be-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-completed", + "en:photos-to-be-uploaded" + ], + "states_tags" : [ + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-to-be-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-completed", + "en:photos-to-be-uploaded" + ], + "traces" : "en:milk", + "traces_from_ingredients" : "", + "traces_from_user" : "(fr) Milk", + "traces_hierarchy" : [ + "en:milk" + ], + "traces_imported" : "Milk", + "traces_lc" : "fr", + "traces_tags" : [ + "en:milk" + ], + "unknown_nutrients_tags" : [], + "weighers_tags" : [] + } + \ No newline at end of file diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006003.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006003.json new file mode 100644 index 0000000000000..a068cdd6263be --- /dev/null +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006003.json @@ -0,0 +1,499 @@ +{ + "_id" : "3003004006003", + "_keywords" : [ + "fr", + "packaging" + ], + "added_countries_tags" : [], + "allergens" : "", + "allergens_from_ingredients" : "", + "allergens_from_user" : "(fr) ", + "allergens_hierarchy" : [], + "allergens_tags" : [], + "categories_properties" : {}, + "categories_properties_tags" : [ + "all-products", + "categories-unknown", + "agribalyse-food-code-unknown", + "agribalyse-proxy-food-code-unknown", + "ciqual-food-code-unknown", + "agribalyse-unknown" + ], + "checkers_tags" : [], + "code" : "3003004006003", + "codes_tags" : [ + "code-13", + "3003004006xxx", + "300300400xxxx", + "30030040xxxxx", + "3003004xxxxxx", + "300300xxxxxxx", + "30030xxxxxxxx", + "3003xxxxxxxxx", + "300xxxxxxxxxx", + "30xxxxxxxxxxx", + "3xxxxxxxxxxxx" + ], + "complete" : 0, + "completeness" : 0.1, + "correctors_tags" : [], + "countries" : "fr", + "countries_hierarchy" : [ + "en:france" + ], + "countries_imported" : "fr", + "countries_lc" : "fr", + "countries_tags" : [ + "en:france" + ], + "created_t" : "--ignore--", + "creator" : "test-user", + "data_quality_bugs_tags" : [], + "data_quality_errors_tags" : [], + "data_quality_info_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-unknown", + "en:food-groups-2-unknown", + "en:food-groups-3-unknown" + ], + "data_quality_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-unknown", + "en:food-groups-2-unknown", + "en:food-groups-3-unknown", + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_quality_warnings_tags" : [ + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_sources" : "Producers, Producer - test-org", + "data_sources_imported" : "Producers, Producer - test-org", + "data_sources_tags" : [ + "producers", + "producer-test-org" + ], + "ecoscore_data" : { + "adjustments" : { + "origins_of_ingredients" : { + "aggregated_origins" : [ + { + "origin" : "en:unknown", + "percent" : 100 + } + ], + "epi_score" : 0, + "epi_value" : -5, + "origins_from_origins_field" : [ + "en:unknown" + ], + "transportation_scores" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "transportation_values" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "values" : { + "ad" : -5, + "al" : -5, + "at" : -5, + "ax" : -5, + "ba" : -5, + "be" : -5, + "bg" : -5, + "ch" : -5, + "cy" : -5, + "cz" : -5, + "de" : -5, + "dk" : -5, + "dz" : -5, + "ee" : -5, + "eg" : -5, + "es" : -5, + "fi" : -5, + "fo" : -5, + "fr" : -5, + "gg" : -5, + "gi" : -5, + "gr" : -5, + "hr" : -5, + "hu" : -5, + "ie" : -5, + "il" : -5, + "im" : -5, + "is" : -5, + "it" : -5, + "je" : -5, + "lb" : -5, + "li" : -5, + "lt" : -5, + "lu" : -5, + "lv" : -5, + "ly" : -5, + "ma" : -5, + "mc" : -5, + "md" : -5, + "me" : -5, + "mk" : -5, + "mt" : -5, + "nl" : -5, + "no" : -5, + "pl" : -5, + "ps" : -5, + "pt" : -5, + "ro" : -5, + "rs" : -5, + "se" : -5, + "si" : -5, + "sj" : -5, + "sk" : -5, + "sm" : -5, + "sy" : -5, + "tn" : -5, + "tr" : -5, + "ua" : -5, + "uk" : -5, + "us" : -5, + "va" : -5, + "world" : -5, + "xk" : -5 + }, + "warning" : "origins_are_100_percent_unknown" + }, + "packaging" : { + "non_recyclable_and_non_biodegradable_materials" : 0, + "packagings" : [ + { + "ecoscore_material_score" : 100, + "ecoscore_shape_ratio" : 1, + "material" : "en:rpet-recycled-polyethylene-terephthalate", + "material_shape" : "en:rpet-recycled-polyethylene-terephthalate.en:bottle", + "non_recyclable_and_non_biodegradable" : "no", + "quantity_per_unit" : "1l", + "quantity_per_unit_unit" : "l", + "quantity_per_unit_value" : 1, + "shape" : "en:bottle", + "weight_specified" : 42.3 + } + ], + "score" : 100, + "value" : 0 + }, + "production_system" : { + "labels" : [], + "value" : 0, + "warning" : "no_label" + }, + "threatened_species" : { + "warning" : "ingredients_missing" + } + }, + "agribalyse" : { + "warning" : "missing_agribalyse_match" + }, + "missing" : { + "categories" : 1, + "ingredients" : 1, + "labels" : 1, + "origins" : 1 + }, + "missing_agribalyse_match_warning" : 1, + "status" : "unknown" + }, + "ecoscore_grade" : "unknown", + "ecoscore_tags" : [ + "unknown" + ], + "editors_tags" : [ + "test-user" + ], + "entry_dates_tags" : "--ignore--", + "food_groups_tags" : [], + "id" : "3003004006003", + "informers_tags" : [ + "test-user" + ], + "interface_version_created" : "import_csv_file - version 2019/09/17", + "lang" : "fr", + "lang_imported" : "fr", + "languages" : { + "en:french" : 1 + }, + "languages_codes" : { + "fr" : 1 + }, + "languages_hierarchy" : [ + "en:french" + ], + "languages_tags" : [ + "en:french", + "en:1" + ], + "last_edit_dates_tags" : "--ignore--", + "last_editor" : "test-user", + "last_modified_by" : "test-user", + "last_modified_t" : "--ignore--", + "lc" : "fr", + "lc_imported" : "fr", + "main_countries_tags" : [], + "misc_tags" : [ + "en:nutriscore-not-computed", + "en:nutriscore-missing-category", + "en:nutrition-not-enough-data-to-compute-nutrition-score", + "en:nutriscore-missing-nutrition-data", + "en:nutriscore-missing-nutrition-data-energy", + "en:nutriscore-missing-nutrition-data-fat", + "en:nutriscore-missing-nutrition-data-saturated-fat", + "en:nutriscore-missing-nutrition-data-sugars", + "en:nutriscore-missing-nutrition-data-sodium", + "en:nutriscore-missing-nutrition-data-proteins", + "en:nutrition-no-fiber", + "en:packagings-number-of-components-1", + "en:packagings-complete", + "en:packagings-not-empty", + "en:packagings-with-weights", + "en:packagings-with-all-weights", + "en:packagings-with-all-weights-complete", + "en:ecoscore-extended-data-not-computed", + "en:ecoscore-not-computed", + "en:main-countries-new-product" + ], + "nova_group_debug" : "no nova group when the product does not have ingredients", + "nova_group_error" : "missing_ingredients", + "nova_groups_tags" : [ + "unknown" + ], + "nutrient_levels" : {}, + "nutrient_levels_tags" : [], + "nutriments" : {}, + "nutrition_data_per" : "100g", + "nutrition_data_prepared_per" : "100g", + "nutrition_grades_tags" : [ + "unknown" + ], + "nutrition_score_beverage" : 0, + "nutrition_score_debug" : "no score when the product does not have a category - missing energy - missing fat - missing saturated-fat - missing sugars - missing sodium - missing proteins", + "nutrition_score_warning_no_fiber" : 1, + "owner" : "org-test-org", + "owner_fields" : "--ignore--", + "owners_tags" : "org-test-org", + "packaging_materials_tags" : [ + "en:rpet-recycled-polyethylene-terephthalate" + ], + "packaging_recycling_tags" : [], + "packaging_shapes_tags" : [ + "en:bottle" + ], + "packagings" : [ + { + "material" : "en:rpet-recycled-polyethylene-terephthalate", + "quantity_per_unit" : "1l", + "quantity_per_unit_unit" : "l", + "quantity_per_unit_value" : 1, + "shape" : "en:bottle", + "weight_specified" : 42.3 + } + ], + "packagings_complete" : 1, + "packagings_n" : 1, + "photographers_tags" : [], + "pnns_groups_1" : "unknown", + "pnns_groups_1_tags" : [ + "unknown", + "missing-category" + ], + "pnns_groups_2" : "unknown", + "pnns_groups_2_tags" : [ + "unknown", + "missing-category" + ], + "popularity_key" : 0, + "product_name" : "Packagings fr g", + "product_name_fr" : "Packagings fr g", + "product_name_fr_imported" : "Packagings fr g", + "removed_countries_tags" : [], + "rev" : 1, + "sources" : [ + { + "fields" : [ + "product_name_fr", + "countries", + "data_sources" + ], + "id" : null, + "images" : [], + "import_t" : "--ignore--", + "manufacturer" : null, + "name" : null, + "url" : null + } + ], + "states" : "en:to-be-completed, en:nutrition-facts-to-be-completed, en:ingredients-to-be-completed, en:expiration-date-to-be-completed, en:packaging-code-to-be-completed, en:characteristics-to-be-completed, en:origins-to-be-completed, en:categories-to-be-completed, en:brands-to-be-completed, en:packaging-to-be-completed, en:quantity-to-be-completed, en:product-name-completed, en:photos-to-be-uploaded", + "states_hierarchy" : [ + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-to-be-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-completed", + "en:photos-to-be-uploaded" + ], + "states_tags" : [ + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-to-be-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-completed", + "en:photos-to-be-uploaded" + ], + "traces" : "", + "traces_from_ingredients" : "", + "traces_from_user" : "(fr) ", + "traces_hierarchy" : [], + "traces_tags" : [], + "unknown_nutrients_tags" : [], + "weighers_tags" : [] + } + \ No newline at end of file diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006004.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006004.json new file mode 100644 index 0000000000000..bbe098fbde5c6 --- /dev/null +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006004.json @@ -0,0 +1,736 @@ +{ + "_id" : "3003004006004", + "_keywords" : [ + "mustard" + ], + "added_countries_tags" : [], + "allergens" : "en:mustard", + "allergens_from_ingredients" : "", + "allergens_from_user" : "(en) Mustard", + "allergens_hierarchy" : [ + "en:mustard" + ], + "allergens_imported" : "Mustard", + "allergens_lc" : "en", + "allergens_tags" : [ + "en:mustard" + ], + "categories" : "mustards", + "categories_hierarchy" : [ + "en:condiments", + "en:sauces", + "en:mustards" + ], + "categories_imported" : "mustards", + "categories_lc" : "en", + "categories_properties" : { + "agribalyse_food_code:en" : "11013", + "ciqual_food_code:en" : "11013" + }, + "categories_properties_tags" : [ + "all-products", + "categories-known", + "agribalyse-food-code-11013", + "agribalyse-food-code-known", + "agribalyse-proxy-food-code-unknown", + "ciqual-food-code-11013", + "ciqual-food-code-known", + "agribalyse-known", + "agribalyse-11013" + ], + "categories_tags" : [ + "en:condiments", + "en:sauces", + "en:mustards" + ], + "checkers_tags" : [], + "code" : "3003004006004", + "codes_tags" : [ + "code-13", + "3003004006xxx", + "300300400xxxx", + "30030040xxxxx", + "3003004xxxxxx", + "300300xxxxxxx", + "30030xxxxxxxx", + "3003xxxxxxxxx", + "300xxxxxxxxxx", + "30xxxxxxxxxxx", + "3xxxxxxxxxxxx" + ], + "complete" : 0, + "completeness" : 0.1, + "correctors_tags" : [ + "test-user" + ], + "countries" : "en", + "countries_hierarchy" : [ + "en:en" + ], + "countries_imported" : "en", + "countries_lc" : "en", + "countries_tags" : [ + "en:en" + ], + "created_t" : "--ignore--", + "creator" : "test-user", + "data_quality_bugs_tags" : [], + "data_quality_errors_tags" : [], + "data_quality_info_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-known", + "en:food-groups-2-known", + "en:food-groups-3-unknown" + ], + "data_quality_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-known", + "en:food-groups-2-known", + "en:food-groups-3-unknown", + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-packaging-unscored-shape", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_quality_warnings_tags" : [ + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-packaging-unscored-shape", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_sources" : "Producers, Producer - test-org", + "data_sources_imported" : "Producers, Producer - test-org", + "data_sources_tags" : [ + "producers", + "producer-test-org" + ], + "ecoscore_data" : { + "adjustments" : { + "origins_of_ingredients" : { + "aggregated_origins" : [ + { + "origin" : "en:unknown", + "percent" : 100 + } + ], + "epi_score" : 0, + "epi_value" : -5, + "origins_from_origins_field" : [ + "en:unknown" + ], + "transportation_scores" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "transportation_values" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "values" : { + "ad" : -5, + "al" : -5, + "at" : -5, + "ax" : -5, + "ba" : -5, + "be" : -5, + "bg" : -5, + "ch" : -5, + "cy" : -5, + "cz" : -5, + "de" : -5, + "dk" : -5, + "dz" : -5, + "ee" : -5, + "eg" : -5, + "es" : -5, + "fi" : -5, + "fo" : -5, + "fr" : -5, + "gg" : -5, + "gi" : -5, + "gr" : -5, + "hr" : -5, + "hu" : -5, + "ie" : -5, + "il" : -5, + "im" : -5, + "is" : -5, + "it" : -5, + "je" : -5, + "lb" : -5, + "li" : -5, + "lt" : -5, + "lu" : -5, + "lv" : -5, + "ly" : -5, + "ma" : -5, + "mc" : -5, + "md" : -5, + "me" : -5, + "mk" : -5, + "mt" : -5, + "nl" : -5, + "no" : -5, + "pl" : -5, + "ps" : -5, + "pt" : -5, + "ro" : -5, + "rs" : -5, + "se" : -5, + "si" : -5, + "sj" : -5, + "sk" : -5, + "sm" : -5, + "sy" : -5, + "tn" : -5, + "tr" : -5, + "ua" : -5, + "uk" : -5, + "us" : -5, + "va" : -5, + "world" : -5, + "xk" : -5 + }, + "warning" : "origins_are_100_percent_unknown" + }, + "packaging" : { + "non_recyclable_and_non_biodegradable_materials" : 0, + "packagings" : [ + { + "ecoscore_material_score" : 0, + "ecoscore_shape_ratio" : 1, + "material" : "en:pot", + "quantity_per_unit" : "glass", + "shape" : "en:1", + "weight_measured" : 55.2, + "weight_specified" : "15" + } + ], + "score" : 0, + "value" : -10, + "warning" : "unscored_shape" + }, + "production_system" : { + "labels" : [], + "value" : 0, + "warning" : "no_label" + }, + "threatened_species" : { + "warning" : "ingredients_missing" + } + }, + "agribalyse" : { + "agribalyse_food_code" : "11013", + "co2_agriculture" : 0.72818111, + "co2_consumption" : 0, + "co2_distribution" : 0.019530673, + "co2_packaging" : 0.62388551, + "co2_processing" : 0.23539239, + "co2_total" : 1.825040683, + "co2_transportation" : 0.218051, + "code" : "11013", + "dqr" : "2.47", + "ef_agriculture" : 0.18251804, + "ef_consumption" : 0, + "ef_distribution" : 0.0048315303, + "ef_packaging" : 0.066271561, + "ef_processing" : 0.042405794, + "ef_total" : 0.3140816483, + "ef_transportation" : 0.018054723, + "is_beverage" : 0, + "name_en" : "Mustard", + "name_fr" : "Moutarde", + "score" : 74, + "version" : "3.1" + }, + "grade" : "c", + "grades" : { + "ad" : "c", + "al" : "c", + "at" : "c", + "ax" : "c", + "ba" : "c", + "be" : "c", + "bg" : "c", + "ch" : "c", + "cy" : "c", + "cz" : "c", + "de" : "c", + "dk" : "c", + "dz" : "c", + "ee" : "c", + "eg" : "c", + "es" : "c", + "fi" : "c", + "fo" : "c", + "fr" : "c", + "gg" : "c", + "gi" : "c", + "gr" : "c", + "hr" : "c", + "hu" : "c", + "ie" : "c", + "il" : "c", + "im" : "c", + "is" : "c", + "it" : "c", + "je" : "c", + "lb" : "c", + "li" : "c", + "lt" : "c", + "lu" : "c", + "lv" : "c", + "ly" : "c", + "ma" : "c", + "mc" : "c", + "md" : "c", + "me" : "c", + "mk" : "c", + "mt" : "c", + "nl" : "c", + "no" : "c", + "pl" : "c", + "ps" : "c", + "pt" : "c", + "ro" : "c", + "rs" : "c", + "se" : "c", + "si" : "c", + "sj" : "c", + "sk" : "c", + "sm" : "c", + "sy" : "c", + "tn" : "c", + "tr" : "c", + "ua" : "c", + "uk" : "c", + "us" : "c", + "va" : "c", + "world" : "c", + "xk" : "c" + }, + "missing" : { + "ingredients" : 1, + "labels" : 1, + "origins" : 1, + "packagings" : 1 + }, + "missing_data_warning" : 1, + "previous_data" : { + "agribalyse" : { + "agribalyse_food_code" : "11013", + "co2_agriculture" : 0.72818111, + "co2_consumption" : 0, + "co2_distribution" : 0.019530673, + "co2_packaging" : 0.62388551, + "co2_processing" : 0.23539239, + "co2_total" : 1.825040683, + "co2_transportation" : 0.218051, + "code" : "11013", + "dqr" : "2.47", + "ef_agriculture" : 0.18251804, + "ef_consumption" : 0, + "ef_distribution" : 0.0048315303, + "ef_packaging" : 0.066271561, + "ef_processing" : 0.042405794, + "ef_total" : 0.3140816483, + "ef_transportation" : 0.018054723, + "is_beverage" : 0, + "name_en" : "Mustard", + "name_fr" : "Moutarde", + "score" : 74, + "version" : "3.1" + }, + "grade" : "b", + "score" : 67 + }, + "score" : 59, + "scores" : { + "ad" : 59, + "al" : 59, + "at" : 59, + "ax" : 59, + "ba" : 59, + "be" : 59, + "bg" : 59, + "ch" : 59, + "cy" : 59, + "cz" : 59, + "de" : 59, + "dk" : 59, + "dz" : 59, + "ee" : 59, + "eg" : 59, + "es" : 59, + "fi" : 59, + "fo" : 59, + "fr" : 59, + "gg" : 59, + "gi" : 59, + "gr" : 59, + "hr" : 59, + "hu" : 59, + "ie" : 59, + "il" : 59, + "im" : 59, + "is" : 59, + "it" : 59, + "je" : 59, + "lb" : 59, + "li" : 59, + "lt" : 59, + "lu" : 59, + "lv" : 59, + "ly" : 59, + "ma" : 59, + "mc" : 59, + "md" : 59, + "me" : 59, + "mk" : 59, + "mt" : 59, + "nl" : 59, + "no" : 59, + "pl" : 59, + "ps" : 59, + "pt" : 59, + "ro" : 59, + "rs" : 59, + "se" : 59, + "si" : 59, + "sj" : 59, + "sk" : 59, + "sm" : 59, + "sy" : 59, + "tn" : 59, + "tr" : 59, + "ua" : 59, + "uk" : 59, + "us" : 59, + "va" : 59, + "world" : 59, + "xk" : 59 + }, + "status" : "known" + }, + "ecoscore_grade" : "c", + "ecoscore_score" : 59, + "ecoscore_tags" : [ + "c" + ], + "editors_tags" : [ + "test-user" + ], + "entry_dates_tags" : "--ignore--", + "food_groups" : "en:dressings-and-sauces", + "food_groups_tags" : [ + "en:fats-and-sauces", + "en:dressings-and-sauces" + ], + "id" : "3003004006004", + "informers_tags" : [ + "test-user" + ], + "interface_version_created" : "import_csv_file - version 2019/09/17", + "lang" : "en", + "lang_imported" : "en", + "languages" : { + "en:french" : 1 + }, + "languages_codes" : { + "fr" : 1 + }, + "languages_hierarchy" : [ + "en:french" + ], + "languages_tags" : [ + "en:french", + "en:1" + ], + "last_edit_dates_tags" : "--ignore--", + "last_editor" : "test-user", + "last_modified_by" : "test-user", + "last_modified_t" : "--ignore--", + "lc" : "en", + "lc_imported" : "en", + "main_countries_tags" : [], + "misc_tags" : [ + "en:nutriscore-not-computed", + "en:nutrition-not-enough-data-to-compute-nutrition-score", + "en:nutriscore-missing-nutrition-data", + "en:nutriscore-missing-nutrition-data-energy", + "en:nutriscore-missing-nutrition-data-fat", + "en:nutriscore-missing-nutrition-data-saturated-fat", + "en:nutriscore-missing-nutrition-data-sugars", + "en:nutriscore-missing-nutrition-data-sodium", + "en:nutriscore-missing-nutrition-data-proteins", + "en:nutrition-no-fiber", + "en:packagings-number-of-components-1", + "en:packagings-complete", + "en:packagings-not-empty", + "en:packagings-with-weights", + "en:packagings-with-all-weights", + "en:packagings-with-all-weights-complete", + "en:ecoscore-extended-data-not-computed", + "en:ecoscore-missing-data-warning", + "en:ecoscore-missing-data-labels", + "en:ecoscore-missing-data-origins", + "en:ecoscore-missing-data-packagings", + "en:ecoscore-computed", + "en:ecoscore-changed", + "en:ecoscore-grade-changed", + "en:main-countries-new-product" + ], + "nova_group_debug" : "no nova group when the product does not have ingredients", + "nova_group_error" : "missing_ingredients", + "nova_groups_tags" : [ + "unknown" + ], + "nutrient_levels" : {}, + "nutrient_levels_tags" : [], + "nutriments" : {}, + "nutrition_data_per" : "100g", + "nutrition_data_prepared_per" : "100g", + "nutrition_grades_tags" : [ + "unknown" + ], + "nutrition_score_beverage" : 0, + "nutrition_score_debug" : "missing energy - missing fat - missing saturated-fat - missing sugars - missing sodium - missing proteins", + "nutrition_score_warning_no_fiber" : 1, + "owner" : "org-test-org", + "owner_fields" : "--ignore--", + "owners_tags" : "org-test-org", + "packaging_materials_tags" : [ + "en:pot" + ], + "packaging_recycling_tags" : [], + "packaging_shapes_tags" : [ + "en:1" + ], + "packagings" : [ + { + "material" : "en:pot", + "quantity_per_unit" : "glass", + "shape" : "en:1", + "weight_measured" : 55.2, + "weight_specified" : 15 + } + ], + "packagings_complete" : 1, + "packagings_n" : 1, + "photographers_tags" : [], + "pnns_groups_1" : "Fat and sauces", + "pnns_groups_1_tags" : [ + "fat-and-sauces", + "known" + ], + "pnns_groups_2" : "Dressings and sauces", + "pnns_groups_2_tags" : [ + "dressings-and-sauces", + "known" + ], + "popularity_key" : 0, + "product_name_fr" : "Packagings en", + "product_name_fr_imported" : "Packagings en", + "removed_countries_tags" : [], + "rev" : 2, + "sources" : [ + { + "fields" : [ + "product_name_fr", + "categories", + "countries", + "data_sources", + "allergens", + "traces" + ], + "id" : null, + "images" : [], + "import_t" : "--ignore--", + "manufacturer" : null, + "name" : null, + "url" : null + }, + { + "fields" : [ + "allergens" + ], + "id" : null, + "images" : [], + "import_t" : "--ignore--", + "manufacturer" : null, + "name" : null, + "url" : null + } + ], + "states" : "en:to-be-completed, en:nutrition-facts-to-be-completed, en:ingredients-to-be-completed, en:expiration-date-to-be-completed, en:packaging-code-to-be-completed, en:characteristics-to-be-completed, en:origins-to-be-completed, en:categories-completed, en:brands-to-be-completed, en:packaging-to-be-completed, en:quantity-to-be-completed, en:product-name-to-be-completed, en:photos-to-be-uploaded", + "states_hierarchy" : [ + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-to-be-completed", + "en:photos-to-be-uploaded" + ], + "states_tags" : [ + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-to-be-completed", + "en:photos-to-be-uploaded" + ], + "traces" : "en:soybeans", + "traces_from_ingredients" : "", + "traces_from_user" : "(en) en:soybeans", + "traces_hierarchy" : [ + "en:soybeans" + ], + "traces_imported" : "Soybeans", + "traces_lc" : "en", + "traces_tags" : [ + "en:soybeans" + ], + "unknown_nutrients_tags" : [], + "weighers_tags" : [ + "test-user" + ] + } + \ No newline at end of file diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006005.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006005.json new file mode 100644 index 0000000000000..bb1d18fbb9cf0 --- /dev/null +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006005.json @@ -0,0 +1,547 @@ +{ + "_id" : "3003004006005", + "_keywords" : [], + "added_countries_tags" : [], + "allergens" : "en:nuts", + "allergens_from_ingredients" : "", + "allergens_from_user" : "(en) Nuts", + "allergens_hierarchy" : [ + "en:nuts" + ], + "allergens_imported" : "Nuts", + "allergens_lc" : "en", + "allergens_tags" : [ + "en:nuts" + ], + "categories_properties" : {}, + "categories_properties_tags" : [ + "all-products", + "categories-unknown", + "agribalyse-food-code-unknown", + "agribalyse-proxy-food-code-unknown", + "ciqual-food-code-unknown", + "agribalyse-unknown" + ], + "checkers_tags" : [], + "code" : "3003004006005", + "codes_tags" : [ + "code-13", + "3003004006xxx", + "300300400xxxx", + "30030040xxxxx", + "3003004xxxxxx", + "300300xxxxxxx", + "30030xxxxxxxx", + "3003xxxxxxxxx", + "300xxxxxxxxxx", + "30xxxxxxxxxxx", + "3xxxxxxxxxxxx" + ], + "complete" : 0, + "completeness" : 0, + "correctors_tags" : [ + "test-user" + ], + "countries" : "en", + "countries_hierarchy" : [ + "en:en" + ], + "countries_imported" : "en", + "countries_lc" : "en", + "countries_tags" : [ + "en:en" + ], + "created_t" : "--ignore--", + "creator" : "test-user", + "data_quality_bugs_tags" : [], + "data_quality_errors_tags" : [], + "data_quality_info_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-unknown", + "en:food-groups-2-unknown", + "en:food-groups-3-unknown" + ], + "data_quality_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-unknown", + "en:food-groups-2-unknown", + "en:food-groups-3-unknown", + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_quality_warnings_tags" : [ + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_sources" : "Producers, Producer - test-org", + "data_sources_imported" : "Producers, Producer - test-org", + "data_sources_tags" : [ + "producers", + "producer-test-org" + ], + "ecoscore_data" : { + "adjustments" : { + "origins_of_ingredients" : { + "aggregated_origins" : [ + { + "origin" : "en:unknown", + "percent" : 100 + } + ], + "epi_score" : 0, + "epi_value" : -5, + "origins_from_origins_field" : [ + "en:unknown" + ], + "transportation_scores" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "transportation_values" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "values" : { + "ad" : -5, + "al" : -5, + "at" : -5, + "ax" : -5, + "ba" : -5, + "be" : -5, + "bg" : -5, + "ch" : -5, + "cy" : -5, + "cz" : -5, + "de" : -5, + "dk" : -5, + "dz" : -5, + "ee" : -5, + "eg" : -5, + "es" : -5, + "fi" : -5, + "fo" : -5, + "fr" : -5, + "gg" : -5, + "gi" : -5, + "gr" : -5, + "hr" : -5, + "hu" : -5, + "ie" : -5, + "il" : -5, + "im" : -5, + "is" : -5, + "it" : -5, + "je" : -5, + "lb" : -5, + "li" : -5, + "lt" : -5, + "lu" : -5, + "lv" : -5, + "ly" : -5, + "ma" : -5, + "mc" : -5, + "md" : -5, + "me" : -5, + "mk" : -5, + "mt" : -5, + "nl" : -5, + "no" : -5, + "pl" : -5, + "ps" : -5, + "pt" : -5, + "ro" : -5, + "rs" : -5, + "se" : -5, + "si" : -5, + "sj" : -5, + "sk" : -5, + "sm" : -5, + "sy" : -5, + "tn" : -5, + "tr" : -5, + "ua" : -5, + "uk" : -5, + "us" : -5, + "va" : -5, + "world" : -5, + "xk" : -5 + }, + "warning" : "origins_are_100_percent_unknown" + }, + "packaging" : { + "non_recyclable_and_non_biodegradable_materials" : 0, + "packagings" : [ + { + "ecoscore_material_score" : 81, + "ecoscore_shape_ratio" : 1, + "material" : "en:glass", + "number_of_units" : "1", + "quantity_per_unit" : "15ml", + "quantity_per_unit_unit" : "ml", + "quantity_per_unit_value" : "15", + "shape" : "en:pot", + "weight_measured" : 55.32, + "weight_specified" : 55.2 + }, + { + "ecoscore_material_score" : 21, + "ecoscore_shape_ratio" : 0.2, + "material" : "en:pet-1-polyethylene-terephthalate", + "non_recyclable_and_non_biodegradable" : "no", + "number_of_units" : "1", + "shape" : "en:lid", + "weight_specified" : 3.3 + } + ], + "score" : 65.2, + "value" : -3 + }, + "production_system" : { + "labels" : [], + "value" : 0, + "warning" : "no_label" + }, + "threatened_species" : { + "warning" : "ingredients_missing" + } + }, + "agribalyse" : { + "warning" : "missing_agribalyse_match" + }, + "missing" : { + "categories" : 1, + "ingredients" : 1, + "labels" : 1, + "origins" : 1 + }, + "missing_agribalyse_match_warning" : 1, + "status" : "unknown" + }, + "ecoscore_grade" : "unknown", + "ecoscore_tags" : [ + "unknown" + ], + "editors_tags" : [ + "test-user" + ], + "empty" : 1, + "entry_dates_tags" : "--ignore--", + "food_groups_tags" : [], + "id" : "3003004006005", + "informers_tags" : [ + "test-user" + ], + "interface_version_created" : "import_csv_file - version 2019/09/17", + "lang" : "en", + "lang_imported" : "en", + "languages" : { + "en:french" : 1 + }, + "languages_codes" : { + "fr" : 1 + }, + "languages_hierarchy" : [ + "en:french" + ], + "languages_tags" : [ + "en:french", + "en:1" + ], + "last_edit_dates_tags" : "--ignore--", + "last_editor" : "test-user", + "last_modified_by" : "test-user", + "last_modified_t" : "--ignore--", + "lc" : "en", + "lc_imported" : "en", + "main_countries_tags" : [], + "misc_tags" : [ + "en:nutriscore-not-computed", + "en:nutriscore-missing-category", + "en:nutrition-not-enough-data-to-compute-nutrition-score", + "en:nutriscore-missing-nutrition-data", + "en:nutriscore-missing-nutrition-data-energy", + "en:nutriscore-missing-nutrition-data-fat", + "en:nutriscore-missing-nutrition-data-saturated-fat", + "en:nutriscore-missing-nutrition-data-sugars", + "en:nutriscore-missing-nutrition-data-sodium", + "en:nutriscore-missing-nutrition-data-proteins", + "en:nutrition-no-fiber", + "en:packagings-number-of-components-2", + "en:packagings-complete", + "en:packagings-not-empty", + "en:packagings-with-weights", + "en:packagings-with-all-weights", + "en:packagings-with-all-weights-complete", + "en:ecoscore-extended-data-not-computed", + "en:ecoscore-not-computed", + "en:main-countries-new-product" + ], + "nova_group_debug" : "no nova group when the product does not have ingredients", + "nova_group_error" : "missing_ingredients", + "nova_groups_tags" : [ + "unknown" + ], + "nutrient_levels" : {}, + "nutrient_levels_tags" : [], + "nutriments" : {}, + "nutrition_data_per" : "100g", + "nutrition_data_prepared_per" : "100g", + "nutrition_grades_tags" : [ + "unknown" + ], + "nutrition_score_beverage" : 0, + "nutrition_score_debug" : "no score when the product does not have a category - missing energy - missing fat - missing saturated-fat - missing sugars - missing sodium - missing proteins", + "nutrition_score_warning_no_fiber" : 1, + "owner" : "org-test-org", + "owner_fields" : "--ignore--", + "owners_tags" : "org-test-org", + "packaging_materials_tags" : [ + "en:glass", + "en:pet-1-polyethylene-terephthalate" + ], + "packaging_recycling_tags" : [], + "packaging_shapes_tags" : [ + "en:lid", + "en:pot" + ], + "packagings" : [ + { + "material" : "en:glass", + "number_of_units" : 1, + "quantity_per_unit" : "15ml", + "quantity_per_unit_unit" : "ml", + "quantity_per_unit_value" : 15, + "shape" : "en:pot", + "weight_measured" : 55.32, + "weight_specified" : 55.2 + }, + { + "material" : "en:pet-1-polyethylene-terephthalate", + "number_of_units" : 1, + "shape" : "en:lid", + "weight_specified" : 3.3 + } + ], + "packagings_complete" : 1, + "packagings_n" : 2, + "photographers_tags" : [], + "pnns_groups_1" : "unknown", + "pnns_groups_1_tags" : [ + "unknown", + "missing-category" + ], + "pnns_groups_2" : "unknown", + "pnns_groups_2_tags" : [ + "unknown", + "missing-category" + ], + "popularity_key" : 0, + "product_name_fr" : "Packagings en - pot + lid", + "product_name_fr_imported" : "Packagings en - pot + lid", + "removed_countries_tags" : [], + "rev" : 2, + "sources" : [ + { + "fields" : [ + "product_name_fr", + "countries", + "data_sources", + "allergens", + "traces" + ], + "id" : null, + "images" : [], + "import_t" : "--ignore--", + "manufacturer" : null, + "name" : null, + "url" : null + }, + { + "fields" : [ + "allergens", + "traces" + ], + "id" : null, + "images" : [], + "import_t" : "--ignore--", + "manufacturer" : null, + "name" : null, + "url" : null + } + ], + "states" : "en:empty, en:to-be-completed, en:nutrition-facts-to-be-completed, en:ingredients-to-be-completed, en:expiration-date-to-be-completed, en:packaging-code-to-be-completed, en:characteristics-to-be-completed, en:origins-to-be-completed, en:categories-to-be-completed, en:brands-to-be-completed, en:packaging-to-be-completed, en:quantity-to-be-completed, en:product-name-to-be-completed, en:photos-to-be-uploaded", + "states_hierarchy" : [ + "en:empty", + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-to-be-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-to-be-completed", + "en:photos-to-be-uploaded" + ], + "states_tags" : [ + "en:empty", + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-to-be-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-to-be-completed", + "en:photos-to-be-uploaded" + ], + "traces" : "en:celery", + "traces_from_ingredients" : "", + "traces_from_user" : "(en) Celery", + "traces_hierarchy" : [ + "en:celery" + ], + "traces_imported" : "Celery", + "traces_lc" : "en", + "traces_tags" : [ + "en:celery" + ], + "unknown_nutrients_tags" : [], + "weighers_tags" : [ + "test-user" + ] + } + \ No newline at end of file diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006006.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006006.json new file mode 100644 index 0000000000000..0a9c33b829478 --- /dev/null +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006006.json @@ -0,0 +1,531 @@ +{ + "_id" : "3003004006006", + "_keywords" : [], + "added_countries_tags" : [], + "allergens" : "", + "allergens_from_ingredients" : "", + "allergens_from_user" : "(en) ", + "allergens_hierarchy" : [], + "allergens_tags" : [], + "categories_properties" : {}, + "categories_properties_tags" : [ + "all-products", + "categories-unknown", + "agribalyse-food-code-unknown", + "agribalyse-proxy-food-code-unknown", + "ciqual-food-code-unknown", + "agribalyse-unknown" + ], + "checkers_tags" : [], + "code" : "3003004006006", + "codes_tags" : [ + "code-13", + "3003004006xxx", + "300300400xxxx", + "30030040xxxxx", + "3003004xxxxxx", + "300300xxxxxxx", + "30030xxxxxxxx", + "3003xxxxxxxxx", + "300xxxxxxxxxx", + "30xxxxxxxxxxx", + "3xxxxxxxxxxxx" + ], + "complete" : 0, + "completeness" : 0, + "correctors_tags" : [ + "test-user" + ], + "countries" : "en", + "countries_hierarchy" : [ + "en:en" + ], + "countries_imported" : "en", + "countries_lc" : "en", + "countries_tags" : [ + "en:en" + ], + "created_t" : "--ignore--", + "creator" : "test-user", + "data_quality_bugs_tags" : [], + "data_quality_errors_tags" : [], + "data_quality_info_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-unknown", + "en:food-groups-2-unknown", + "en:food-groups-3-unknown" + ], + "data_quality_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-unknown", + "en:food-groups-2-unknown", + "en:food-groups-3-unknown", + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-packaging-unspecified-material", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_quality_warnings_tags" : [ + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-packaging-unspecified-material", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_sources" : "Producers, Producer - test-org", + "data_sources_imported" : "Producers, Producer - test-org", + "data_sources_tags" : [ + "producers", + "producer-test-org" + ], + "ecoscore_data" : { + "adjustments" : { + "origins_of_ingredients" : { + "aggregated_origins" : [ + { + "origin" : "en:unknown", + "percent" : 100 + } + ], + "epi_score" : 0, + "epi_value" : -5, + "origins_from_origins_field" : [ + "en:unknown" + ], + "transportation_scores" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "transportation_values" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "values" : { + "ad" : -5, + "al" : -5, + "at" : -5, + "ax" : -5, + "ba" : -5, + "be" : -5, + "bg" : -5, + "ch" : -5, + "cy" : -5, + "cz" : -5, + "de" : -5, + "dk" : -5, + "dz" : -5, + "ee" : -5, + "eg" : -5, + "es" : -5, + "fi" : -5, + "fo" : -5, + "fr" : -5, + "gg" : -5, + "gi" : -5, + "gr" : -5, + "hr" : -5, + "hu" : -5, + "ie" : -5, + "il" : -5, + "im" : -5, + "is" : -5, + "it" : -5, + "je" : -5, + "lb" : -5, + "li" : -5, + "lt" : -5, + "lu" : -5, + "lv" : -5, + "ly" : -5, + "ma" : -5, + "mc" : -5, + "md" : -5, + "me" : -5, + "mk" : -5, + "mt" : -5, + "nl" : -5, + "no" : -5, + "pl" : -5, + "ps" : -5, + "pt" : -5, + "ro" : -5, + "rs" : -5, + "se" : -5, + "si" : -5, + "sj" : -5, + "sk" : -5, + "sm" : -5, + "sy" : -5, + "tn" : -5, + "tr" : -5, + "ua" : -5, + "uk" : -5, + "us" : -5, + "va" : -5, + "world" : -5, + "xk" : -5 + }, + "warning" : "origins_are_100_percent_unknown" + }, + "packaging" : { + "non_recyclable_and_non_biodegradable_materials" : 0, + "packagings" : [ + { + "ecoscore_material_score" : 81, + "ecoscore_shape_ratio" : 1, + "material" : "en:glass", + "quantity_per_unit" : "15ml", + "quantity_per_unit_unit" : "ml", + "quantity_per_unit_value" : "15", + "shape" : "en:pot" + }, + { + "ecoscore_material_score" : 0, + "ecoscore_shape_ratio" : 0.2, + "material" : "en:unknown", + "number_of_units" : "1", + "shape" : "en:lid", + "weight_specified" : 3.3 + } + ], + "score" : 61, + "value" : -4, + "warning" : "unspecified_material" + }, + "production_system" : { + "labels" : [], + "value" : 0, + "warning" : "no_label" + }, + "threatened_species" : { + "warning" : "ingredients_missing" + } + }, + "agribalyse" : { + "warning" : "missing_agribalyse_match" + }, + "missing" : { + "categories" : 1, + "ingredients" : 1, + "labels" : 1, + "origins" : 1, + "packagings" : 1 + }, + "missing_agribalyse_match_warning" : 1, + "status" : "unknown" + }, + "ecoscore_grade" : "unknown", + "ecoscore_tags" : [ + "unknown" + ], + "editors_tags" : [ + "test-user" + ], + "empty" : 1, + "entry_dates_tags" : "--ignore--", + "food_groups_tags" : [], + "id" : "3003004006006", + "informers_tags" : [ + "test-user" + ], + "interface_version_created" : "import_csv_file - version 2019/09/17", + "lang" : "en", + "lang_imported" : "en", + "languages" : { + "en:french" : 1 + }, + "languages_codes" : { + "fr" : 1 + }, + "languages_hierarchy" : [ + "en:french" + ], + "languages_tags" : [ + "en:french", + "en:1" + ], + "last_edit_dates_tags" : "--ignore--", + "last_editor" : "test-user", + "last_modified_by" : "test-user", + "last_modified_t" : "--ignore--", + "lc" : "en", + "lc_imported" : "en", + "main_countries_tags" : [], + "misc_tags" : [ + "en:nutriscore-not-computed", + "en:nutriscore-missing-category", + "en:nutrition-not-enough-data-to-compute-nutrition-score", + "en:nutriscore-missing-nutrition-data", + "en:nutriscore-missing-nutrition-data-energy", + "en:nutriscore-missing-nutrition-data-fat", + "en:nutriscore-missing-nutrition-data-saturated-fat", + "en:nutriscore-missing-nutrition-data-sugars", + "en:nutriscore-missing-nutrition-data-sodium", + "en:nutriscore-missing-nutrition-data-proteins", + "en:nutrition-no-fiber", + "en:packagings-number-of-components-2", + "en:packagings-complete", + "en:packagings-not-empty", + "en:packagings-with-weights", + "en:packagings-with-some-but-not-all-weights", + "en:ecoscore-extended-data-not-computed", + "en:ecoscore-not-computed", + "en:main-countries-new-product" + ], + "nova_group_debug" : "no nova group when the product does not have ingredients", + "nova_group_error" : "missing_ingredients", + "nova_groups_tags" : [ + "unknown" + ], + "nutrient_levels" : {}, + "nutrient_levels_tags" : [], + "nutriments" : {}, + "nutrition_data_per" : "100g", + "nutrition_data_prepared_per" : "100g", + "nutrition_grades_tags" : [ + "unknown" + ], + "nutrition_score_beverage" : 0, + "nutrition_score_debug" : "no score when the product does not have a category - missing energy - missing fat - missing saturated-fat - missing sugars - missing sodium - missing proteins", + "nutrition_score_warning_no_fiber" : 1, + "owner" : "org-test-org", + "owner_fields" : "--ignore--", + "owners_tags" : "org-test-org", + "packaging_materials_tags" : [ + "en:glass" + ], + "packaging_recycling_tags" : [], + "packaging_shapes_tags" : [ + "en:lid", + "en:pot" + ], + "packagings" : [ + { + "material" : "en:glass", + "quantity_per_unit" : "15ml", + "quantity_per_unit_unit" : "ml", + "quantity_per_unit_value" : 15, + "shape" : "en:pot" + }, + { + "number_of_units" : 1, + "shape" : "en:lid", + "weight_specified" : 3.3 + } + ], + "packagings_complete" : 1, + "packagings_n" : 2, + "photographers_tags" : [], + "pnns_groups_1" : "unknown", + "pnns_groups_1_tags" : [ + "unknown", + "missing-category" + ], + "pnns_groups_2" : "unknown", + "pnns_groups_2_tags" : [ + "unknown", + "missing-category" + ], + "popularity_key" : 0, + "product_name_fr" : "Packagings en - pot + lid – incomplete", + "product_name_fr_imported" : "Packagings en - pot + lid – incomplete", + "removed_countries_tags" : [], + "rev" : 2, + "sources" : [ + { + "fields" : [ + "product_name_fr", + "countries", + "data_sources", + "traces" + ], + "id" : null, + "images" : [], + "import_t" : "--ignore--", + "manufacturer" : null, + "name" : null, + "url" : null + }, + { + "fields" : [ + "traces" + ], + "id" : null, + "images" : [], + "import_t" : "--ignore--", + "manufacturer" : null, + "name" : null, + "url" : null + } + ], + "states" : "en:empty, en:to-be-completed, en:nutrition-facts-to-be-completed, en:ingredients-to-be-completed, en:expiration-date-to-be-completed, en:packaging-code-to-be-completed, en:characteristics-to-be-completed, en:origins-to-be-completed, en:categories-to-be-completed, en:brands-to-be-completed, en:packaging-to-be-completed, en:quantity-to-be-completed, en:product-name-to-be-completed, en:photos-to-be-uploaded", + "states_hierarchy" : [ + "en:empty", + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-to-be-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-to-be-completed", + "en:photos-to-be-uploaded" + ], + "states_tags" : [ + "en:empty", + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-to-be-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-to-be-completed", + "en:photos-to-be-uploaded" + ], + "traces" : "en:lupin", + "traces_from_ingredients" : "", + "traces_from_user" : "(en) Lupin", + "traces_hierarchy" : [ + "en:lupin" + ], + "traces_imported" : "Lupin", + "traces_lc" : "en", + "traces_tags" : [ + "en:lupin" + ], + "unknown_nutrients_tags" : [], + "weighers_tags" : [] + } + \ No newline at end of file diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006007.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006007.json new file mode 100644 index 0000000000000..cc5113e0cda24 --- /dev/null +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/3003004006007.json @@ -0,0 +1,507 @@ +{ + "_id" : "3003004006007", + "_keywords" : [], + "added_countries_tags" : [], + "allergens" : "", + "allergens_from_ingredients" : "", + "allergens_from_user" : "(en) ", + "allergens_hierarchy" : [], + "allergens_tags" : [], + "categories_properties" : {}, + "categories_properties_tags" : [ + "all-products", + "categories-unknown", + "agribalyse-food-code-unknown", + "agribalyse-proxy-food-code-unknown", + "ciqual-food-code-unknown", + "agribalyse-unknown" + ], + "checkers_tags" : [], + "code" : "3003004006007", + "codes_tags" : [ + "code-13", + "3003004006xxx", + "300300400xxxx", + "30030040xxxxx", + "3003004xxxxxx", + "300300xxxxxxx", + "30030xxxxxxxx", + "3003xxxxxxxxx", + "300xxxxxxxxxx", + "30xxxxxxxxxxx", + "3xxxxxxxxxxxx" + ], + "complete" : 0, + "completeness" : 0, + "correctors_tags" : [], + "countries" : "en", + "countries_hierarchy" : [ + "en:en" + ], + "countries_imported" : "en", + "countries_lc" : "en", + "countries_tags" : [ + "en:en" + ], + "created_t" : "--ignore--", + "creator" : "test-user", + "data_quality_bugs_tags" : [], + "data_quality_errors_tags" : [], + "data_quality_info_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-unknown", + "en:food-groups-2-unknown", + "en:food-groups-3-unknown" + ], + "data_quality_tags" : [ + "en:packaging-data-incomplete", + "en:ecoscore-extended-data-not-computed", + "en:food-groups-1-unknown", + "en:food-groups-2-unknown", + "en:food-groups-3-unknown", + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_quality_warnings_tags" : [ + "en:ecoscore-origins-of-ingredients-origins-are-100-percent-unknown", + "en:ecoscore-production-system-no-label", + "en:ecoscore-threatened-species-ingredients-missing" + ], + "data_sources" : "Producers, Producer - test-org", + "data_sources_imported" : "Producers, Producer - test-org", + "data_sources_tags" : [ + "producers", + "producer-test-org" + ], + "ecoscore_data" : { + "adjustments" : { + "origins_of_ingredients" : { + "aggregated_origins" : [ + { + "origin" : "en:unknown", + "percent" : 100 + } + ], + "epi_score" : 0, + "epi_value" : -5, + "origins_from_origins_field" : [ + "en:unknown" + ], + "transportation_scores" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "transportation_values" : { + "ad" : 0, + "al" : 0, + "at" : 0, + "ax" : 0, + "ba" : 0, + "be" : 0, + "bg" : 0, + "ch" : 0, + "cy" : 0, + "cz" : 0, + "de" : 0, + "dk" : 0, + "dz" : 0, + "ee" : 0, + "eg" : 0, + "es" : 0, + "fi" : 0, + "fo" : 0, + "fr" : 0, + "gg" : 0, + "gi" : 0, + "gr" : 0, + "hr" : 0, + "hu" : 0, + "ie" : 0, + "il" : 0, + "im" : 0, + "is" : 0, + "it" : 0, + "je" : 0, + "lb" : 0, + "li" : 0, + "lt" : 0, + "lu" : 0, + "lv" : 0, + "ly" : 0, + "ma" : 0, + "mc" : 0, + "md" : 0, + "me" : 0, + "mk" : 0, + "mt" : 0, + "nl" : 0, + "no" : 0, + "pl" : 0, + "ps" : 0, + "pt" : 0, + "ro" : 0, + "rs" : 0, + "se" : 0, + "si" : 0, + "sj" : 0, + "sk" : 0, + "sm" : 0, + "sy" : 0, + "tn" : 0, + "tr" : 0, + "ua" : 0, + "uk" : 0, + "us" : 0, + "va" : 0, + "world" : 0, + "xk" : 0 + }, + "values" : { + "ad" : -5, + "al" : -5, + "at" : -5, + "ax" : -5, + "ba" : -5, + "be" : -5, + "bg" : -5, + "ch" : -5, + "cy" : -5, + "cz" : -5, + "de" : -5, + "dk" : -5, + "dz" : -5, + "ee" : -5, + "eg" : -5, + "es" : -5, + "fi" : -5, + "fo" : -5, + "fr" : -5, + "gg" : -5, + "gi" : -5, + "gr" : -5, + "hr" : -5, + "hu" : -5, + "ie" : -5, + "il" : -5, + "im" : -5, + "is" : -5, + "it" : -5, + "je" : -5, + "lb" : -5, + "li" : -5, + "lt" : -5, + "lu" : -5, + "lv" : -5, + "ly" : -5, + "ma" : -5, + "mc" : -5, + "md" : -5, + "me" : -5, + "mk" : -5, + "mt" : -5, + "nl" : -5, + "no" : -5, + "pl" : -5, + "ps" : -5, + "pt" : -5, + "ro" : -5, + "rs" : -5, + "se" : -5, + "si" : -5, + "sj" : -5, + "sk" : -5, + "sm" : -5, + "sy" : -5, + "tn" : -5, + "tr" : -5, + "ua" : -5, + "uk" : -5, + "us" : -5, + "va" : -5, + "world" : -5, + "xk" : -5 + }, + "warning" : "origins_are_100_percent_unknown" + }, + "packaging" : { + "non_recyclable_and_non_biodegradable_materials" : 1, + "packagings" : [ + { + "ecoscore_material_score" : 0, + "ecoscore_shape_ratio" : 1, + "material" : "en:plastic", + "non_recyclable_and_non_biodegradable" : "maybe", + "shape" : "en:bottle" + }, + { + "ecoscore_material_score" : 50, + "ecoscore_shape_ratio" : 1, + "material" : "en:pet-1-polyethylene-terephthalate", + "material_shape" : "en:pet-1-polyethylene-terephthalate.en:bottle", + "non_recyclable_and_non_biodegradable" : "no", + "number_of_units" : 1, + "shape" : "en:bottle", + "weight_measured" : 24.5 + } + ], + "score" : -50, + "value" : -15 + }, + "production_system" : { + "labels" : [], + "value" : 0, + "warning" : "no_label" + }, + "threatened_species" : { + "warning" : "ingredients_missing" + } + }, + "agribalyse" : { + "warning" : "missing_agribalyse_match" + }, + "missing" : { + "categories" : 1, + "ingredients" : 1, + "labels" : 1, + "origins" : 1 + }, + "missing_agribalyse_match_warning" : 1, + "status" : "unknown" + }, + "ecoscore_grade" : "unknown", + "ecoscore_tags" : [ + "unknown" + ], + "editors_tags" : [ + "test-user" + ], + "empty" : 1, + "entry_dates_tags" : "--ignore--", + "food_groups_tags" : [], + "id" : "3003004006007", + "informers_tags" : [ + "test-user" + ], + "interface_version_created" : "import_csv_file - version 2019/09/17", + "lang" : "en", + "lang_imported" : "en", + "languages" : { + "en:french" : 1 + }, + "languages_codes" : { + "fr" : 1 + }, + "languages_hierarchy" : [ + "en:french" + ], + "languages_tags" : [ + "en:french", + "en:1" + ], + "last_edit_dates_tags" : "--ignore--", + "last_editor" : "test-user", + "last_modified_by" : "test-user", + "last_modified_t" : "--ignore--", + "lc" : "en", + "lc_imported" : "en", + "main_countries_tags" : [], + "misc_tags" : [ + "en:nutriscore-not-computed", + "en:nutriscore-missing-category", + "en:nutrition-not-enough-data-to-compute-nutrition-score", + "en:nutriscore-missing-nutrition-data", + "en:nutriscore-missing-nutrition-data-energy", + "en:nutriscore-missing-nutrition-data-fat", + "en:nutriscore-missing-nutrition-data-saturated-fat", + "en:nutriscore-missing-nutrition-data-sugars", + "en:nutriscore-missing-nutrition-data-sodium", + "en:nutriscore-missing-nutrition-data-proteins", + "en:nutrition-no-fiber", + "en:packagings-number-of-components-2", + "en:packagings-complete", + "en:packagings-not-empty", + "en:packagings-with-weights", + "en:packagings-with-some-but-not-all-weights", + "en:ecoscore-extended-data-not-computed", + "en:ecoscore-not-computed", + "en:main-countries-new-product" + ], + "nova_group_debug" : "no nova group when the product does not have ingredients", + "nova_group_error" : "missing_ingredients", + "nova_groups_tags" : [ + "unknown" + ], + "nutrient_levels" : {}, + "nutrient_levels_tags" : [], + "nutriments" : {}, + "nutrition_data_per" : "100g", + "nutrition_data_prepared_per" : "100g", + "nutrition_grades_tags" : [ + "unknown" + ], + "nutrition_score_beverage" : 0, + "nutrition_score_debug" : "no score when the product does not have a category - missing energy - missing fat - missing saturated-fat - missing sugars - missing sodium - missing proteins", + "nutrition_score_warning_no_fiber" : 1, + "owner" : "org-test-org", + "owner_fields" : "--ignore--", + "owners_tags" : "org-test-org", + "packaging_materials_tags" : [ + "en:pet-1-polyethylene-terephthalate", + "en:plastic" + ], + "packaging_recycling_tags" : [], + "packaging_shapes_tags" : [ + "en:bottle" + ], + "packagings" : [ + { + "material" : "en:plastic", + "shape" : "en:bottle" + }, + { + "material" : "en:pet-1-polyethylene-terephthalate", + "number_of_units" : 1, + "shape" : "en:bottle", + "weight_measured" : 24.5 + } + ], + "packagings_complete" : 1, + "packagings_n" : 2, + "photographers_tags" : [], + "pnns_groups_1" : "unknown", + "pnns_groups_1_tags" : [ + "unknown", + "missing-category" + ], + "pnns_groups_2" : "unknown", + "pnns_groups_2_tags" : [ + "unknown", + "missing-category" + ], + "popularity_key" : 0, + "product_name_fr" : "Packagings en - several components of the same type", + "product_name_fr_imported" : "Packagings en - several components of the same type", + "removed_countries_tags" : [], + "rev" : 1, + "sources" : [ + { + "fields" : [ + "product_name_fr", + "countries", + "data_sources" + ], + "id" : null, + "images" : [], + "import_t" : "--ignore--", + "manufacturer" : null, + "name" : null, + "url" : null + } + ], + "states" : "en:empty, en:to-be-completed, en:nutrition-facts-to-be-completed, en:ingredients-to-be-completed, en:expiration-date-to-be-completed, en:packaging-code-to-be-completed, en:characteristics-to-be-completed, en:origins-to-be-completed, en:categories-to-be-completed, en:brands-to-be-completed, en:packaging-to-be-completed, en:quantity-to-be-completed, en:product-name-to-be-completed, en:photos-to-be-uploaded", + "states_hierarchy" : [ + "en:empty", + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-to-be-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-to-be-completed", + "en:photos-to-be-uploaded" + ], + "states_tags" : [ + "en:empty", + "en:to-be-completed", + "en:nutrition-facts-to-be-completed", + "en:ingredients-to-be-completed", + "en:expiration-date-to-be-completed", + "en:packaging-code-to-be-completed", + "en:characteristics-to-be-completed", + "en:origins-to-be-completed", + "en:categories-to-be-completed", + "en:brands-to-be-completed", + "en:packaging-to-be-completed", + "en:quantity-to-be-completed", + "en:product-name-to-be-completed", + "en:photos-to-be-uploaded" + ], + "traces" : "", + "traces_from_ingredients" : "", + "traces_from_user" : "(en) ", + "traces_hierarchy" : [], + "traces_tags" : [], + "unknown_nutrients_tags" : [], + "weighers_tags" : [ + "test-user" + ] + } + \ No newline at end of file diff --git a/tests/integration/expected_test_results/import_csv_file/replace_existing_values/stats.json b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/stats.json new file mode 100644 index 0000000000000..495ba3bbbbfa3 --- /dev/null +++ b/tests/integration/expected_test_results/import_csv_file/replace_existing_values/stats.json @@ -0,0 +1,177 @@ +{ + "orgs_created" : {}, + "orgs_existing" : { + "test-org" : 7 + }, + "orgs_in_file" : { + "test-org" : 7 + }, + "orgs_with_gln_but_no_party_name" : {}, + "orgs_without_source_authorization" : {}, + "products_already_existing" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006003" : 1, + "3003004006004" : 1, + "3003004006005" : 1, + "3003004006006" : 1, + "3003004006007" : 1 + }, + "products_created" : {}, + "products_data_not_updated" : { + "3003004006003" : 1, + "3003004006007" : 1 + }, + "products_data_updated" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006004" : 1, + "3003004006005" : 1, + "3003004006006" : 1 + }, + "products_images_added" : {}, + "products_imported_field_allergens_updated" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006004" : 1, + "3003004006005" : 1 + }, + "products_imported_field_traces_updated" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006005" : 1, + "3003004006006" : 1 + }, + "products_in_file" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006003" : 1, + "3003004006004" : 1, + "3003004006005" : 1, + "3003004006006" : 1, + "3003004006007" : 1 + }, + "products_info_added" : {}, + "products_info_changed" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006004" : 1, + "3003004006005" : 1, + "3003004006006" : 1 + }, + "products_info_changed_en:eggs" : {}, + "products_info_changed_en:gluten" : {}, + "products_info_changed_en:lupin" : {}, + "products_info_changed_en:milk" : {}, + "products_info_changed_en:mustard" : {}, + "products_info_changed_en:soybeans" : {}, + "products_info_changed_field_en:eggs" : { + "3003004006001" : 1, + "3003004006006" : 1 + }, + "products_info_changed_field_en:gluten" : { + "3003004006005" : 1 + }, + "products_info_changed_field_en:lupin" : { + "3003004006002" : 1 + }, + "products_info_changed_field_en:milk" : { + "3003004006001" : 1, + "3003004006004" : 1 + }, + "products_info_changed_field_en:mustard" : { + "3003004006002" : 1 + }, + "products_info_changed_field_en:soybeans" : { + "3003004006005" : 1 + }, + "products_info_not_updated" : { + "3003004006003" : 1, + "3003004006007" : 1 + }, + "products_info_updated" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006004" : 1, + "3003004006005" : 1, + "3003004006006" : 1 + }, + "products_nutrition_added" : {}, + "products_nutrition_changed" : {}, + "products_nutrition_data_per_updated" : {}, + "products_nutrition_not_updated" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006003" : 1, + "3003004006004" : 1, + "3003004006005" : 1, + "3003004006006" : 1, + "3003004006007" : 1 + }, + "products_nutrition_updated" : {}, + "products_packagings_changed" : { + "3003004006004" : 1 + }, + "products_packagings_updated" : { + "3003004006004" : 1 + }, + "products_updated" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006004" : 1, + "3003004006005" : 1, + "3003004006006" : 1 + }, + "products_with_data" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006003" : 1, + "3003004006004" : 1, + "3003004006005" : 1, + "3003004006006" : 1, + "3003004006007" : 1 + }, + "products_with_images" : {}, + "products_with_info" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006003" : 1, + "3003004006004" : 1, + "3003004006005" : 1, + "3003004006006" : 1, + "3003004006007" : 1 + }, + "products_with_ingredients" : {}, + "products_with_nutrition" : {}, + "products_with_nutrition_prepared" : {}, + "products_without_data" : {}, + "products_without_images" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006003" : 1, + "3003004006004" : 1, + "3003004006005" : 1, + "3003004006006" : 1, + "3003004006007" : 1 + }, + "products_without_info" : {}, + "products_without_ingredients" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006003" : 1, + "3003004006004" : 1, + "3003004006005" : 1, + "3003004006006" : 1, + "3003004006007" : 1 + }, + "products_without_nutrition" : { + "3003004006001" : 1, + "3003004006002" : 1, + "3003004006003" : 1, + "3003004006004" : 1, + "3003004006005" : 1, + "3003004006006" : 1, + "3003004006007" : 1 + } + } + \ No newline at end of file diff --git a/tests/integration/expected_test_results/import_csv_file/2003004006001.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006001.json similarity index 100% rename from tests/integration/expected_test_results/import_csv_file/2003004006001.json rename to tests/integration/expected_test_results/import_csv_file/test/2003004006001.json diff --git a/tests/integration/expected_test_results/import_csv_file/2003004006002.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006002.json similarity index 100% rename from tests/integration/expected_test_results/import_csv_file/2003004006002.json rename to tests/integration/expected_test_results/import_csv_file/test/2003004006002.json diff --git a/tests/integration/expected_test_results/import_csv_file/2003004006003.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006003.json similarity index 100% rename from tests/integration/expected_test_results/import_csv_file/2003004006003.json rename to tests/integration/expected_test_results/import_csv_file/test/2003004006003.json diff --git a/tests/integration/expected_test_results/import_csv_file/2003004006004.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006004.json similarity index 100% rename from tests/integration/expected_test_results/import_csv_file/2003004006004.json rename to tests/integration/expected_test_results/import_csv_file/test/2003004006004.json diff --git a/tests/integration/expected_test_results/import_csv_file/2003004006005.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006005.json similarity index 100% rename from tests/integration/expected_test_results/import_csv_file/2003004006005.json rename to tests/integration/expected_test_results/import_csv_file/test/2003004006005.json diff --git a/tests/integration/expected_test_results/import_csv_file/2003004006006.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006006.json similarity index 100% rename from tests/integration/expected_test_results/import_csv_file/2003004006006.json rename to tests/integration/expected_test_results/import_csv_file/test/2003004006006.json diff --git a/tests/integration/expected_test_results/import_csv_file/2003004006007.json b/tests/integration/expected_test_results/import_csv_file/test/2003004006007.json similarity index 100% rename from tests/integration/expected_test_results/import_csv_file/2003004006007.json rename to tests/integration/expected_test_results/import_csv_file/test/2003004006007.json diff --git a/tests/integration/expected_test_results/import_csv_file/stats.json b/tests/integration/expected_test_results/import_csv_file/test/stats.json similarity index 100% rename from tests/integration/expected_test_results/import_csv_file/stats.json rename to tests/integration/expected_test_results/import_csv_file/test/stats.json diff --git a/tests/integration/import_csv_file.t b/tests/integration/import_csv_file.t index 39207440b71d7..3e1aa248fda27 100644 --- a/tests/integration/import_csv_file.t +++ b/tests/integration/import_csv_file.t @@ -21,8 +21,9 @@ use ProductOpener::LoadData qw/:all/; load_data(); -my ($test_id, $test_dir, $expected_result_dir, $update_expected_results) = (init_expected_results(__FILE__)); +my ($test_id, $test_dir, $expected_results_dir, $update_expected_results) = (init_expected_results(__FILE__)); my $inputs_dir = "$test_dir/inputs/$test_id/"; +my $outputs_dir = "$test_dir/outputs/$test_id/"; # fake image download using input directory instead of distant server sub fake_download_image ($) { @@ -42,44 +43,65 @@ sub fake_download_image ($) { return $response; } +my @tests = ( + { + test_case => "test", + csv_files => ["test.csv"], + }, + { + test_case => "replace_existing_values", + csv_files => ["replace_existing_values_1.csv", "replace_existing_values_2.csv"], + + } +); + # Testing import of a csv file -{ +foreach my $test_ref (@tests) { + my $import_module = Test::MockModule->new('ProductOpener::Import'); # mock download image to fetch image in inputs_dir $import_module->mock('download_image', \&fake_download_image); - # inputs - my $csv_file = $inputs_dir . "test.csv"; - # clean data remove_all_products(); # import csv can create some organizations if they don't exist, remove them remove_all_orgs(); - # import file - my $datestring = localtime(); - my $args = { - "user_id" => "test-user", - "org_id" => "test-org", - "owner_id" => "org-test-org", - "csv_file" => $csv_file, - "exported_t" => $datestring, - }; - + # expected results + my $test_case = $test_ref->{test_case}; + my $expected_test_results_dir = $expected_results_dir . "/" . $test_case; + my $outputs_test_dir = $outputs_dir . "/" . $test_case; + make_path($outputs_test_dir); my $stats_ref; - # run import_csv_file - print STDERR "Running ProductOpener::Import::import_csv_file and capturing its output\n"; - - # Note: if the code executed by capture_outputs() dies, the test will end without showing why/where it died. - my ($out, $err) = capture_ouputs( - sub { - $stats_ref = ProductOpener::Import::import_csv_file($args); - } - ); - print STDERR "ProductOpener::Import::import_csv_file - done \n"; + # inputs + foreach my $csv (@{$test_ref->{csv_files}}) { + + my $csv_file = $inputs_dir . $csv; + + # import file + my $datestring = localtime(); + my $args = { + "user_id" => "test-user", + "org_id" => "test-org", + "owner_id" => "org-test-org", + "csv_file" => $csv_file, + "exported_t" => $datestring, + }; + + # run import_csv_file + print STDERR "Running ProductOpener::Import::import_csv_file and capturing its output\n"; + + # Note: if the code executed by capture_outputs() dies, the test will end without showing why/where it died. + my ($out, $err) = capture_ouputs( + sub { + $stats_ref = ProductOpener::Import::import_csv_file($args); + } + ); + print STDERR "ProductOpener::Import::import_csv_file - done \n"; + } # get all products in db, sorted by code for predictability my $cursor = execute_query( sub { @@ -95,7 +117,7 @@ sub fake_download_image ($) { normalize_products_for_test_comparison(\@products); # verify result - compare_array_to_expected_results(\@products, $expected_result_dir, $update_expected_results); + compare_array_to_expected_results(\@products, $expected_test_results_dir, $update_expected_results); # also verify sto if (!$update_expected_results) { @@ -104,10 +126,10 @@ sub fake_download_image ($) { push(@sto_products, retrieve_product($product->{code})); } normalize_products_for_test_comparison(\@sto_products); - compare_array_to_expected_results(\@products, $expected_result_dir, $update_expected_results); + compare_array_to_expected_results(\@products, $expected_test_results_dir, $update_expected_results); } - compare_to_expected_results($stats_ref, $expected_result_dir . "/stats.json", $update_expected_results); + compare_to_expected_results($stats_ref, $expected_test_results_dir . "/stats.json", $update_expected_results); # TODO verify images } diff --git a/tests/integration/inputs/import_csv_file/replace_existing_values_1.csv b/tests/integration/inputs/import_csv_file/replace_existing_values_1.csv new file mode 100644 index 0000000000000..b1641326c0de3 --- /dev/null +++ b/tests/integration/inputs/import_csv_file/replace_existing_values_1.csv @@ -0,0 +1,8 @@ +countries lc code product_name_fr categories allergens traces packaging_1_number_of_units packaging_1_shape packaging_1_material packaging_1_quantity_per_unit packaging_1_weight_specified packaging_1_weight_measured packaging_2_number_of_units packaging_2_shape packaging_2_material packaging_2_quantity_per_unit packaging_2_weight_specified packaging_2_weight_measured +fr fr 3003004006001 Packagings fr Gâteaux au chocolat Egg Milk 1 boite carton 200g 42.3 +fr fr 3003004006002 Packagings fr virgule Lupin Mustard 2 boite de conserve acier 42,3 +fr fr 3003004006003 Packagings fr g Nuts bouteille PET recyclé 1l 42.3 g +en en 3003004006004 Packagings en mustards Milk Soybeans 1 pot glass 15ml 55.2 55.32 +en en 3003004006005 Packagings en - pot + lid Soybeans Gluten 1 en:pot glass 15ml 55.2 55.32 1 lid pet 3.3 +en en 3003004006006 Packagings en - pot + lid – incomplete Egg en:pot glass 15ml 1 lid 3.3 +en en 3003004006007 Packagings en - several components of the same type bottle plastic 1 bottle pet 24.5 diff --git a/tests/integration/inputs/import_csv_file/replace_existing_values_2.csv b/tests/integration/inputs/import_csv_file/replace_existing_values_2.csv new file mode 100644 index 0000000000000..1fcf3f109089f --- /dev/null +++ b/tests/integration/inputs/import_csv_file/replace_existing_values_2.csv @@ -0,0 +1,8 @@ +countries lc code product_name_fr categories allergens traces packaging_1_number_of_units packaging_1_shape packaging_1_material packaging_1_quantity_per_unit packaging_1_weight_specified packaging_1_weight_measured packaging_2_number_of_units packaging_2_shape packaging_2_material packaging_2_quantity_per_unit packaging_2_weight_specified packaging_2_weight_measured +fr fr 3003004006001 Packagings fr Gâteaux au chocolat Celery Sesame 1 boite carton 200g 42.3 +fr fr 3003004006002 Packagings fr virgule Molluscs Milk 2 boite de conserve acier 42,3 +fr fr 3003004006003 Packagings fr g Eggs bouteille PET recyclé 1l 42.3 g +en en 3003004006004 Packagings en mustards Mustard 1 pot glass 15ml 55.2 55.32 +en en 3003004006005 Packagings en - pot + lid Nuts Celery 1 en:pot glass 15ml 55.2 55.32 1 lid pet 3.3 +en en 3003004006006 Packagings en - pot + lid – incomplete Lupin en:pot glass 15ml 1 lid 3.3 +en en 3003004006007 Packagings en - several components of the same type bottle plastic 1 bottle pet 24.5