Skip to content

Commit c040345

Browse files
updated tests
1 parent fb401cd commit c040345

File tree

2 files changed

+135
-1
lines changed

2 files changed

+135
-1
lines changed

src/Database/Adapter/Mongo.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2475,7 +2475,7 @@ protected function buildFilter(Query $query): array
24752475
{
24762476
// Normalize extended ISO 8601 datetime strings in query values to UTCDateTime
24772477
// so they can be correctly compared against datetime fields stored in MongoDB.
2478-
if (!$this->getSupportForAttributes()) {
2478+
if (!$this->getSupportForAttributes() || \in_array($query->getAttribute(), ['$createdAt', '$updatedAt'], true)) {
24792479
$values = $query->getValues();
24802480
foreach ($values as $k => $value) {
24812481
if (is_string($value) && $this->isExtendedISODatetime($value)) {

tests/e2e/Adapter/Scopes/SchemalessTests.php

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3370,4 +3370,138 @@ public function testQueryWithDatetime(): void
33703370

33713371
$database->deleteCollection($col);
33723372
}
3373+
3374+
public function testSchemalessCreatedAndUpdatedAtQuery(): void
3375+
{
3376+
/** @var Database $database */
3377+
$database = static::getDatabase();
3378+
3379+
if ($database->getAdapter()->getSupportForAttributes()) {
3380+
$this->expectNotToPerformAssertions();
3381+
return;
3382+
}
3383+
3384+
// Create a simple schemaless collection and one document.
3385+
$database->createCollection('movies', permissions: [
3386+
Permission::read(Role::any()),
3387+
Permission::create(Role::any()),
3388+
Permission::update(Role::any()),
3389+
Permission::delete(Role::any()),
3390+
]);
3391+
3392+
$database->createDocument('movies', new Document([
3393+
'$id' => ID::unique(),
3394+
'$permissions' => [Permission::read(Role::any())],
3395+
'name' => 'Schemaless Movie',
3396+
]));
3397+
3398+
$futureDate = '2050-01-01T00:00:00.000Z';
3399+
$pastDate = '1900-01-01T00:00:00.000Z';
3400+
$recentPastDate = '2020-01-01T00:00:00.000Z';
3401+
$nearFutureDate = '2025-01-01T00:00:00.000Z';
3402+
3403+
// --- createdBefore ---
3404+
$documents = $database->find('movies', [
3405+
Query::createdBefore($futureDate),
3406+
Query::limit(1),
3407+
]);
3408+
$this->assertGreaterThan(0, count($documents));
3409+
3410+
$documents = $database->find('movies', [
3411+
Query::createdBefore($pastDate),
3412+
Query::limit(1),
3413+
]);
3414+
$this->assertEquals(0, count($documents));
3415+
3416+
// --- createdAfter ---
3417+
$documents = $database->find('movies', [
3418+
Query::createdAfter($pastDate),
3419+
Query::limit(1),
3420+
]);
3421+
$this->assertGreaterThan(0, count($documents));
3422+
3423+
$documents = $database->find('movies', [
3424+
Query::createdAfter($futureDate),
3425+
Query::limit(1),
3426+
]);
3427+
$this->assertEquals(0, count($documents));
3428+
3429+
// --- updatedBefore ---
3430+
$documents = $database->find('movies', [
3431+
Query::updatedBefore($futureDate),
3432+
Query::limit(1),
3433+
]);
3434+
$this->assertGreaterThan(0, count($documents));
3435+
3436+
$documents = $database->find('movies', [
3437+
Query::updatedBefore($pastDate),
3438+
Query::limit(1),
3439+
]);
3440+
$this->assertEquals(0, count($documents));
3441+
3442+
// --- updatedAfter ---
3443+
$documents = $database->find('movies', [
3444+
Query::updatedAfter($pastDate),
3445+
Query::limit(1),
3446+
]);
3447+
$this->assertGreaterThan(0, count($documents));
3448+
3449+
$documents = $database->find('movies', [
3450+
Query::updatedAfter($futureDate),
3451+
Query::limit(1),
3452+
]);
3453+
$this->assertEquals(0, count($documents));
3454+
3455+
// --- createdBetween ---
3456+
$documents = $database->find('movies', [
3457+
Query::createdBetween($pastDate, $futureDate),
3458+
Query::limit(25),
3459+
]);
3460+
$this->assertGreaterThan(0, count($documents));
3461+
3462+
$documents = $database->find('movies', [
3463+
Query::createdBetween($pastDate, $pastDate),
3464+
Query::limit(25),
3465+
]);
3466+
$this->assertEquals(0, count($documents));
3467+
3468+
$documents = $database->find('movies', [
3469+
Query::createdBetween($recentPastDate, $nearFutureDate),
3470+
Query::limit(25),
3471+
]);
3472+
$count = count($documents);
3473+
3474+
$documents = $database->find('movies', [
3475+
Query::createdBetween($pastDate, $nearFutureDate),
3476+
Query::limit(25),
3477+
]);
3478+
$this->assertGreaterThanOrEqual($count, count($documents));
3479+
3480+
// --- updatedBetween ---
3481+
$documents = $database->find('movies', [
3482+
Query::updatedBetween($pastDate, $futureDate),
3483+
Query::limit(25),
3484+
]);
3485+
$this->assertGreaterThan(0, count($documents));
3486+
3487+
$documents = $database->find('movies', [
3488+
Query::updatedBetween($pastDate, $pastDate),
3489+
Query::limit(25),
3490+
]);
3491+
$this->assertEquals(0, count($documents));
3492+
3493+
$documents = $database->find('movies', [
3494+
Query::updatedBetween($recentPastDate, $nearFutureDate),
3495+
Query::limit(25),
3496+
]);
3497+
$count = count($documents);
3498+
3499+
$documents = $database->find('movies', [
3500+
Query::updatedBetween($pastDate, $nearFutureDate),
3501+
Query::limit(25),
3502+
]);
3503+
$this->assertGreaterThanOrEqual($count, count($documents));
3504+
3505+
$database->deleteCollection('movies');
3506+
}
33733507
}

0 commit comments

Comments
 (0)