diff --git a/src/Database/Query.php b/src/Database/Query.php index e354ab96e..598dd037d 100644 --- a/src/Database/Query.php +++ b/src/Database/Query.php @@ -625,6 +625,50 @@ public static function notEndsWith(string $attribute, string $value): self return new self(self::TYPE_NOT_ENDS_WITH, $attribute, [$value]); } + /** + * Helper method to create Query for documents created before a specific date + * + * @param string $value + * @return Query + */ + public static function createdBefore(string $value): self + { + return self::lessThan('$createdAt', $value); + } + + /** + * Helper method to create Query for documents created after a specific date + * + * @param string $value + * @return Query + */ + public static function createdAfter(string $value): self + { + return self::greaterThan('$createdAt', $value); + } + + /** + * Helper method to create Query for documents updated before a specific date + * + * @param string $value + * @return Query + */ + public static function updatedBefore(string $value): self + { + return self::lessThan('$updatedAt', $value); + } + + /** + * Helper method to create Query for documents updated after a specific date + * + * @param string $value + * @return Query + */ + public static function updatedAfter(string $value): self + { + return self::greaterThan('$updatedAt', $value); + } + /** * @param array $queries * @return Query diff --git a/tests/e2e/Adapter/Scopes/DocumentTests.php b/tests/e2e/Adapter/Scopes/DocumentTests.php index 0ce664769..82b8e026c 100644 --- a/tests/e2e/Adapter/Scopes/DocumentTests.php +++ b/tests/e2e/Adapter/Scopes/DocumentTests.php @@ -2644,6 +2644,110 @@ public function testFindOrderByUpdateDateAndCursor(): void $this->assertEquals($documentsTest[1]['$id'], $documents[0]['$id']); } + public function testFindCreatedBefore(): void + { + /** @var Database $database */ + $database = static::getDatabase(); + + /** + * Test Query::createdBefore wrapper + */ + $futureDate = '2050-01-01T00:00:00.000Z'; + $pastDate = '1900-01-01T00:00:00.000Z'; + + $documents = $database->find('movies', [ + Query::createdBefore($futureDate), + Query::limit(1) + ]); + + $this->assertGreaterThan(0, count($documents)); + + $documents = $database->find('movies', [ + Query::createdBefore($pastDate), + Query::limit(1) + ]); + + $this->assertEquals(0, count($documents)); + } + + public function testFindCreatedAfter(): void + { + /** @var Database $database */ + $database = static::getDatabase(); + + /** + * Test Query::createdAfter wrapper + */ + $futureDate = '2050-01-01T00:00:00.000Z'; + $pastDate = '1900-01-01T00:00:00.000Z'; + + $documents = $database->find('movies', [ + Query::createdAfter($pastDate), + Query::limit(1) + ]); + + $this->assertGreaterThan(0, count($documents)); + + $documents = $database->find('movies', [ + Query::createdAfter($futureDate), + Query::limit(1) + ]); + + $this->assertEquals(0, count($documents)); + } + + public function testFindUpdatedBefore(): void + { + /** @var Database $database */ + $database = static::getDatabase(); + + /** + * Test Query::updatedBefore wrapper + */ + $futureDate = '2050-01-01T00:00:00.000Z'; + $pastDate = '1900-01-01T00:00:00.000Z'; + + $documents = $database->find('movies', [ + Query::updatedBefore($futureDate), + Query::limit(1) + ]); + + $this->assertGreaterThan(0, count($documents)); + + $documents = $database->find('movies', [ + Query::updatedBefore($pastDate), + Query::limit(1) + ]); + + $this->assertEquals(0, count($documents)); + } + + public function testFindUpdatedAfter(): void + { + /** @var Database $database */ + $database = static::getDatabase(); + + /** + * Test Query::updatedAfter wrapper + */ + $futureDate = '2050-01-01T00:00:00.000Z'; + $pastDate = '1900-01-01T00:00:00.000Z'; + + $documents = $database->find('movies', [ + Query::updatedAfter($pastDate), + Query::limit(1) + ]); + + $this->assertGreaterThan(0, count($documents)); + + $documents = $database->find('movies', [ + Query::updatedAfter($futureDate), + Query::limit(1) + ]); + + $this->assertEquals(0, count($documents)); + } + public function testFindLimit(): void { /** @var Database $database */ diff --git a/tests/unit/QueryTest.php b/tests/unit/QueryTest.php index c0c17e59f..3084abaa0 100644 --- a/tests/unit/QueryTest.php +++ b/tests/unit/QueryTest.php @@ -116,6 +116,31 @@ public function testCreate(): void $this->assertEquals(Query::TYPE_NOT_BETWEEN, $query->getMethod()); $this->assertEquals('score', $query->getAttribute()); $this->assertEquals([10, 20], $query->getValues()); + + // Test new date query wrapper methods + $query = Query::createdBefore('2023-01-01T00:00:00.000Z'); + + $this->assertEquals(Query::TYPE_LESSER, $query->getMethod()); + $this->assertEquals('$createdAt', $query->getAttribute()); + $this->assertEquals(['2023-01-01T00:00:00.000Z'], $query->getValues()); + + $query = Query::createdAfter('2023-01-01T00:00:00.000Z'); + + $this->assertEquals(Query::TYPE_GREATER, $query->getMethod()); + $this->assertEquals('$createdAt', $query->getAttribute()); + $this->assertEquals(['2023-01-01T00:00:00.000Z'], $query->getValues()); + + $query = Query::updatedBefore('2023-12-31T23:59:59.999Z'); + + $this->assertEquals(Query::TYPE_LESSER, $query->getMethod()); + $this->assertEquals('$updatedAt', $query->getAttribute()); + $this->assertEquals(['2023-12-31T23:59:59.999Z'], $query->getValues()); + + $query = Query::updatedAfter('2023-12-31T23:59:59.999Z'); + + $this->assertEquals(Query::TYPE_GREATER, $query->getMethod()); + $this->assertEquals('$updatedAt', $query->getAttribute()); + $this->assertEquals(['2023-12-31T23:59:59.999Z'], $query->getValues()); } /** @@ -225,6 +250,27 @@ public function testParse(): void $this->assertEquals(null, $query->getAttribute()); $this->assertEquals(['title', 'director'], $query->getValues()); + // Test new date query wrapper methods parsing + $query = Query::parse(Query::createdBefore('2023-01-01T00:00:00.000Z')->toString()); + $this->assertEquals('lessThan', $query->getMethod()); + $this->assertEquals('$createdAt', $query->getAttribute()); + $this->assertEquals(['2023-01-01T00:00:00.000Z'], $query->getValues()); + + $query = Query::parse(Query::createdAfter('2023-01-01T00:00:00.000Z')->toString()); + $this->assertEquals('greaterThan', $query->getMethod()); + $this->assertEquals('$createdAt', $query->getAttribute()); + $this->assertEquals(['2023-01-01T00:00:00.000Z'], $query->getValues()); + + $query = Query::parse(Query::updatedBefore('2023-12-31T23:59:59.999Z')->toString()); + $this->assertEquals('lessThan', $query->getMethod()); + $this->assertEquals('$updatedAt', $query->getAttribute()); + $this->assertEquals(['2023-12-31T23:59:59.999Z'], $query->getValues()); + + $query = Query::parse(Query::updatedAfter('2023-12-31T23:59:59.999Z')->toString()); + $this->assertEquals('greaterThan', $query->getMethod()); + $this->assertEquals('$updatedAt', $query->getAttribute()); + $this->assertEquals(['2023-12-31T23:59:59.999Z'], $query->getValues()); + $query = Query::parse(Query::between('age', 15, 18)->toString()); $this->assertEquals('between', $query->getMethod()); $this->assertEquals('age', $query->getAttribute());