Skip to content

Commit 47167e3

Browse files
sidiabalephillwiggins
authored andcommitted
Implemented whereRelatedTo query (#192)
* Implemented querying for related objects defined based on a field of type Relation * Implemented unit test for relatedTo query
1 parent 7b24830 commit 47167e3

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

lib/src/network/parse_query.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,6 +138,12 @@ class QueryBuilder<T extends ParseObject> {
138138
MapEntry<String, dynamic>(column, value), '\$exists'));
139139
}
140140

141+
/// Retrieves related objets where [String] column is a relation field to the class [String] className
142+
void whereRelatedTo(String column, String className, String objectId) {
143+
queries.add(MapEntry<String, dynamic>(_SINGLE_QUERY,
144+
'\"\$relatedTo\":{\"object\":{\"__type\":\"Pointer\",\"className\":\"$className\",\"objectId\":\"$objectId\"},\"key\":\"$column\"}'));
145+
}
146+
141147
/// Returns an object where the [String] column contains select
142148
void selectKeys(String column, dynamic value) {
143149
queries.add(_buildQueryWithColumnValueAndOperator(

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,5 +29,6 @@ dependencies:
2929
dev_dependencies:
3030
# Testing
3131
test: ^1.5.1
32+
mockito: ^4.1.0
3233
flutter_test:
3334
sdk: flutter

test/parse_query_test.dart

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
import 'package:mockito/mockito.dart';
2+
import 'package:parse_server_sdk/parse_server_sdk.dart';
3+
import 'package:test/test.dart';
4+
5+
class MockClient extends Mock implements ParseHTTPClient {}
6+
7+
void main() {
8+
group("queryBuilder", () {
9+
test('whereRelatedTo', () async {
10+
final client = MockClient();
11+
12+
Parse().initialize('appId', 'https://test.parse.com', debug: true);
13+
14+
var queryBuilder =
15+
QueryBuilder<ParseObject>(ParseObject('_User', client: client));
16+
queryBuilder.whereRelatedTo('likes', 'Post', '8TOXdXf3tz');
17+
18+
when(client.data).thenReturn(ParseCoreData());
19+
await queryBuilder.query();
20+
21+
Uri result = (verify(client.get(captureAny)).captured.single as Uri);
22+
23+
expect(result.path, "/classes/_User");
24+
25+
Uri expectedQuery = Uri(
26+
query:
27+
'where={"\$relatedTo":{"object":{"__type":"Pointer","className":"Post","objectId":"8TOXdXf3tz"},"key":"likes"}}');
28+
expect(result.query, expectedQuery.query);
29+
});
30+
});
31+
}

0 commit comments

Comments
 (0)