1
0
mirror of synced 2025-02-20 22:23:14 +03:00

Adding failing test for DDC-2230

Proxies that implement the Doctrine\Common\PropertyChangedListener are getting eagerly
initialized because the UnitOfWork injects itself into them after they are created.
The test currently fails for what described above, and also verifies if the UoW
is correctly injected in the proxy during lazy loading.
This commit is contained in:
Marco Pivetta 2013-02-23 01:44:58 +01:00
parent 97ff197198
commit be24439e2f

View File

@ -0,0 +1,102 @@
<?php
namespace Doctrine\Tests\ORM\Functional\Ticket;
use Doctrine\Common\NotifyPropertyChanged;
use Doctrine\Common\PropertyChangedListener;
use Doctrine\ORM\Tools\ToolsException;
use Doctrine\Tests\OrmFunctionalTestCase;
/**
* @group DDC-2230
*/
class DDC2230Test extends OrmFunctionalTestCase
{
protected function setup()
{
parent::setup();
try {
$this->_schemaTool->createSchema(array(
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2230User'),
$this->_em->getClassMetadata(__NAMESPACE__ . '\DDC2230Address'),
));
} catch (ToolsException $e) {}
}
public function testNotifyTrackingNotCalledOnUninitializedProxies()
{
$insertedUser = new DDC2230User();
$insertedUser->address = new DDC2230Address();
$this->_em->persist($insertedUser);
$this->_em->persist($insertedUser->address);
$this->_em->flush();
$this->_em->clear();
$user = $this->_em->find(__NAMESPACE__ . '\\DDC2230User', $insertedUser->id);
$this->_em->clear();
$mergedUser = $this->_em->merge($user);
/* @var $address \Doctrine\Common\Proxy\Proxy */
$address = $mergedUser->address;
$this->assertInstanceOf('Doctrine\\ORM\\Proxy\\Proxy', $address);
$this->assertFalse($address->__isInitialized());
}
public function testNotifyTrackingCalledOnProxyInitialization()
{
$insertedAddress = new DDC2230Address();
$this->_em->persist($insertedAddress);
$this->_em->flush();
$this->_em->clear();
$addressProxy = $this->_em->getReference(__NAMESPACE__ . '\\DDC2230Address', $insertedAddress->id);
/* @var $addressProxy \Doctrine\Common\Proxy\Proxy|\Doctrine\Tests\ORM\Functional\Ticket\DDC2230Address */
$this->assertFalse($addressProxy->__isInitialized());
$this->assertNull($addressProxy->listener);
$addressProxy->__load();
$this->assertSame($this->_em->getUnitOfWork(), $addressProxy->listener);
}
}
/** @Entity */
class DDC2230User
{
/** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */
public $id;
/**
* @OneToOne(targetEntity="DDC2230Address")
*/
public $address;
}
/**
* @Entity
* @ChangeTrackingPolicy("NOTIFY")
*/
class DDC2230Address implements NotifyPropertyChanged
{
/** @Id @Column(type="integer") @GeneratedValue(strategy="AUTO") */
public $id;
/**
* @var \Doctrine\Common\PropertyChangedListener
*/
public $listener;
/** {@inheritDoc} */
function addPropertyChangedListener(PropertyChangedListener $listener)
{
$this->listener = $listener;
}
}