From a16dc65cd206aed67a01a19f01f6318192b826af Mon Sep 17 00:00:00 2001 From: Guilherme Blanco Date: Mon, 18 Dec 2017 22:46:48 -0500 Subject: [PATCH] Fixes #1391, DDC-3693 --- .gitignore | 1 + tests/Doctrine/Tests/ORM/UnitOfWorkTest.php | 35 +++++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/.gitignore b/.gitignore index da7410292..eb79065bc 100644 --- a/.gitignore +++ b/.gitignore @@ -10,6 +10,7 @@ lib/Doctrine/DBAL .buildpath .project .idea +*.iml vendor/ composer.lock /tests/Doctrine/Performance/history.db diff --git a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php index fb95ba8ba..987b565fa 100644 --- a/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php +++ b/tests/Doctrine/Tests/ORM/UnitOfWorkTest.php @@ -196,6 +196,41 @@ class UnitOfWorkTest extends OrmTestCase $this->assertTrue($updates[0] === $item); } + public function testChangeTrackingNotifyIndividualCommit() + { + $persister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata("Doctrine\Tests\ORM\NotifyChangedEntity")); + $this->_unitOfWork->setEntityPersister('Doctrine\Tests\ORM\NotifyChangedEntity', $persister); + $itemPersister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata("Doctrine\Tests\ORM\NotifyChangedRelatedItem")); + $this->_unitOfWork->setEntityPersister('Doctrine\Tests\ORM\NotifyChangedRelatedItem', $itemPersister); + + $entity = new NotifyChangedEntity; + $entity->setData('thedata'); + + $entity2 = new NotifyChangedEntity; + $entity2->setData('thedata'); + + $this->_unitOfWork->persist($entity); + $this->_unitOfWork->persist($entity2); + $this->_unitOfWork->commit($entity); + $this->_unitOfWork->commit(); + + $this->assertEquals(2, count($persister->getInserts())); + + $persister->reset(); + + $this->assertTrue($this->_unitOfWork->isInIdentityMap($entity2)); + + $entity->setData('newdata'); + $entity2->setData('newdata'); + + $this->_unitOfWork->commit($entity); + + $this->assertTrue($this->_unitOfWork->isScheduledForDirtyCheck($entity2)); + $this->assertEquals(array('data' => array('thedata', 'newdata')), $this->_unitOfWork->getEntityChangeSet($entity2)); + $this->assertFalse($this->_unitOfWork->isScheduledForDirtyCheck($entity)); + $this->assertEquals(array(), $this->_unitOfWork->getEntityChangeSet($entity)); + } + public function testGetEntityStateOnVersionedEntityWithAssignedIdentifier() { $persister = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(VersionedAssignedIdentifierEntity::class));