PostFlushEventTest.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. <?php
  2. namespace Doctrine\Tests\ORM\Functional;
  3. use Doctrine\Tests\Models\CMS\CmsUser;
  4. use Doctrine\ORM\Event\PostFlushEventArgs;
  5. use Doctrine\ORM\Events;
  6. require_once __DIR__ . '/../../TestInit.php';
  7. /**
  8. * PostFlushEventTest
  9. *
  10. * @author Daniel Freudenberger <df@rebuy.de>
  11. */
  12. class PostFlushEventTest extends \Doctrine\Tests\OrmFunctionalTestCase
  13. {
  14. /**
  15. * @var PostFlushListener
  16. */
  17. private $listener;
  18. protected function setUp()
  19. {
  20. $this->useModelSet('cms');
  21. parent::setUp();
  22. $this->listener = new PostFlushListener();
  23. $evm = $this->_em->getEventManager();
  24. $evm->addEventListener(Events::postFlush, $this->listener);
  25. }
  26. public function testListenerShouldBeNotified()
  27. {
  28. $this->_em->persist($this->createNewValidUser());
  29. $this->_em->flush();
  30. $this->assertTrue($this->listener->wasNotified);
  31. }
  32. public function testListenerShouldNotBeNotifiedWhenFlushThrowsException()
  33. {
  34. $user = new CmsUser();
  35. $user->username = 'dfreudenberger';
  36. $this->_em->persist($user);
  37. $exceptionRaised = false;
  38. try {
  39. $this->_em->flush();
  40. } catch (\Exception $ex) {
  41. $exceptionRaised = true;
  42. }
  43. $this->assertTrue($exceptionRaised);
  44. $this->assertFalse($this->listener->wasNotified);
  45. }
  46. public function testListenerShouldReceiveEntityManagerThroughArgs()
  47. {
  48. $this->_em->persist($this->createNewValidUser());
  49. $this->_em->flush();
  50. $receivedEm = $this->listener->receivedArgs->getEntityManager();
  51. $this->assertSame($this->_em, $receivedEm);
  52. }
  53. /**
  54. * @return CmsUser
  55. */
  56. private function createNewValidUser()
  57. {
  58. $user = new CmsUser();
  59. $user->username = 'dfreudenberger';
  60. $user->name = 'Daniel Freudenberger';
  61. return $user;
  62. }
  63. }
  64. class PostFlushListener
  65. {
  66. /**
  67. * @var bool
  68. */
  69. public $wasNotified = false;
  70. /**
  71. * @var PostFlushEventArgs
  72. */
  73. public $receivedArgs;
  74. /**
  75. * @param PostFlushEventArgs $args
  76. */
  77. public function postFlush(PostFlushEventArgs $args)
  78. {
  79. $this->wasNotified = true;
  80. $this->receivedArgs = $args;
  81. }
  82. }