diff --git a/lib/src/network/parse_query.dart b/lib/src/network/parse_query.dart index f56bb47ea..749527e96 100644 --- a/lib/src/network/parse_query.dart +++ b/lib/src/network/parse_query.dart @@ -138,6 +138,12 @@ class QueryBuilder { MapEntry(column, value), '\$exists')); } + /// Retrieves related objets where [String] column is a relation field to the class [String] className + void whereRelatedTo(String column, String className, String objectId) { + queries.add(MapEntry(_SINGLE_QUERY, + '\"\$relatedTo\":{\"object\":{\"__type\":\"Pointer\",\"className\":\"$className\",\"objectId\":\"$objectId\"},\"key\":\"$column\"}')); + } + /// Returns an object where the [String] column contains select void selectKeys(String column, dynamic value) { queries.add(_buildQueryWithColumnValueAndOperator( diff --git a/pubspec.yaml b/pubspec.yaml index 844f42d2a..e8412f486 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -29,5 +29,6 @@ dependencies: dev_dependencies: # Testing test: ^1.5.1 + mockito: ^4.1.0 flutter_test: sdk: flutter diff --git a/test/parse_query_test.dart b/test/parse_query_test.dart new file mode 100644 index 000000000..81be4ac27 --- /dev/null +++ b/test/parse_query_test.dart @@ -0,0 +1,31 @@ +import 'package:mockito/mockito.dart'; +import 'package:parse_server_sdk/parse_server_sdk.dart'; +import 'package:test/test.dart'; + +class MockClient extends Mock implements ParseHTTPClient {} + +void main() { + group("queryBuilder", () { + test('whereRelatedTo', () async { + final client = MockClient(); + + Parse().initialize('appId', 'https://test.parse.com', debug: true); + + var queryBuilder = + QueryBuilder(ParseObject('_User', client: client)); + queryBuilder.whereRelatedTo('likes', 'Post', '8TOXdXf3tz'); + + when(client.data).thenReturn(ParseCoreData()); + await queryBuilder.query(); + + Uri result = (verify(client.get(captureAny)).captured.single as Uri); + + expect(result.path, "/classes/_User"); + + Uri expectedQuery = Uri( + query: + 'where={"\$relatedTo":{"object":{"__type":"Pointer","className":"Post","objectId":"8TOXdXf3tz"},"key":"likes"}}'); + expect(result.query, expectedQuery.query); + }); + }); +}