From 7fb7ce67d5bea30d583f4b182303ee6a31214185 Mon Sep 17 00:00:00 2001 From: Mohammad Bagher Fakouri Date: Tue, 15 Nov 2022 17:37:45 +0330 Subject: [PATCH] fix: Custom JSON encoder for List and Map doesn't work correctly in `full` mode (#789) --- packages/dart/CHANGELOG.md | 6 +++ .../dart/lib/src/utils/parse_encoder.dart | 4 +- packages/dart/pubspec.yaml | 2 +- packages/dart/test/parse_encoder_test.dart | 50 +++++++++++++++++++ 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 packages/dart/test/parse_encoder_test.dart diff --git a/packages/dart/CHANGELOG.md b/packages/dart/CHANGELOG.md index f015db8e6..05d774178 100644 --- a/packages/dart/CHANGELOG.md +++ b/packages/dart/CHANGELOG.md @@ -1,3 +1,9 @@ +## [3.1.3](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.2...dart-3.1.3) (2022-11-15) + +### Bug Fixes + +* Custom JSON encoder for List and Map doesn't work correctly in `full` mode ([#788](https://github.com/parse-community/Parse-SDK-Flutter/issues/788)) + ## [3.1.2](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.1...dart-3.1.2) (2022-07-09) ### Bug Fixes diff --git a/packages/dart/lib/src/utils/parse_encoder.dart b/packages/dart/lib/src/utils/parse_encoder.dart index 66ff7d558..e8b2080f5 100644 --- a/packages/dart/lib/src/utils/parse_encoder.dart +++ b/packages/dart/lib/src/utils/parse_encoder.dart @@ -20,13 +20,13 @@ dynamic parseEncode(dynamic value, {bool full = false}) { if (value is List) { return value.map((dynamic value) { - return parseEncode(value); + return parseEncode(value, full: full); }).toList(); } if (value is Map) { value.forEach((dynamic k, dynamic v) { - value[k] = parseEncode(v); + value[k] = parseEncode(v, full: full); }); } diff --git a/packages/dart/pubspec.yaml b/packages/dart/pubspec.yaml index 4eaaf6925..d99f163b1 100644 --- a/packages/dart/pubspec.yaml +++ b/packages/dart/pubspec.yaml @@ -1,6 +1,6 @@ name: parse_server_sdk description: Dart plugin for Parse Server, (https://parseplatform.org), (https://back4app.com) -version: 3.1.2 +version: 3.1.3 homepage: https://github.com/parse-community/Parse-SDK-Flutter environment: diff --git a/packages/dart/test/parse_encoder_test.dart b/packages/dart/test/parse_encoder_test.dart new file mode 100644 index 000000000..97157520c --- /dev/null +++ b/packages/dart/test/parse_encoder_test.dart @@ -0,0 +1,50 @@ +import 'package:parse_server_sdk/parse_server_sdk.dart'; +import 'package:test/test.dart'; + +void main() { + test( + 'should return expectedResult json when json has Nested map and list data.', + () async { + // arrange + await Parse().initialize( + 'appId', + 'https://test.parse.com', + debug: true, + // to prevent automatic detection + fileDirectory: 'someDirectory', + // to prevent automatic detection + appName: 'appName', + // to prevent automatic detection + appPackageName: 'somePackageName', + // to prevent automatic detection + appVersion: 'someAppVersion', + ); + + ParseObject parseObject2 = ParseObject("objectId2"); + parseObject2.objectId = "objectId2"; + + // List and Map + parseObject2 + .setAdd("dataParseObjectList", ["ListText1", "ListText2", "ListText3"]); + parseObject2.setAdd("dataParseObjectMap", { + 'KeyTestMap1': 'ValueTestMap1', + 'KeyTestMap2': 'ValueTestMap2', + 'KeyTestMap3': 'ValueTestMap3', + }); + + // parseObject2 inside parseObject1 + ParseObject parseObject1 = ParseObject("parseObject1"); + parseObject1.objectId = "objectId1"; + parseObject1.setAdd("dataParseObject2", parseObject2); + + // desired output + String expectedResult = + "{className: parseObject1, objectId: objectId1, dataParseObject2: {__op: Add, objects: [{className: objectId2, objectId: objectId2, dataParseObjectList: {__op: Add, objects: [[ListText1, ListText2, ListText3]]}, dataParseObjectMap: {__op: Add, objects: [{KeyTestMap1: ValueTestMap1, KeyTestMap2: ValueTestMap2, KeyTestMap3: ValueTestMap3}]}}]}}"; + + // act + dynamic actualResult = parseEncode(parseObject1, full: true); + + //assert + expect(actualResult.toString(), expectedResult); + }); +}