Skip to content

Commit 7fb7ce6

Browse files
authored
fix: Custom JSON encoder for List and Map doesn't work correctly in full mode (#789)
1 parent 14be107 commit 7fb7ce6

File tree

4 files changed

+59
-3
lines changed

4 files changed

+59
-3
lines changed

packages/dart/CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## [3.1.3](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.2...dart-3.1.3) (2022-11-15)
2+
3+
### Bug Fixes
4+
5+
* 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))
6+
17
## [3.1.2](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-3.1.1...dart-3.1.2) (2022-07-09)
28

39
### Bug Fixes

packages/dart/lib/src/utils/parse_encoder.dart

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ dynamic parseEncode(dynamic value, {bool full = false}) {
2020

2121
if (value is List) {
2222
return value.map<dynamic>((dynamic value) {
23-
return parseEncode(value);
23+
return parseEncode(value, full: full);
2424
}).toList();
2525
}
2626

2727
if (value is Map) {
2828
value.forEach((dynamic k, dynamic v) {
29-
value[k] = parseEncode(v);
29+
value[k] = parseEncode(v, full: full);
3030
});
3131
}
3232

packages/dart/pubspec.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: parse_server_sdk
22
description: Dart plugin for Parse Server, (https://parseplatform.org), (https://back4app.com)
3-
version: 3.1.2
3+
version: 3.1.3
44
homepage: https://github.com/parse-community/Parse-SDK-Flutter
55

66
environment:
+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
import 'package:parse_server_sdk/parse_server_sdk.dart';
2+
import 'package:test/test.dart';
3+
4+
void main() {
5+
test(
6+
'should return expectedResult json when json has Nested map and list data.',
7+
() async {
8+
// arrange
9+
await Parse().initialize(
10+
'appId',
11+
'https://test.parse.com',
12+
debug: true,
13+
// to prevent automatic detection
14+
fileDirectory: 'someDirectory',
15+
// to prevent automatic detection
16+
appName: 'appName',
17+
// to prevent automatic detection
18+
appPackageName: 'somePackageName',
19+
// to prevent automatic detection
20+
appVersion: 'someAppVersion',
21+
);
22+
23+
ParseObject parseObject2 = ParseObject("objectId2");
24+
parseObject2.objectId = "objectId2";
25+
26+
// List and Map
27+
parseObject2
28+
.setAdd("dataParseObjectList", ["ListText1", "ListText2", "ListText3"]);
29+
parseObject2.setAdd("dataParseObjectMap", {
30+
'KeyTestMap1': 'ValueTestMap1',
31+
'KeyTestMap2': 'ValueTestMap2',
32+
'KeyTestMap3': 'ValueTestMap3',
33+
});
34+
35+
// parseObject2 inside parseObject1
36+
ParseObject parseObject1 = ParseObject("parseObject1");
37+
parseObject1.objectId = "objectId1";
38+
parseObject1.setAdd("dataParseObject2", parseObject2);
39+
40+
// desired output
41+
String expectedResult =
42+
"{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}]}}]}}";
43+
44+
// act
45+
dynamic actualResult = parseEncode(parseObject1, full: true);
46+
47+
//assert
48+
expect(actualResult.toString(), expectedResult);
49+
});
50+
}

0 commit comments

Comments
 (0)