@@ -62,5 +62,193 @@ void main() {
6262 'where={"\$ relatedTo":{"object":{"__type":"Pointer","className":"Post","objectId":"8TOXdXf3tz"},"key":"likes"}}' );
6363 expect (result.query, expectedQuery.query);
6464 });
65+
66+ test ('QueryBuilder.or' , () async {
67+ final MockParseClient client = MockParseClient ();
68+
69+ await Parse ().initialize (
70+ 'appId' ,
71+ 'https://test.parse.com' ,
72+ debug: true ,
73+ // to prevent automatic detection
74+ fileDirectory: 'someDirectory' ,
75+ // to prevent automatic detection
76+ appName: 'appName' ,
77+ // to prevent automatic detection
78+ appPackageName: 'somePackageName' ,
79+ // to prevent automatic detection
80+ appVersion: 'someAppVersion' ,
81+ );
82+
83+ ParseObject user = ParseObject ("_User" , client: client);
84+ var firstName = QueryBuilder <ParseObject >(user)
85+ ..regEx ('firstName' , "Liam" );
86+
87+ var lastName = QueryBuilder <ParseObject >(user)
88+ ..regEx ('lastName' , "Johnson" );
89+
90+ QueryBuilder <ParseObject > mainQuery = QueryBuilder .or (
91+ user,
92+ [firstName, lastName],
93+ );
94+
95+ when (client.get (
96+ any,
97+ options: anyNamed ("options" ),
98+ onReceiveProgress: anyNamed ("onReceiveProgress" ),
99+ )).thenAnswer ((_) async => ParseNetworkResponse (
100+ statusCode: 200 ,
101+ data:
102+ "{\" results\" : [{\" className\" : \" _User\" ,\" objectId\" : \" fqx5BECOME\" ,\" createdAt\" : \" 2022-10-25T06:04:47.138Z\" ,\" updatedAt\" : \" 2022-10-25T06:05:22.328Z\" ,\" firstName\" : \" Liam1\" ,\" lastName\" : \" Johnson1\" },{\" className\" : \" _User\" ,\" objectId\" : \" hAtRRYGrUO\" ,\" createdAt\" : \" 2022-01-24T15:53:48.396Z\" ,\" updatedAt\" : \" 2022-01-25T05:52:01.701Z\" ,\" firstName\" : \" Liam2\" ,\" lastName\" : \" Johnson2\" }]}" ));
103+
104+ var response = await mainQuery.query ();
105+
106+ expect (response.results? .first, isA <ParseObject >());
107+
108+ ParseObject parseObject = response.results? .first;
109+
110+ expect (parseObject.get <String >("firstName" ), "Liam1" );
111+ expect (parseObject.objectId, "fqx5BECOME" );
112+ expect (parseObject.createdAt, DateTime .parse ("2022-10-25T06:04:47.138Z" ));
113+ expect (parseObject.updatedAt, DateTime .parse ("2022-10-25T06:05:22.328Z" ));
114+
115+ final Uri result = Uri .parse (verify (client.get (
116+ captureAny,
117+ options: anyNamed ("options" ),
118+ onReceiveProgress: anyNamed ("onReceiveProgress" ),
119+ )).captured.single);
120+
121+ expect (result.path, '/classes/_User' );
122+
123+ final Uri expectedQuery = Uri (
124+ query:
125+ 'where={"\$ or":[{"firstName":{"\$ regex":"Liam"}},{"lastName":{"\$ regex":"Johnson"}}]}' );
126+ expect (result.query, expectedQuery.query);
127+ });
128+
129+ test ('QueryBuilder.and' , () async {
130+ final MockParseClient client = MockParseClient ();
131+
132+ await Parse ().initialize (
133+ 'appId' ,
134+ 'https://test.parse.com' ,
135+ debug: true ,
136+ // to prevent automatic detection
137+ fileDirectory: 'someDirectory' ,
138+ // to prevent automatic detection
139+ appName: 'appName' ,
140+ // to prevent automatic detection
141+ appPackageName: 'somePackageName' ,
142+ // to prevent automatic detection
143+ appVersion: 'someAppVersion' ,
144+ );
145+
146+ ParseObject user = ParseObject ("_User" , client: client);
147+ var firstName = QueryBuilder <ParseObject >(user)
148+ ..regEx ('firstName' , "jak" );
149+
150+ var lastName = QueryBuilder <ParseObject >(user)..regEx ('lastName' , "jaki" );
151+
152+ QueryBuilder <ParseObject > mainQuery = QueryBuilder .and (
153+ user,
154+ [firstName, lastName],
155+ );
156+
157+ when (client.get (
158+ any,
159+ options: anyNamed ("options" ),
160+ onReceiveProgress: anyNamed ("onReceiveProgress" ),
161+ )).thenAnswer ((_) async => ParseNetworkResponse (
162+ statusCode: 200 ,
163+ data:
164+ "{\" results\" : [{\" className\" : \" _User\" ,\" objectId\" : \" fqx5BECOME\" ,\" createdAt\" : \" 2022-10-25T06:04:47.138Z\" ,\" updatedAt\" : \" 2022-10-25T06:05:22.328Z\" ,\" firstName\" : \" jak1\" ,\" lastName\" : \" jaki1\" },{\" className\" : \" _User\" ,\" objectId\" : \" hAtRRYGrUO\" ,\" createdAt\" : \" 2022-01-24T15:53:48.396Z\" ,\" updatedAt\" : \" 2022-01-25T05:52:01.701Z\" ,\" firstName\" : \" jak2\" ,\" lastName\" : \" jaki2\" }]}" ));
165+
166+ var response = await mainQuery.query ();
167+
168+ expect (response.results? .first, isA <ParseObject >());
169+
170+ ParseObject parseObject = response.results? .first;
171+
172+ expect (parseObject.get <String >("firstName" ), "jak1" );
173+ expect (parseObject.objectId, "fqx5BECOME" );
174+ expect (parseObject.createdAt, DateTime .parse ("2022-10-25T06:04:47.138Z" ));
175+ expect (parseObject.updatedAt, DateTime .parse ("2022-10-25T06:05:22.328Z" ));
176+
177+ final Uri result = Uri .parse (verify (client.get (
178+ captureAny,
179+ options: anyNamed ("options" ),
180+ onReceiveProgress: anyNamed ("onReceiveProgress" ),
181+ )).captured.single);
182+
183+ expect (result.path, '/classes/_User' );
184+
185+ final Uri expectedQuery = Uri (
186+ query:
187+ 'where={"\$ and":[{"firstName":{"\$ regex":"jak"}},{"lastName":{"\$ regex":"jaki"}}]}' );
188+ expect (result.query, expectedQuery.query);
189+ });
190+
191+ test ('QueryBuilder.nor' , () async {
192+ final MockParseClient client = MockParseClient ();
193+
194+ await Parse ().initialize (
195+ 'appId' ,
196+ 'https://test.parse.com' ,
197+ debug: true ,
198+ // to prevent automatic detection
199+ fileDirectory: 'someDirectory' ,
200+ // to prevent automatic detection
201+ appName: 'appName' ,
202+ // to prevent automatic detection
203+ appPackageName: 'somePackageName' ,
204+ // to prevent automatic detection
205+ appVersion: 'someAppVersion' ,
206+ );
207+
208+ ParseObject user = ParseObject ("_User" , client: client);
209+ var firstName = QueryBuilder <ParseObject >(user)
210+ ..regEx ('firstName' , "Oliver" );
211+
212+ var lastName = QueryBuilder <ParseObject >(user)
213+ ..regEx ('lastName' , "Smith" );
214+
215+ QueryBuilder <ParseObject > mainQuery = QueryBuilder .nor (
216+ user,
217+ [firstName, lastName],
218+ );
219+
220+ when (client.get (
221+ any,
222+ options: anyNamed ("options" ),
223+ onReceiveProgress: anyNamed ("onReceiveProgress" ),
224+ )).thenAnswer ((_) async => ParseNetworkResponse (
225+ statusCode: 200 ,
226+ data:
227+ "{\" 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\" }]}" ));
228+
229+ var response = await mainQuery.query ();
230+
231+ expect (response.results? .first, isA <ParseObject >());
232+
233+ ParseObject parseObject = response.results? .first;
234+
235+ expect (parseObject.get <String >("firstName" ), "Oliver1" );
236+ expect (parseObject.objectId, "fqx5BECOME" );
237+ expect (parseObject.createdAt, DateTime .parse ("2022-10-25T06:04:47.138Z" ));
238+ expect (parseObject.updatedAt, DateTime .parse ("2022-10-25T06:05:22.328Z" ));
239+
240+ final Uri result = Uri .parse (verify (client.get (
241+ captureAny,
242+ options: anyNamed ("options" ),
243+ onReceiveProgress: anyNamed ("onReceiveProgress" ),
244+ )).captured.single);
245+
246+ expect (result.path, '/classes/_User' );
247+
248+ final Uri expectedQuery = Uri (
249+ query:
250+ 'where={"\$ nor":[{"firstName":{"\$ regex":"Oliver"}},{"lastName":{"\$ regex":"Smith"}}]}' );
251+ expect (result.query, expectedQuery.query);
252+ });
65253 });
66254}
0 commit comments