|
5 | 5 | namespace Doctrine\ODM\MongoDB\Tests\Functional;
|
6 | 6 |
|
7 | 7 | use Closure;
|
| 8 | +use DateTime; |
8 | 9 | use Doctrine\ODM\MongoDB\DocumentManager;
|
9 | 10 | use Doctrine\ODM\MongoDB\LockException;
|
10 | 11 | use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
|
|
15 | 16 | use Generator;
|
16 | 17 | use InvalidArgumentException;
|
17 | 18 | use MongoDB\BSON\ObjectId;
|
| 19 | +use MongoDB\BSON\UTCDateTime; |
18 | 20 | use MongoDB\Collection;
|
19 | 21 | use ReflectionProperty;
|
20 | 22 | use function get_class;
|
@@ -461,6 +463,43 @@ public function testPrepareQueryOrNewObjWithDBRefReferenceToTargetDocumentWithHa
|
461 | 463 | $this->assertEquals($expected, $documentPersister->prepareQueryOrNewObj($value));
|
462 | 464 | }
|
463 | 465 |
|
| 466 | + /** |
| 467 | + * @dataProvider queryProviderForComplexRefWithObjectValue |
| 468 | + */ |
| 469 | + public function testPrepareQueryOrNewObjWithComplexRefToTargetDocumentFieldWithObjectValue(array $expected, array $query) |
| 470 | + { |
| 471 | + $class = DocumentPersisterTestDocument::class; |
| 472 | + $documentPersister = $this->uow->getDocumentPersister($class); |
| 473 | + |
| 474 | + $this->assertEquals( |
| 475 | + $expected, |
| 476 | + $documentPersister->prepareQueryOrNewObj($query) |
| 477 | + ); |
| 478 | + } |
| 479 | + |
| 480 | + public static function queryProviderForComplexRefWithObjectValue() : Generator |
| 481 | + { |
| 482 | + yield 'Direct comparison' => [ |
| 483 | + 'expected' => ['complexRef.date' => new UTCDateTime('1590710400000')], |
| 484 | + 'query' => ['complexRef.date' => new DateTime('2020-05-29')], |
| 485 | + ]; |
| 486 | + |
| 487 | + yield 'Operator with single value' => [ |
| 488 | + 'expected' => ['complexRef.date' => ['$ne' => new UTCDateTime('1590710400000')]], |
| 489 | + 'query' => ['complexRef.date' => ['$ne' => new DateTime('2020-05-29')]], |
| 490 | + ]; |
| 491 | + |
| 492 | + yield 'Operator with multiple values' => [ |
| 493 | + 'expected' => ['complexRef.date' => ['$in' => [new UTCDateTime('1590710400000'), new UTCDateTime('1590796800000')]]], |
| 494 | + 'query' => ['complexRef.date' => ['$in' => [new DateTime('2020-05-29'), new DateTime('2020-05-30')]]], |
| 495 | + ]; |
| 496 | + |
| 497 | + yield 'Nested operator' => [ |
| 498 | + 'expected' => ['complexRef.date' => ['$not' => ['$in' => [new UTCDateTime('1590710400000'), new UTCDateTime('1590796800000')]]]], |
| 499 | + 'query' => ['complexRef.date' => ['$not' => ['$in' => [new DateTime('2020-05-29'), new DateTime('2020-05-30')]]]], |
| 500 | + ]; |
| 501 | + } |
| 502 | + |
464 | 503 | public function testPrepareQueryOrNewObjWithEmbeddedReferenceToTargetDocumentWithNormalIdType()
|
465 | 504 | {
|
466 | 505 | $class = DocumentPersisterTestHashIdDocument::class;
|
|
0 commit comments