diff --git a/lib/src/utils/product_fields.dart b/lib/src/utils/product_fields.dart index 03b35dd9b2..a2e4b53aae 100644 --- a/lib/src/utils/product_fields.dart +++ b/lib/src/utils/product_fields.dart @@ -4,6 +4,7 @@ import '../model/off_tagged.dart'; /// Fields of a [Product] enum ProductField implements OffTagged { BARCODE(offTag: 'code'), + PRODUCT_TYPE(offTag: 'product_type'), NAME( offTag: 'product_name', inLanguagesProductField: ProductField.NAME_IN_LANGUAGES, diff --git a/test/api_not_food_get_product_test.dart b/test/api_not_food_get_product_test.dart index 41a44db4e5..c4bd916a56 100644 --- a/test/api_not_food_get_product_test.dart +++ b/test/api_not_food_get_product_test.dart @@ -7,74 +7,67 @@ void main() { OpenFoodAPIConfiguration.userAgent = TestConstants.TEST_USER_AGENT; OpenFoodAPIConfiguration.globalUser = TestConstants.PROD_USER; - const UriProductHelper uriHelperBeautyProd = UriProductHelper( - domain: 'openbeautyfacts.org', - ); - const UriProductHelper uriHelperProductsProd = UriProductHelper( - domain: 'openproductsfacts.org', - ); - const UriProductHelper uriHelperPetFoodProd = UriProductHelper( - domain: 'openpetfoodfacts.org', - ); + const Map domains = { + ProductType.beauty: 'openbeautyfacts.org', + ProductType.product: 'openproductsfacts.org', + ProductType.petFood: 'openpetfoodfacts.org', + ProductType.food: 'openfoodfacts.org', + }; - const String beautyBarcode = '3600551054476'; - const String productsBarcode = '7898927451035'; - const String petFoodBarcode = '3564700266809'; + const Map barcodes = { + ProductType.beauty: '3600551054476', + ProductType.product: '7898927451035', + ProductType.petFood: '3564700266809', + }; group('$OpenFoodAPIClient get not food products', () { - Future findProduct( + Future findProduct( final String barcode, - final UriProductHelper uriHelper, - final bool shouldBeThere, + final ProductType expectedProductType, + final ProductType serverProductType, ) async { final ProductQueryConfiguration configurations = ProductQueryConfiguration( barcode, language: OpenFoodFactsLanguage.ENGLISH, - fields: [ProductField.BARCODE], + fields: [ + ProductField.BARCODE, + ProductField.PRODUCT_TYPE, + ], version: ProductQueryVersion(2), ); await getProductTooManyRequestsManager.waitIfNeeded(); final OldProductResult result = await OpenFoodAPIClient.getOldProduct( configurations, - uriHelper: uriHelper, + uriHelper: UriProductHelper( + domain: domains[serverProductType]!, + ), ); - if (shouldBeThere) { + if (expectedProductType == serverProductType) { expect(result.status, 1); expect(result.barcode, barcode); expect(result.product, isNotNull); expect(result.product!.barcode, barcode); + expect(result.product!.productType, expectedProductType); } else { expect(result.status, 0); expect(result.barcode, barcode); expect(result.product, isNull); } - return result.product; } - test('get beauty product', () async { - final String barcode = beautyBarcode; - await findProduct(barcode, uriHelperBeautyProd, true); - await findProduct(barcode, uriHelperProductsProd, false); - await findProduct(barcode, uriHelperPetFoodProd, false); - await findProduct(barcode, uriHelperPetFoodProd, false); - await findProduct(barcode, uriHelperFoodProd, false); - }); - - test('get products product', () async { - final String barcode = productsBarcode; - await findProduct(barcode, uriHelperBeautyProd, false); - await findProduct(barcode, uriHelperProductsProd, true); - await findProduct(barcode, uriHelperPetFoodProd, false); - await findProduct(barcode, uriHelperFoodProd, false); - }); - - test('get pet food product', () async { - final String barcode = petFoodBarcode; - await findProduct(barcode, uriHelperBeautyProd, false); - await findProduct(barcode, uriHelperProductsProd, false); - await findProduct(barcode, uriHelperPetFoodProd, true); - await findProduct(barcode, uriHelperFoodProd, false); + test('get OxF product', () async { + for (MapEntry item in barcodes.entries) { + final ProductType productType = item.key; + final String barcode = item.value; + for (final ProductType serverProductType in ProductType.values) { + await findProduct( + barcode, + productType, + serverProductType, + ); + } + } }); }, timeout: Timeout(