Cherry pick unit test from PR #5570 (Fix PrePersist EventListener when using merge instead of persist)
This commit is contained in:
parent
25efabdb74
commit
295523cdca
@ -4,19 +4,23 @@ namespace Doctrine\Tests\Models\Company;
|
|||||||
|
|
||||||
class CompanyContractListener
|
class CompanyContractListener
|
||||||
{
|
{
|
||||||
|
const PRE_PERSIST = 0;
|
||||||
|
|
||||||
public $postPersistCalls;
|
public $postPersistCalls;
|
||||||
public $prePersistCalls;
|
public $prePersistCalls;
|
||||||
|
|
||||||
public $postUpdateCalls;
|
public $postUpdateCalls;
|
||||||
public $preUpdateCalls;
|
public $preUpdateCalls;
|
||||||
|
|
||||||
public $postRemoveCalls;
|
public $postRemoveCalls;
|
||||||
public $preRemoveCalls;
|
public $preRemoveCalls;
|
||||||
|
|
||||||
public $preFlushCalls;
|
public $preFlushCalls;
|
||||||
|
|
||||||
public $postLoadCalls;
|
public $postLoadCalls;
|
||||||
|
|
||||||
|
public $snapshots = [];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @PostPersist
|
* @PostPersist
|
||||||
*/
|
*/
|
||||||
@ -30,6 +34,7 @@ class CompanyContractListener
|
|||||||
*/
|
*/
|
||||||
public function prePersistHandler(CompanyContract $contract)
|
public function prePersistHandler(CompanyContract $contract)
|
||||||
{
|
{
|
||||||
|
$this->snapshots[self::PRE_PERSIST][] = $this->takeSnapshot($contract);
|
||||||
$this->prePersistCalls[] = func_get_args();
|
$this->prePersistCalls[] = func_get_args();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -81,4 +86,20 @@ class CompanyContractListener
|
|||||||
$this->postLoadCalls[] = func_get_args();
|
$this->postLoadCalls[] = func_get_args();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function takeSnapshot(CompanyContract $contract)
|
||||||
|
{
|
||||||
|
$snapshot = [];
|
||||||
|
$reflexion = new \ReflectionClass($contract);
|
||||||
|
foreach ($reflexion->getProperties() as $property) {
|
||||||
|
$property->setAccessible(true);
|
||||||
|
$value = $property->getValue($contract);
|
||||||
|
if (is_object($value) || is_array($value)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$snapshot[$property->getName()] = $property->getValue($contract);
|
||||||
|
}
|
||||||
|
|
||||||
|
return $snapshot;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -2,17 +2,28 @@
|
|||||||
|
|
||||||
namespace Doctrine\Tests\ORM\Functional;
|
namespace Doctrine\Tests\ORM\Functional;
|
||||||
|
|
||||||
|
use Doctrine\Tests\Models\Company\CompanyContractListener;
|
||||||
|
use Doctrine\Tests\Models\Company\CompanyFixContract;
|
||||||
use Doctrine\Tests\Models\DDC3597\DDC3597Image;
|
use Doctrine\Tests\Models\DDC3597\DDC3597Image;
|
||||||
use Doctrine\Tests\Models\DDC3597\DDC3597Media;
|
use Doctrine\Tests\Models\DDC3597\DDC3597Media;
|
||||||
use Doctrine\Tests\Models\DDC3597\DDC3597Root;
|
use Doctrine\Tests\Models\DDC3597\DDC3597Root;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @group DDC-1955
|
||||||
*/
|
*/
|
||||||
class EntityListenersOnMergeTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
class EntityListenersOnMergeTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var \Doctrine\Tests\Models\Company\CompanyContractListener
|
||||||
|
*/
|
||||||
|
private $listener;
|
||||||
|
|
||||||
protected function setUp()
|
protected function setUp()
|
||||||
{
|
{
|
||||||
|
$this->useModelSet('company');
|
||||||
parent::setUp();
|
parent::setUp();
|
||||||
|
|
||||||
$this->_schemaTool->createSchema(
|
$this->_schemaTool->createSchema(
|
||||||
[
|
[
|
||||||
$this->_em->getClassMetadata(DDC3597Root::class),
|
$this->_em->getClassMetadata(DDC3597Root::class),
|
||||||
@ -20,6 +31,10 @@ class EntityListenersOnMergeTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$this->_em->getClassMetadata(DDC3597Image::class),
|
$this->_em->getClassMetadata(DDC3597Image::class),
|
||||||
]
|
]
|
||||||
);
|
);
|
||||||
|
|
||||||
|
$this->listener = $this->_em->getConfiguration()
|
||||||
|
->getEntityListenerResolver()
|
||||||
|
->resolve('Doctrine\Tests\Models\Company\CompanyContractListener');
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function tearDown()
|
protected function tearDown()
|
||||||
@ -47,4 +62,35 @@ class EntityListenersOnMergeTest extends \Doctrine\Tests\OrmFunctionalTestCase
|
|||||||
$this->assertNotNull($imageEntity->getCreatedAt());
|
$this->assertNotNull($imageEntity->getCreatedAt());
|
||||||
$this->assertNotNull($imageEntity->getUpdatedAt());
|
$this->assertNotNull($imageEntity->getUpdatedAt());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testPrePersistListeners()
|
||||||
|
{
|
||||||
|
$fix = new CompanyFixContract();
|
||||||
|
$fix->setFixPrice(2000);
|
||||||
|
|
||||||
|
$this->listener->prePersistCalls = [];
|
||||||
|
|
||||||
|
$fix = $this->_em->merge($fix);
|
||||||
|
$this->_em->flush();
|
||||||
|
|
||||||
|
$this->assertCount(1, $this->listener->prePersistCalls);
|
||||||
|
|
||||||
|
$this->assertSame($fix, $this->listener->prePersistCalls[0][0]);
|
||||||
|
|
||||||
|
$this->assertInstanceOf(
|
||||||
|
'Doctrine\Tests\Models\Company\CompanyFixContract',
|
||||||
|
$this->listener->prePersistCalls[0][0]
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertInstanceOf(
|
||||||
|
'Doctrine\ORM\Event\LifecycleEventArgs',
|
||||||
|
$this->listener->prePersistCalls[0][1]
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertArrayHasKey('fixPrice', $this->listener->snapshots[CompanyContractListener::PRE_PERSIST][0]);
|
||||||
|
$this->assertEquals(
|
||||||
|
$fix->getFixPrice(),
|
||||||
|
$this->listener->snapshots[CompanyContractListener::PRE_PERSIST][0]['fixPrice']
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user