| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 | 
							- <?php
 - 
 - namespace Doctrine\Tests\ORM\Functional;
 - use Doctrine\ORM\Event\PreUpdateEventArgs;
 - 
 - require_once __DIR__ . '/../../TestInit.php';
 - 
 - class LifecycleCallbackTest extends \Doctrine\Tests\OrmFunctionalTestCase
 - {
 -     protected function setUp() {
 -         parent::setUp();
 -         try {
 -             $this->_schemaTool->createSchema(array(
 -                 $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\LifecycleCallbackTestEntity'),
 -                 $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\LifecycleCallbackTestUser'),
 -                 $this->_em->getClassMetadata('Doctrine\Tests\ORM\Functional\LifecycleCallbackCascader'),
 -             ));
 -         } catch (\Exception $e) {
 -             // Swallow all exceptions. We do not test the schema tool here.
 -         }
 -     }
 -     
 -     public function testPreSavePostSaveCallbacksAreInvoked()
 -     {        
 -         $entity = new LifecycleCallbackTestEntity;
 -         $entity->value = 'hello';
 -         $this->_em->persist($entity);
 -         $this->_em->flush();
 -         
 -         $this->assertTrue($entity->prePersistCallbackInvoked);
 -         $this->assertTrue($entity->postPersistCallbackInvoked);
 -         
 -         $this->_em->clear();
 -         
 -         $query = $this->_em->createQuery("select e from Doctrine\Tests\ORM\Functional\LifecycleCallbackTestEntity e");
 -         $result = $query->getResult();
 -         $this->assertTrue($result[0]->postLoadCallbackInvoked);
 -         
 -         $result[0]->value = 'hello again';
 -         
 -         $this->_em->flush();
 -         
 -         $this->assertEquals('changed from preUpdate callback!', $result[0]->value);
 -     }
 -     
 -     public function testChangesDontGetLost()
 -     {
 -         $user = new LifecycleCallbackTestUser;
 -         $user->setName('Bob');
 -         $user->setValue('value');
 -         $this->_em->persist($user);
 -         $this->_em->flush();
 -         
 -         $user->setName('Alice');
 -         $this->_em->flush(); // Triggers preUpdate
 -         
 -         $this->_em->clear();
 -         
 -         $user2 = $this->_em->find(get_class($user), $user->getId());
 -         
 -         $this->assertEquals('Alice', $user2->getName());
 -         $this->assertEquals('Hello World', $user2->getValue());
 -     }
 - 
 -     /**
 -      * @group DDC-194
 -      */
 -     public function testGetReferenceWithPostLoadEventIsDelayedUntilProxyTrigger()
 -     {
 -         $entity = new LifecycleCallbackTestEntity;
 -         $entity->value = 'hello';
 -         $this->_em->persist($entity);
 -         $this->_em->flush();
 -         $id = $entity->getId();
 - 
 -         $this->_em->clear();
 - 
 -         $reference = $this->_em->getReference('Doctrine\Tests\ORM\Functional\LifecycleCallbackTestEntity', $id);
 -         $this->assertFalse($reference->postLoadCallbackInvoked);
 - 
 -         $reference->getId(); // trigger proxy load
 -         $this->assertTrue($reference->postLoadCallbackInvoked);
 -     }
 - 
 -     /**
 -      * @group DDC-958
 -      */
 -     public function testPostLoadTriggeredOnRefresh()
 -     {
 -         $entity = new LifecycleCallbackTestEntity;
 -         $entity->value = 'hello';
 -         $this->_em->persist($entity);
 -         $this->_em->flush();
 -         $id = $entity->getId();
 - 
 -         $this->_em->clear();
 - 
 -         $reference = $this->_em->find('Doctrine\Tests\ORM\Functional\LifecycleCallbackTestEntity', $id);
 -         $this->assertTrue($reference->postLoadCallbackInvoked);
 -         $reference->postLoadCallbackInvoked = false;
 - 
 -         $this->_em->refresh($reference);
 -         $this->assertTrue($reference->postLoadCallbackInvoked, "postLoad should be invoked when refresh() is called.");
 -     }
 - 
 -     /**
 -      * @group DDC-113
 -      */
 -     public function testCascadedEntitiesCallsPrePersist()
 -     {
 -         //$this->_em->getConnection()->getConfiguration()->setSQLLogger(new \Doctrine\DBAL\Logging\EchoSQLLogger);
 -         
 -         $e1 = new LifecycleCallbackTestEntity;
 -         $e2 = new LifecycleCallbackTestEntity;
 - 
 -         $c = new LifecycleCallbackCascader();
 -         $this->_em->persist($c);
 -         
 -         $c->entities[] = $e1;
 -         $c->entities[] = $e2;
 -         $e1->cascader = $c;
 -         $e2->cascader = $c;
 -         
 -         //$this->_em->persist($c);
 -         $this->_em->flush();
 - 
 -         $this->assertTrue($e1->prePersistCallbackInvoked);
 -         $this->assertTrue($e2->prePersistCallbackInvoked);
 -     }
 -     
 -     public function testLifecycleCallbacksGetInherited()
 -     {
 -         $childMeta = $this->_em->getClassMetadata(__NAMESPACE__ . '\LifecycleCallbackChildEntity');
 -         $this->assertEquals(array('prePersist' => array(0 => 'doStuff')), $childMeta->lifecycleCallbacks);
 -     }
 - 
 -     public function testLifecycleListener_ChangeUpdateChangeSet()
 -     {
 -         $listener = new LifecycleListenerPreUpdate;
 -         $this->_em->getEventManager()->addEventListener(array('preUpdate'), $listener);
 - 
 -         $user = new LifecycleCallbackTestUser;
 -         $user->setName('Bob');
 -         $user->setValue('value');
 -         $this->_em->persist($user);
 -         $this->_em->flush();
 -         $this->_em->clear();
 - 
 -         $dql = "SELECT u FROM Doctrine\Tests\ORM\Functional\LifecycleCallbackTestUser u WHERE u.name = 'Bob'";
 -         $bob = $this->_em->createQuery($dql)->getSingleResult();
 -         $bob->setName('Alice');
 - 
 -         $this->_em->flush(); // preUpdate reverts Alice to Bob
 -         $this->_em->clear();
 - 
 -         $this->_em->getEventManager()->removeEventListener(array('preUpdate'), $listener);
 - 
 -         $bob = $this->_em->createQuery($dql)->getSingleResult();
 - 
 -         $this->assertEquals('Bob', $bob->getName());
 -     }
 - }
 - 
 - /** @Entity @HasLifecycleCallbacks */
 - class LifecycleCallbackTestUser {
 -     /** @Id @Column(type="integer") @GeneratedValue */
 -     private $id;
 -     /** @Column(type="string") */
 -     private $value;
 -     /** @Column(type="string") */
 -     private $name;
 -     public function getId() {return $this->id;}
 -     public function getValue() {return $this->value;}
 -     public function setValue($value) {$this->value = $value;}
 -     public function getName() {return $this->name;}
 -     public function setName($name) {$this->name = $name;}
 -     /** @PreUpdate */
 -     public function testCallback() {$this->value = 'Hello World';}
 - }
 - 
 - /**
 -  * @Entity
 -  * @HasLifecycleCallbacks
 -  * @Table(name="lc_cb_test_entity")
 -  */
 - class LifecycleCallbackTestEntity
 - {
 -     /* test stuff */
 -     public $prePersistCallbackInvoked = false;
 -     public $postPersistCallbackInvoked = false;
 -     public $postLoadCallbackInvoked = false;
 -     
 -     /**
 -      * @Id @Column(type="integer")
 -      * @GeneratedValue(strategy="AUTO")
 -      */
 -     private $id;
 -     /**
 -      * @Column(type="string", nullable=true)
 -      */
 -     public $value;
 - 
 -     /**
 -      * @ManyToOne(targetEntity="LifecycleCallbackCascader")
 -      * @JoinColumn(name="cascader_id", referencedColumnName="id")
 -      */
 -     public $cascader;
 - 
 -     public function getId() {
 -         return $this->id;
 -     }
 -     
 -     /** @PrePersist */
 -     public function doStuffOnPrePersist() {
 -         $this->prePersistCallbackInvoked = true;
 -     }
 -     
 -     /** @PostPersist */
 -     public function doStuffOnPostPersist() {
 -         $this->postPersistCallbackInvoked = true;
 -     }
 -     
 -     /** @PostLoad */
 -     public function doStuffOnPostLoad() {
 -         $this->postLoadCallbackInvoked = true;
 -     }
 -     
 -     /** @PreUpdate */
 -     public function doStuffOnPreUpdate() {
 -         $this->value = 'changed from preUpdate callback!';
 -     }
 - }
 - 
 - /**
 -  * @Entity
 -  * @Table(name="lc_cb_test_cascade")
 -  */
 - class LifecycleCallbackCascader
 - {
 -     /**
 -      * @Id @Column(type="integer")
 -      * @GeneratedValue(strategy="AUTO")
 -      */
 -     private $id;
 - 
 -     /**
 -      * @OneToMany(targetEntity="LifecycleCallbackTestEntity", mappedBy="cascader", cascade={"persist"})
 -      */
 -     public $entities;
 - 
 -     public function __construct()
 -     {
 -         $this->entities = new \Doctrine\Common\Collections\ArrayCollection();
 -     }
 - }
 - 
 - /** @MappedSuperclass @HasLifecycleCallbacks */
 - class LifecycleCallbackParentEntity {
 -     /** @PrePersist */
 -     function doStuff() {
 -         
 -     }
 - }
 - 
 - /** @Entity @Table(name="lc_cb_childentity") */
 - class LifecycleCallbackChildEntity extends LifecycleCallbackParentEntity {
 -     /** @Id @Column(type="integer") @GeneratedValue */
 -     private $id;
 - }
 - 
 - class LifecycleListenerPreUpdate
 - {
 -     public function preUpdate(PreUpdateEventArgs $eventArgs)
 -     {
 -         $eventArgs->setNewValue('name', 'Bob');
 -     }
 - }
 
 
  |