Skip to content

Commit 6de1a2d

Browse files
test: enhance schemaless nested object attribute queries with additional session scenarios
1 parent 887775d commit 6de1a2d

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed

tests/e2e/Adapter/Scopes/SchemalessTests.php

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1723,6 +1723,22 @@ public function testSchemalessNestedObjectAttributeQueries(): void
17231723
],
17241724
],
17251725
],
1726+
'sessions' => [
1727+
[
1728+
'device' => [
1729+
'os' => 'ios',
1730+
'version' => '17',
1731+
],
1732+
'active' => true,
1733+
],
1734+
[
1735+
'device' => [
1736+
'os' => 'android',
1737+
'version' => '14',
1738+
],
1739+
'active' => false,
1740+
],
1741+
],
17261742
]));
17271743

17281744
$database->createDocument($col, new Document([
@@ -1739,6 +1755,15 @@ public function testSchemalessNestedObjectAttributeQueries(): void
17391755
],
17401756
],
17411757
],
1758+
'sessions' => [
1759+
[
1760+
'device' => [
1761+
'os' => 'android',
1762+
'version' => '15',
1763+
],
1764+
'active' => true,
1765+
],
1766+
],
17421767
]));
17431768

17441769
// Document without full nesting
@@ -1751,6 +1776,7 @@ public function testSchemalessNestedObjectAttributeQueries(): void
17511776
'country' => 'US',
17521777
],
17531778
],
1779+
'sessions' => [],
17541780
]));
17551781

17561782
// Query using Mongo-style dotted paths: attribute.key.key
@@ -1809,6 +1835,34 @@ public function testSchemalessNestedObjectAttributeQueries(): void
18091835
$this->assertContains('u1', $idsEqual);
18101836
$this->assertContains('u3', $idsEqual);
18111837

1838+
// elemMatch on array of nested objects (sessions.device.os, sessions.active)
1839+
$iosActive = $database->find($col, [
1840+
Query::elemMatch('sessions', [
1841+
Query::equal('device.os', ['ios']),
1842+
Query::equal('active', [true]),
1843+
]),
1844+
]);
1845+
$this->assertCount(1, $iosActive);
1846+
$this->assertEquals('u1', $iosActive[0]->getId());
1847+
1848+
// elemMatch where nested condition only matches u2 (android & active)
1849+
$androidActive = $database->find($col, [
1850+
Query::elemMatch('sessions', [
1851+
Query::equal('device.os', ['android']),
1852+
Query::equal('active', [true]),
1853+
]),
1854+
]);
1855+
$this->assertCount(1, $androidActive);
1856+
$this->assertEquals('u2', $androidActive[0]->getId());
1857+
1858+
// elemMatch with condition that should not match any document
1859+
$windowsSessions = $database->find($col, [
1860+
Query::elemMatch('sessions', [
1861+
Query::equal('device.os', ['windows']),
1862+
]),
1863+
]);
1864+
$this->assertCount(0, $windowsSessions);
1865+
18121866
$database->deleteCollection($col);
18131867
}
18141868
}

0 commit comments

Comments
 (0)