From ed9d3da4177c81cb8dca6e319cc1fad11bbf56e2 Mon Sep 17 00:00:00 2001 From: fogelito Date: Mon, 19 Jan 2026 09:54:33 +0200 Subject: [PATCH 1/6] tests --- src/Database/Query.php | 22 ++++++++++++-- tests/unit/Validator/QueryTest.php | 48 +++++++++++++++++++++++++++--- 2 files changed, 64 insertions(+), 6 deletions(-) diff --git a/src/Database/Query.php b/src/Database/Query.php index cfa6a5934..825f4f7ec 100644 --- a/src/Database/Query.php +++ b/src/Database/Query.php @@ -824,21 +824,39 @@ public static function and(array $queries): self * * @param array $queries * @param array $types + * @param bool $clone * @return array */ - public static function getByType(array $queries, array $types): array + public static function getByType(array $queries, array $types, bool $clone = true): array { $filtered = []; foreach ($queries as $query) { if (\in_array($query->getMethod(), $types, true)) { - $filtered[] = clone $query; + $filtered[] = $clone ? clone $query : $query; } } return $filtered; } + /** + * @param array $queries + * @param bool $clone + * @return array + */ + public static function getCursorQueries(array $queries, bool $clone = true): array + { + return self::getByType( + $queries, + [ + Query::TYPE_CURSOR_AFTER, + Query::TYPE_CURSOR_BEFORE, + ], + $clone + ); + } + /** * Iterates through queries are groups them by type * diff --git a/tests/unit/Validator/QueryTest.php b/tests/unit/Validator/QueryTest.php index dbe7a6b52..ac58063e7 100644 --- a/tests/unit/Validator/QueryTest.php +++ b/tests/unit/Validator/QueryTest.php @@ -238,16 +238,56 @@ public function testQueryGetByType(): void { $queries = [ Query::equal('key', ['value']), - Query::select(['attr1', 'attr2']), Query::cursorBefore(new Document([])), Query::cursorAfter(new Document([])), ]; - $queries = Query::getByType($queries, [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - $this->assertCount(2, $queries); - foreach ($queries as $query) { + $queries_1 = Query::getByType($queries, [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); + $this->assertCount(2, $queries_1); + foreach ($queries_1 as $query) { $this->assertEquals(true, in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE])); } + + $cursor = reset($queries_1); + $cursor->setValue(new Document(['$id' => 'hello1'])); + + $query1 = $queries[1]; + + $this->assertEquals(Query::TYPE_CURSOR_BEFORE, $query1->getMethod()); + $this->assertInstanceOf(Document::class, $query1->getValue()); + $this->assertTrue($query1->getValue()->isEmpty()); // Cursor Document is not updated + + /** + * Using reference $queries_2 => $queries + */ + $queries_2 = Query::getByType($queries, [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE], false); + $cursor = reset($queries_2); + $cursor->setValue(new Document(['$id' => 'hello1'])); + + $query2 = $queries[1]; + + $this->assertEquals(Query::TYPE_CURSOR_BEFORE, $query2->getMethod()); + $this->assertInstanceOf(Document::class, $query2->getValue()); + $this->assertEquals('hello1', $query2->getValue()->getId()); // Cursor Document is updated + + /** + * Using getCursorQueries + */ + $queries = [ + Query::equal('key', ['value']), + Query::cursorBefore(new Document([])), + Query::cursorAfter(new Document([])), + ]; + + $queries_3 = Query::getCursorQueries($queries, false); + $cursor = reset($queries_3); + $cursor->setValue(new Document(['$id' => 'hello3'])); + + $query3 = $queries[1]; + + $this->assertEquals(Query::TYPE_CURSOR_BEFORE, $query3->getMethod()); + $this->assertInstanceOf(Document::class, $query3->getValue()); + $this->assertEquals('hello3', $query3->getValue()->getId()); // Cursor Document is updated } /** From c0cd047265390938d6f75d0be8cb55a25562d0cb Mon Sep 17 00:00:00 2001 From: fogelito Date: Mon, 19 Jan 2026 10:02:42 +0200 Subject: [PATCH 2/6] Update message --- tests/unit/Validator/QueryTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/unit/Validator/QueryTest.php b/tests/unit/Validator/QueryTest.php index ac58063e7..7b20de231 100644 --- a/tests/unit/Validator/QueryTest.php +++ b/tests/unit/Validator/QueryTest.php @@ -280,7 +280,7 @@ public function testQueryGetByType(): void ]; $queries_3 = Query::getCursorQueries($queries, false); - $cursor = reset($queries_3); + $cursor = reset($queries_3); // Same as writing $cursor = $queries_3[0]; $cursor->setValue(new Document(['$id' => 'hello3'])); $query3 = $queries[1]; From f2fd4d49d30cc4be678883b433fe2aed3e47c7f8 Mon Sep 17 00:00:00 2001 From: fogelito Date: Mon, 19 Jan 2026 10:05:12 +0200 Subject: [PATCH 3/6] Add assertCount --- tests/unit/Validator/QueryTest.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/unit/Validator/QueryTest.php b/tests/unit/Validator/QueryTest.php index 7b20de231..e82622cb8 100644 --- a/tests/unit/Validator/QueryTest.php +++ b/tests/unit/Validator/QueryTest.php @@ -243,6 +243,7 @@ public function testQueryGetByType(): void ]; $queries_1 = Query::getByType($queries, [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); + $this->assertCount(2, $queries_1); foreach ($queries_1 as $query) { $this->assertEquals(true, in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE])); @@ -266,6 +267,7 @@ public function testQueryGetByType(): void $query2 = $queries[1]; + $this->assertCount(2, $queries_2); $this->assertEquals(Query::TYPE_CURSOR_BEFORE, $query2->getMethod()); $this->assertInstanceOf(Document::class, $query2->getValue()); $this->assertEquals('hello1', $query2->getValue()->getId()); // Cursor Document is updated @@ -285,6 +287,7 @@ public function testQueryGetByType(): void $query3 = $queries[1]; + $this->assertCount(2, $queries_3); $this->assertEquals(Query::TYPE_CURSOR_BEFORE, $query3->getMethod()); $this->assertInstanceOf(Document::class, $query3->getValue()); $this->assertEquals('hello3', $query3->getValue()->getId()); // Cursor Document is updated From 5a43b0bb236c88cc6db711bf34d26995bf0c471d Mon Sep 17 00:00:00 2001 From: fogelito Date: Mon, 19 Jan 2026 10:13:20 +0200 Subject: [PATCH 4/6] assertInstanceOf --- tests/unit/Validator/QueryTest.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/unit/Validator/QueryTest.php b/tests/unit/Validator/QueryTest.php index e82622cb8..9f980ccf8 100644 --- a/tests/unit/Validator/QueryTest.php +++ b/tests/unit/Validator/QueryTest.php @@ -250,6 +250,7 @@ public function testQueryGetByType(): void } $cursor = reset($queries_1); + $this->assertInstanceOf(Query::class, $cursor); $cursor->setValue(new Document(['$id' => 'hello1'])); $query1 = $queries[1]; @@ -263,6 +264,7 @@ public function testQueryGetByType(): void */ $queries_2 = Query::getByType($queries, [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE], false); $cursor = reset($queries_2); + $this->assertInstanceOf(Query::class, $cursor); $cursor->setValue(new Document(['$id' => 'hello1'])); $query2 = $queries[1]; @@ -283,6 +285,7 @@ public function testQueryGetByType(): void $queries_3 = Query::getCursorQueries($queries, false); $cursor = reset($queries_3); // Same as writing $cursor = $queries_3[0]; + $this->assertInstanceOf(Query::class, $cursor); $cursor->setValue(new Document(['$id' => 'hello3'])); $query3 = $queries[1]; From 739fdc060012766f8585ed7259bfdf8dd392e057 Mon Sep 17 00:00:00 2001 From: fogelito Date: Mon, 19 Jan 2026 10:15:30 +0200 Subject: [PATCH 5/6] fix codeQL --- tests/unit/Validator/QueryTest.php | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tests/unit/Validator/QueryTest.php b/tests/unit/Validator/QueryTest.php index 9f980ccf8..7a214351a 100644 --- a/tests/unit/Validator/QueryTest.php +++ b/tests/unit/Validator/QueryTest.php @@ -250,7 +250,9 @@ public function testQueryGetByType(): void } $cursor = reset($queries_1); + $this->assertInstanceOf(Query::class, $cursor); + $cursor->setValue(new Document(['$id' => 'hello1'])); $query1 = $queries[1]; @@ -263,8 +265,10 @@ public function testQueryGetByType(): void * Using reference $queries_2 => $queries */ $queries_2 = Query::getByType($queries, [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE], false); + $cursor = reset($queries_2); $this->assertInstanceOf(Query::class, $cursor); + $cursor->setValue(new Document(['$id' => 'hello1'])); $query2 = $queries[1]; @@ -284,8 +288,10 @@ public function testQueryGetByType(): void ]; $queries_3 = Query::getCursorQueries($queries, false); + $cursor = reset($queries_3); // Same as writing $cursor = $queries_3[0]; $this->assertInstanceOf(Query::class, $cursor); + $cursor->setValue(new Document(['$id' => 'hello3'])); $query3 = $queries[1]; From 47d35fcb742fd720a718fa65c338a877aa1e270e Mon Sep 17 00:00:00 2001 From: fogelito Date: Mon, 19 Jan 2026 10:55:06 +0200 Subject: [PATCH 6/6] Remove _ --- tests/unit/Validator/QueryTest.php | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/unit/Validator/QueryTest.php b/tests/unit/Validator/QueryTest.php index 7a214351a..8433f47f2 100644 --- a/tests/unit/Validator/QueryTest.php +++ b/tests/unit/Validator/QueryTest.php @@ -242,14 +242,14 @@ public function testQueryGetByType(): void Query::cursorAfter(new Document([])), ]; - $queries_1 = Query::getByType($queries, [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); + $queries1 = Query::getByType($queries, [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE]); - $this->assertCount(2, $queries_1); - foreach ($queries_1 as $query) { + $this->assertCount(2, $queries1); + foreach ($queries1 as $query) { $this->assertEquals(true, in_array($query->getMethod(), [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE])); } - $cursor = reset($queries_1); + $cursor = reset($queries1); $this->assertInstanceOf(Query::class, $cursor); @@ -262,18 +262,18 @@ public function testQueryGetByType(): void $this->assertTrue($query1->getValue()->isEmpty()); // Cursor Document is not updated /** - * Using reference $queries_2 => $queries + * Using reference $queries2 => $queries */ - $queries_2 = Query::getByType($queries, [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE], false); + $queries2 = Query::getByType($queries, [Query::TYPE_CURSOR_AFTER, Query::TYPE_CURSOR_BEFORE], false); - $cursor = reset($queries_2); + $cursor = reset($queries2); $this->assertInstanceOf(Query::class, $cursor); $cursor->setValue(new Document(['$id' => 'hello1'])); $query2 = $queries[1]; - $this->assertCount(2, $queries_2); + $this->assertCount(2, $queries2); $this->assertEquals(Query::TYPE_CURSOR_BEFORE, $query2->getMethod()); $this->assertInstanceOf(Document::class, $query2->getValue()); $this->assertEquals('hello1', $query2->getValue()->getId()); // Cursor Document is updated @@ -287,16 +287,16 @@ public function testQueryGetByType(): void Query::cursorAfter(new Document([])), ]; - $queries_3 = Query::getCursorQueries($queries, false); + $queries3 = Query::getCursorQueries($queries, false); - $cursor = reset($queries_3); // Same as writing $cursor = $queries_3[0]; + $cursor = reset($queries3); // Same as writing $cursor = $queries3[0]; $this->assertInstanceOf(Query::class, $cursor); $cursor->setValue(new Document(['$id' => 'hello3'])); $query3 = $queries[1]; - $this->assertCount(2, $queries_3); + $this->assertCount(2, $queries3); $this->assertEquals(Query::TYPE_CURSOR_BEFORE, $query3->getMethod()); $this->assertInstanceOf(Document::class, $query3->getValue()); $this->assertEquals('hello3', $query3->getValue()->getId()); // Cursor Document is updated