|
4 | 4 | namespace EventEngineTest\DocumentStore; |
5 | 5 |
|
6 | 6 | use EventEngine\DocumentStore\FieldIndex; |
| 7 | +use EventEngine\DocumentStore\Filter\AndFilter; |
7 | 8 | use EventEngine\DocumentStore\Filter\AnyFilter; |
8 | 9 | use EventEngine\DocumentStore\Filter\EqFilter; |
| 10 | +use EventEngine\DocumentStore\Filter\GtFilter; |
| 11 | +use EventEngine\DocumentStore\Filter\LtFilter; |
| 12 | +use EventEngine\DocumentStore\Filter\OrFilter; |
9 | 13 | use EventEngine\DocumentStore\InMemoryDocumentStore; |
10 | 14 | use EventEngine\DocumentStore\MultiFieldIndex; |
11 | 15 | use EventEngine\Persistence\InMemoryConnection; |
@@ -105,6 +109,25 @@ public function it_updates_a_subset_of_a_doc() |
105 | 109 | $this->assertEquals(42, $filteredDocs[0]['some']['other']['nested']); |
106 | 110 | } |
107 | 111 |
|
| 112 | + /** |
| 113 | + * @test |
| 114 | + */ |
| 115 | + public function it_retrieves_doc_ids_by_filter() |
| 116 | + { |
| 117 | + $this->store->addCollection('test'); |
| 118 | + |
| 119 | + $this->store->addDoc('test', 'a', ['number' => 10]); |
| 120 | + $this->store->addDoc('test', 'b', ['number' => 20]); |
| 121 | + $this->store->addDoc('test', 'c', ['number' => 30]); |
| 122 | + |
| 123 | + $result = $this->store->filterDocIds('test', new OrFilter( |
| 124 | + new GtFilter('number', 21), |
| 125 | + new LtFilter('number', 19) |
| 126 | + )); |
| 127 | + |
| 128 | + $this->assertEquals(['a', 'c'], $result); |
| 129 | + } |
| 130 | + |
108 | 131 | /** |
109 | 132 | * @test |
110 | 133 | */ |
@@ -303,4 +326,52 @@ public function it_deletes_many() |
303 | 326 | $this->assertCount(1, $filteredDocs); |
304 | 327 | $this->assertEquals(['some' => ['prop' => 'bar']], $filteredDocs[0]); |
305 | 328 | } |
| 329 | + |
| 330 | + /** |
| 331 | + * @test |
| 332 | + */ |
| 333 | + public function it_does_not_update_numeric_arrays_recursively() |
| 334 | + { |
| 335 | + $this->store->addCollection('test'); |
| 336 | + |
| 337 | + $this->store->addDoc('test', 'doc', [ |
| 338 | + 'a' => ['a' => 10, 'b' => 20], |
| 339 | + 'b' => [10, 20, 30], |
| 340 | + 'c' => [], |
| 341 | + 'd' => [false, true], |
| 342 | + 'e' => ['a' => 'b'], |
| 343 | + 'f' => [10, 20], |
| 344 | + 'g' => ['x' => 10, 'y' => 20], |
| 345 | + 'h' => [11], |
| 346 | + 'j' => 'foo' |
| 347 | + ]); |
| 348 | + |
| 349 | + $this->store->updateDoc('test', 'doc', [ |
| 350 | + 'a' => ['b' => 21, 'c' => 30], |
| 351 | + 'b' => [10, 30], |
| 352 | + 'c' => [true], |
| 353 | + 'd' => [], |
| 354 | + 'e' => [], |
| 355 | + 'f' => ['x' => 10, 'y' => 20], |
| 356 | + 'g' => [30, 40], |
| 357 | + 'i' => [22], |
| 358 | + 'j' => ['bar'] |
| 359 | + ]); |
| 360 | + |
| 361 | + $this->assertEquals( |
| 362 | + [ |
| 363 | + 'a' => ['a' => 10, 'b' => 21, 'c' => 30], |
| 364 | + 'b' => [10, 30], |
| 365 | + 'c' => [true], |
| 366 | + 'd' => [], |
| 367 | + 'e' => ['a' => 'b'], |
| 368 | + 'f' => [10, 20, 'x' => 10, 'y' => 20], |
| 369 | + 'g' => ['x' => 10, 'y' => 20, 30, 40], |
| 370 | + 'h' => [11], |
| 371 | + 'i' => [22], |
| 372 | + 'j' => ['bar'] |
| 373 | + ], |
| 374 | + $this->store->getDoc('test', 'doc') |
| 375 | + ); |
| 376 | + } |
306 | 377 | } |
0 commit comments