Skip to content

Commit

Permalink
feat: added product fields 'data_quality_{*_}tags' (openfoodfacts#1033)
Browse files Browse the repository at this point in the history
* Data quality tags

* Remove unnecessary comment

* Remove data quality attrs from the `Product` constructor
  • Loading branch information
g123k authored Feb 7, 2025
1 parent 95fd660 commit 8d12daf
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 5 deletions.
23 changes: 19 additions & 4 deletions lib/src/model/product.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
import 'package:json_annotation/json_annotation.dart';

import '../interface/json_object.dart';
import '../utils/json_helper.dart';
import '../utils/language_helper.dart';
import '../utils/product_fields.dart';
import 'additives.dart';
import 'allergens.dart';
import 'attribute.dart';
Expand All @@ -14,10 +18,6 @@ import 'owner_field.dart';
import 'product_image.dart';
import 'product_packaging.dart';
import 'product_type.dart';
import '../interface/json_object.dart';
import '../utils/json_helper.dart';
import '../utils/language_helper.dart';
import '../utils/product_fields.dart';

part 'product.g.dart';

Expand Down Expand Up @@ -576,6 +576,21 @@ class Product extends JsonObject {
@JsonKey(name: 'link')
String? website;

@JsonKey(name: 'data_quality_tags')
List<String>? dataQualityTags;

@JsonKey(name: 'data_quality_bugs_tags')
List<String>? dataQualityBugsTags;

@JsonKey(name: 'data_quality_errors_tags')
List<String>? dataQualityErrorsTags;

@JsonKey(name: 'data_quality_info_tags')
List<String>? dataQualityInfoTags;

@JsonKey(name: 'data_quality_warnings_tags')
List<String>? dataQualityWarningsTags;

/// Is the product obsolete?
@JsonKey(
toJson: JsonHelper.checkboxToJSON,
Expand Down
22 changes: 22 additions & 0 deletions lib/src/model/product.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 6 additions & 1 deletion lib/src/utils/product_fields.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import 'language_helper.dart';
import '../model/off_tagged.dart';
import 'language_helper.dart';

/// Fields of a [Product]
enum ProductField implements OffTagged {
Expand Down Expand Up @@ -228,6 +228,11 @@ enum ProductField implements OffTagged {
OBSOLETE(offTag: 'obsolete'),
OWNER_FIELDS(offTag: 'owner_fields'),
OWNER(offTag: 'owner'),
DATA_QUALITY_TAGS(offTag: 'data_quality_tags'),
DATA_QUALITY_BUGS_TAGS(offTag: 'data_quality_bugs_tags'),
DATA_QUALITY_ERRORS_TAGS(offTag: 'data_quality_errors_tags'),
DATA_QUALITY_INFO_TAGS(offTag: 'data_quality_info_tags'),
DATA_QUALITY_WARNINGS_TAGS(offTag: 'data_quality_warnings_tags'),

/// All data as RAW from the server. E.g. packagings are only Strings there.
RAW(offTag: 'raw'),
Expand Down
63 changes: 63 additions & 0 deletions test/api_get_product_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1367,4 +1367,67 @@ void main() {
checkProduct(productResult.product!);
});
});

group('$OpenFoodAPIClient get data quality tags', () {
const String barcode = '3661344723290';
const OpenFoodFactsLanguage language = OpenFoodFactsLanguage.FRENCH;
const OpenFoodFactsCountry country = OpenFoodFactsCountry.FRANCE;
const ProductQueryVersion version = ProductQueryVersion.v3;

test('Without specifying fields', () async {
final ProductResultV3 productResult = await getProductV3InProd(
ProductQueryConfiguration(
barcode,
language: language,
country: country,
version: version,
),
);
expect(productResult.product!.dataQualityTags, isNotNull);
expect(productResult.product!.dataQualityBugsTags, isNotNull);
expect(productResult.product!.dataQualityErrorsTags, isNotNull);
expect(productResult.product!.dataQualityInfoTags, isNotNull);
expect(productResult.product!.dataQualityWarningsTags, isNotNull);
});

test('Without ALL fields', () async {
final ProductResultV3 productResult = await getProductV3InProd(
ProductQueryConfiguration(
barcode,
fields: [
ProductField.DATA_QUALITY_TAGS,
ProductField.DATA_QUALITY_BUGS_TAGS,
ProductField.DATA_QUALITY_ERRORS_TAGS,
ProductField.DATA_QUALITY_INFO_TAGS,
ProductField.DATA_QUALITY_WARNINGS_TAGS,
],
language: language,
country: country,
version: version,
),
);
expect(productResult.product!.dataQualityTags, isNotNull);
expect(productResult.product!.dataQualityBugsTags, isNotNull);
expect(productResult.product!.dataQualityErrorsTags, isNotNull);
expect(productResult.product!.dataQualityInfoTags, isNotNull);
expect(productResult.product!.dataQualityWarningsTags, isNotNull);
});

test('With only data quality tags', () async {
final ProductResultV3 productResult = await getProductV3InProd(
ProductQueryConfiguration(
barcode,
fields: [ProductField.DATA_QUALITY_TAGS],
language: language,
country: country,
version: version,
),
);
expect(productResult.product!.dataQualityTags, isNotNull);
expect(productResult.product!.dataQualityBugsTags, isNull);
expect(productResult.product!.dataQualityErrorsTags, isNull);
expect(productResult.product!.dataQualityInfoTags, isNull);
expect(productResult.product!.dataQualityWarningsTags, isNull);
});
});
}

0 comments on commit 8d12daf

Please sign in to comment.