1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
<?php
declare(strict_types=1);
namespace Doctrine\Tests\ORM\Functional;
use Doctrine\Common\Collections\Criteria;
use Doctrine\Common\Persistence\PersistentObject;
use Doctrine\Tests\Models\PersistentObject\PersistentCollectionContent;
use Doctrine\Tests\Models\PersistentObject\PersistentCollectionHolder;
use Doctrine\Tests\OrmFunctionalTestCase;
use PHPUnit\Framework\Attributes\Group;
use function class_exists;
class PersistentCollectionTest extends OrmFunctionalTestCase
{
protected function setUp(): void
{
if (! class_exists(PersistentObject::class)) {
self::markTestSkipped('This test requires doctrine/persistence 2');
}
parent::setUp();
$this->createSchemaForModels(
PersistentCollectionHolder::class,
PersistentCollectionContent::class,
);
PersistentObject::setObjectManager($this->_em);
}
public function testPersist(): void
{
$collectionHolder = new PersistentCollectionHolder();
$content = new PersistentCollectionContent('first element');
$collectionHolder->addElement($content);
$this->_em->persist($collectionHolder);
$this->_em->flush();
$this->_em->clear();
$collectionHolder = $this->_em->find(PersistentCollectionHolder::class, $collectionHolder->getId());
$collectionHolder->getCollection();
$content = new PersistentCollectionContent('second element');
$collectionHolder->addElement($content);
self::assertEquals(2, $collectionHolder->getCollection()->count());
}
/**
* Tests that PersistentCollection::isEmpty() does not initialize the collection when FETCH_EXTRA_LAZY is used.
*/
public function testExtraLazyIsEmptyDoesNotInitializeCollection(): void
{
$collectionHolder = new PersistentCollectionHolder();
$this->_em->persist($collectionHolder);
$this->_em->flush();
$this->_em->clear();
$collectionHolder = $this->_em->find(PersistentCollectionHolder::class, $collectionHolder->getId());
$collection = $collectionHolder->getRawCollection();
self::assertTrue($collection->isEmpty());
self::assertFalse($collection->isInitialized());
$collectionHolder->addElement(new PersistentCollectionContent());
$this->_em->flush();
$this->_em->clear();
$collectionHolder = $this->_em->find(PersistentCollectionHolder::class, $collectionHolder->getId());
$collection = $collectionHolder->getRawCollection();
self::assertFalse($collection->isEmpty());
self::assertFalse($collection->isInitialized());
}
#[Group('#1206')]
#[Group('DDC-3430')]
public function testMatchingDoesNotModifyTheGivenCriteria(): void
{
$collectionHolder = new PersistentCollectionHolder();
$this->_em->persist($collectionHolder);
$this->_em->flush();
$this->_em->clear();
$criteria = new Criteria();
$collectionHolder = $this->_em->find(PersistentCollectionHolder::class, $collectionHolder->getId());
$collectionHolder->getCollection()->matching($criteria);
self::assertEmpty($criteria->getWhereExpression());
self::assertEmpty($criteria->getFirstResult());
self::assertEmpty($criteria->getMaxResults());
self::assertEmpty($criteria->getOrderings());
}
}
|