Skip to content

fix: Query conditions inQuery and notInQuery not working properly #869

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 10 commits into from
May 17, 2023
6 changes: 6 additions & 0 deletions packages/dart/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,9 @@
## [5.1.1](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-5.1.0...dart-5.1.1) (2023-05-17)

### Bug Fixes

* Query conditions `inQuery` and `notInQuery` not working properly ([#869](https://github.com/parse-community/Parse-SDK-Flutter/pull/869))

## [5.1.0](https://github.com/parse-community/Parse-SDK-Flutter/compare/dart-5.0.0...dart-5.1.0) (2023-05-14)

### Features
Expand Down
2 changes: 1 addition & 1 deletion packages/dart/lib/src/base/parse_constants.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
part of flutter_parse_sdk;

// Library
const String keySdkVersion = '5.1.0';
const String keySdkVersion = '5.1.1';
const String keyLibraryName = 'Flutter Parse SDK';

// End Points
Expand Down
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
2 changes: 1 addition & 1 deletion packages/dart/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: parse_server_sdk
description: The Dart SDK to connect to Parse Server. Build your apps faster with Parse Platform, the complete application stack.
version: 5.1.0
version: 5.1.1
homepage: https://github.com/parse-community/Parse-SDK-Flutter

environment:
Expand Down
60 changes: 59 additions & 1 deletion packages/dart/test/src/network/parse_query_test.dart
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
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 +406,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);
});
});
}