CollectionTest.php 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Event\Test\Unit\Observer;
  7. use \Magento\Framework\Event\Observer\Collection;
  8. /**
  9. * Class CollectionTest
  10. */
  11. class CollectionTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * @var Collection
  15. */
  16. protected $observerCollection;
  17. protected function setUp()
  18. {
  19. $this->observerCollection = new Collection();
  20. }
  21. protected function tearDown()
  22. {
  23. $this->observerCollection = null;
  24. }
  25. /**
  26. * Create universal observer mock.
  27. * If event parameter is passed - observer mock expects dispatch method to be called with passed event.
  28. *
  29. * @param string $name
  30. * @param \Magento\Framework\Event | null $event
  31. * @return \Magento\Framework\Event\Observer |\PHPUnit_Framework_MockObject_MockObject
  32. */
  33. protected function getObserverMock($name, $event = null)
  34. {
  35. $observer = $this->createMock(\Magento\Framework\Event\Observer::class);
  36. $observer->expects($this->any())
  37. ->method('getName')
  38. ->will($this->returnValue($name));
  39. if ($event) {
  40. $observer->expects($this->once())
  41. ->method('dispatch')
  42. ->with($event);
  43. }
  44. return $observer;
  45. }
  46. public function testAddObserver()
  47. {
  48. $observer = $this->getObserverMock('test_observer');
  49. $this->observerCollection->addObserver($observer);
  50. $this->assertEquals($observer, $this->observerCollection->getObserverByName($observer->getName()));
  51. }
  52. public function testGetAllObservers()
  53. {
  54. $observer1 = $this->getObserverMock('test_observer1');
  55. $observer2 = $this->getObserverMock('test_observer2');
  56. $this->observerCollection->addObserver($observer1);
  57. $this->observerCollection->addObserver($observer2);
  58. $this->assertEquals(
  59. ['test_observer1' => $observer1, 'test_observer2' => $observer2],
  60. $this->observerCollection->getAllObservers()
  61. );
  62. }
  63. /**
  64. * @dataProvider observerNameProvider
  65. * @param string $name
  66. */
  67. public function testGetObserverByName($name)
  68. {
  69. $observer = $this->getObserverMock($name);
  70. $this->observerCollection->addObserver($observer);
  71. $this->assertEquals($observer, $this->observerCollection->getObserverByName($name));
  72. }
  73. /**
  74. * @return array
  75. */
  76. public function observerNameProvider()
  77. {
  78. return [
  79. ['simple_name'],
  80. ['1234567890'],
  81. ['~!@#$%^&*()_=-}{}'],
  82. ['DjnJ2139540___ asdf']
  83. ];
  84. }
  85. public function testRemoveObserverByName()
  86. {
  87. $observer1 = $this->getObserverMock('test_observer1');
  88. $observer2 = $this->getObserverMock('test_observer2');
  89. $this->observerCollection->addObserver($observer1);
  90. $this->observerCollection->addObserver($observer2);
  91. $this->assertEquals(
  92. ['test_observer1' => $observer1, 'test_observer2' => $observer2],
  93. $this->observerCollection->getAllObservers()
  94. );
  95. $this->observerCollection->removeObserverByName($observer2->getName());
  96. $this->assertEquals(['test_observer1' => $observer1], $this->observerCollection->getAllObservers());
  97. }
  98. public function testDispatch()
  99. {
  100. $eventMock = $this->createMock(\Magento\Framework\Event::class);
  101. $observer1 = $this->getObserverMock('test_observer1', $eventMock);
  102. $observer2 = $this->getObserverMock('test_observer2', $eventMock);
  103. $this->observerCollection->addObserver($observer1);
  104. $this->observerCollection->addObserver($observer2);
  105. $this->observerCollection->dispatch($eventMock);
  106. }
  107. }