@@ -238,16 +238,68 @@ public function testQueryGetByType(): void
238238 {
239239 $ queries = [
240240 Query::equal ('key ' , ['value ' ]),
241- Query::select (['attr1 ' , 'attr2 ' ]),
242241 Query::cursorBefore (new Document ([])),
243242 Query::cursorAfter (new Document ([])),
244243 ];
245244
246- $ queries = Query::getByType ($ queries , [Query::TYPE_CURSOR_AFTER , Query::TYPE_CURSOR_BEFORE ]);
247- $ this ->assertCount (2 , $ queries );
248- foreach ($ queries as $ query ) {
245+ $ queries1 = Query::getByType ($ queries , [Query::TYPE_CURSOR_AFTER , Query::TYPE_CURSOR_BEFORE ]);
246+
247+ $ this ->assertCount (2 , $ queries1 );
248+ foreach ($ queries1 as $ query ) {
249249 $ this ->assertEquals (true , in_array ($ query ->getMethod (), [Query::TYPE_CURSOR_AFTER , Query::TYPE_CURSOR_BEFORE ]));
250250 }
251+
252+ $ cursor = reset ($ queries1 );
253+
254+ $ this ->assertInstanceOf (Query::class, $ cursor );
255+
256+ $ cursor ->setValue (new Document (['$id ' => 'hello1 ' ]));
257+
258+ $ query1 = $ queries [1 ];
259+
260+ $ this ->assertEquals (Query::TYPE_CURSOR_BEFORE , $ query1 ->getMethod ());
261+ $ this ->assertInstanceOf (Document::class, $ query1 ->getValue ());
262+ $ this ->assertTrue ($ query1 ->getValue ()->isEmpty ()); // Cursor Document is not updated
263+
264+ /**
265+ * Using reference $queries2 => $queries
266+ */
267+ $ queries2 = Query::getByType ($ queries , [Query::TYPE_CURSOR_AFTER , Query::TYPE_CURSOR_BEFORE ], false );
268+
269+ $ cursor = reset ($ queries2 );
270+ $ this ->assertInstanceOf (Query::class, $ cursor );
271+
272+ $ cursor ->setValue (new Document (['$id ' => 'hello1 ' ]));
273+
274+ $ query2 = $ queries [1 ];
275+
276+ $ this ->assertCount (2 , $ queries2 );
277+ $ this ->assertEquals (Query::TYPE_CURSOR_BEFORE , $ query2 ->getMethod ());
278+ $ this ->assertInstanceOf (Document::class, $ query2 ->getValue ());
279+ $ this ->assertEquals ('hello1 ' , $ query2 ->getValue ()->getId ()); // Cursor Document is updated
280+
281+ /**
282+ * Using getCursorQueries
283+ */
284+ $ queries = [
285+ Query::equal ('key ' , ['value ' ]),
286+ Query::cursorBefore (new Document ([])),
287+ Query::cursorAfter (new Document ([])),
288+ ];
289+
290+ $ queries3 = Query::getCursorQueries ($ queries , false );
291+
292+ $ cursor = reset ($ queries3 ); // Same as writing $cursor = $queries3[0];
293+ $ this ->assertInstanceOf (Query::class, $ cursor );
294+
295+ $ cursor ->setValue (new Document (['$id ' => 'hello3 ' ]));
296+
297+ $ query3 = $ queries [1 ];
298+
299+ $ this ->assertCount (2 , $ queries3 );
300+ $ this ->assertEquals (Query::TYPE_CURSOR_BEFORE , $ query3 ->getMethod ());
301+ $ this ->assertInstanceOf (Document::class, $ query3 ->getValue ());
302+ $ this ->assertEquals ('hello3 ' , $ query3 ->getValue ()->getId ()); // Cursor Document is updated
251303 }
252304
253305 /**
0 commit comments