#1521 DDC-2922 verifying that persistence operations will resume normally after a crash due to invalid new values detected on associations
This commit is contained in:
parent
2751c0fff2
commit
89fbb6a060
@ -663,7 +663,6 @@ class UnitOfWorkTest extends OrmTestCase
|
||||
$this->assertCount(1, $persister3->getInserts());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This test exhibits the bug describe in the ticket, where an object that
|
||||
* ought to be reachable causes errors.
|
||||
@ -714,6 +713,47 @@ class UnitOfWorkTest extends OrmTestCase
|
||||
self::assertCount(1, $persister2->getInserts());
|
||||
self::assertCount(1, $persister3->getInserts());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This test exhibits the bug describe in the ticket, where an object that
|
||||
* ought to be reachable causes errors.
|
||||
*
|
||||
* @group DDC-2922
|
||||
* @group #1521
|
||||
*/
|
||||
public function testPreviousDetectedIllegalNewNonCascadedEntitiesAreCleanedUpOnSubsequentCommits()
|
||||
{
|
||||
$persister1 = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(CascadePersistedEntity::class));
|
||||
$persister2 = new EntityPersisterMock($this->_emMock, $this->_emMock->getClassMetadata(EntityWithNonCascadingAssociation::class));
|
||||
$this->_unitOfWork->setEntityPersister(CascadePersistedEntity::class, $persister1);
|
||||
$this->_unitOfWork->setEntityPersister(EntityWithNonCascadingAssociation::class, $persister2);
|
||||
|
||||
$cascadePersisted = new CascadePersistedEntity();
|
||||
$nonCascading = new EntityWithNonCascadingAssociation();
|
||||
|
||||
// We explicitly cause the ORM to detect a non-persisted new entity in the association graph:
|
||||
$nonCascading->nonCascaded = $cascadePersisted;
|
||||
|
||||
$this->_unitOfWork->persist($nonCascading);
|
||||
|
||||
try {
|
||||
$this->_unitOfWork->commit();
|
||||
|
||||
self::fail('An exception was supposed to be raised');
|
||||
} catch (ORMInvalidArgumentException $ignored) {
|
||||
self::assertEmpty($persister1->getInserts());
|
||||
self::assertEmpty($persister2->getInserts());
|
||||
}
|
||||
|
||||
$this->_unitOfWork->persist($cascadePersisted);
|
||||
$this->_unitOfWork->persist($nonCascading);
|
||||
$this->_unitOfWork->commit();
|
||||
|
||||
// Persistence operations should just recover normally:
|
||||
self::assertCount(1, $persister1->getInserts());
|
||||
self::assertCount(1, $persister2->getInserts());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
x
Reference in New Issue
Block a user