Skip to content
2 changes: 1 addition & 1 deletion packages/dart/lib/src/network/parse_query.dart
Original file line number Diff line number Diff line change
Expand Up @@ -420,7 +420,7 @@ class QueryBuilder<T extends ParseObject> {
/// Builds the query relational for Parse
String _buildQueryRelational(String className) {
queries = _checkForMultipleColumnInstances(queries);
return '{"where":{${buildQueries(queries)}},"className":"$className"${getLimitersRelational(limiters)}}';
return '{"where":{${buildQueries(queries)}},"className":"$className",${getLimitersRelational(limiters)}}';
}

/// Builds the query relational with Key for Parse
Expand Down
61 changes: 59 additions & 2 deletions packages/dart/test/src/network/parse_query_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
import 'dart:convert';

import 'package:mockito/annotations.dart';
import 'package:mockito/mockito.dart';
import 'package:parse_server_sdk/parse_server_sdk.dart';
Expand Down Expand Up @@ -407,5 +405,64 @@ void main() {

expect(query, equals('where={}&redirectClassNameForKey=Plan'));
});

test('whereMatchesQuery', () async {
// arrange
ParseObject object2 = ParseObject("object2");
final query2 = QueryBuilder<ParseObject>(object2)
..includeObject(["avatar"])
..whereEqualTo("firstName", "Oliver1");

ParseObject object1 = ParseObject("object1");
final query1 = QueryBuilder<ParseObject>(object1)
..includeObject(["user"])
..whereEqualTo("id", "1122")
..whereMatchesQuery("object2", query2);

ParseObject objectMain = ParseObject("objectMain", client: client);
final mainQuery = QueryBuilder<ParseObject>(objectMain)
..includeObject(["img"])
..whereMatchesQuery("object1", query1);

var desiredOutput = {
"results": [
{
"className": "_User",
"objectId": "fqx5BECOME",
"createdAt": "2022-10-25T06:04:47.138Z",
"updatedAt": "2022-10-25T06:05:22.328Z",
"firstName": "Oliver1",
"lastName": "Smith1",
},
{
"className": "_User",
"objectId": "hAtRRYGrUO",
"createdAt": "2022-01-24T15:53:48.396Z",
"updatedAt": "2022-01-25T05:52:01.701Z",
"firstName": "Oliver2",
"lastName": "Smith2",
},
]
};

when(client.get(
any,
options: anyNamed("options"),
onReceiveProgress: anyNamed("onReceiveProgress"),
)).thenAnswer((_) async => ParseNetworkResponse(
statusCode: 200, data: jsonEncode(desiredOutput)));

// act
await mainQuery.query();

final Uri result = Uri.parse(verify(client.get(
captureAny,
options: anyNamed("options"),
onReceiveProgress: anyNamed("onReceiveProgress"),
)).captured.single);

// assert
expect(result.query.contains("%22object2%22,%22include%22"), true);
});
});
}