ProcessUrlRewriteSavingObserverTest.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\CmsUrlRewrite\Test\Unit\Observer;
  7. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  8. use Magento\CmsUrlRewrite\Observer\ProcessUrlRewriteSavingObserver;
  9. use Magento\UrlRewrite\Model\UrlPersistInterface;
  10. use Magento\CmsUrlRewrite\Model\CmsPageUrlRewriteGenerator;
  11. use Magento\Framework\Event\Observer as EventObserver;
  12. use Magento\Framework\Event;
  13. use Magento\Cms\Model\Page;
  14. use Magento\UrlRewrite\Service\V1\Data\UrlRewrite;
  15. /**
  16. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  17. */
  18. class ProcessUrlRewriteSavingObserverTest extends \PHPUnit\Framework\TestCase
  19. {
  20. /**
  21. * @var ObjectManagerHelper
  22. */
  23. protected $objectManagerHelper;
  24. /**
  25. * @var UrlPersistInterface|\PHPUnit_Framework_MockObject_MockObject
  26. */
  27. protected $urlPersistMock;
  28. /**
  29. * @var CmsPageUrlRewriteGenerator|\PHPUnit_Framework_MockObject_MockObject
  30. */
  31. protected $cmsPageUrlRewriteGeneratorMock;
  32. /**
  33. * @var EventObserver|\PHPUnit_Framework_MockObject_MockObject
  34. */
  35. protected $eventObserverMock;
  36. /**
  37. * @var Page|\PHPUnit_Framework_MockObject_MockObject
  38. */
  39. protected $pageMock;
  40. /**
  41. * @var Event|\PHPUnit_Framework_MockObject_MockObject
  42. */
  43. protected $eventMock;
  44. /**
  45. * @var ProcessUrlRewriteSavingObserver
  46. */
  47. protected $observer;
  48. /**
  49. * @return void
  50. */
  51. protected function setUp()
  52. {
  53. $this->objectManagerHelper = new ObjectManagerHelper($this);
  54. $this->urlPersistMock = $this->getMockBuilder(UrlPersistInterface::class)
  55. ->getMockForAbstractClass();
  56. $this->cmsPageUrlRewriteGeneratorMock = $this->getMockBuilder(CmsPageUrlRewriteGenerator::class)
  57. ->disableOriginalConstructor()
  58. ->getMock();
  59. $this->pageMock = $this->getMockBuilder(Page::class)
  60. ->setMethods(['getId', 'dataHasChangedFor'])
  61. ->disableOriginalConstructor()
  62. ->getMock();
  63. $this->eventMock = $this->getMockBuilder(Event::class)
  64. ->setMethods(['getObject'])
  65. ->disableOriginalConstructor()
  66. ->getMock();
  67. $this->eventObserverMock = $this->getMockBuilder(EventObserver::class)
  68. ->disableOriginalConstructor()
  69. ->getMock();
  70. $this->eventObserverMock->expects($this->once())
  71. ->method('getEvent')
  72. ->willReturn($this->eventMock);
  73. $this->eventMock->expects($this->once())
  74. ->method('getObject')
  75. ->willReturn($this->pageMock);
  76. $this->observer = $this->objectManagerHelper->getObject(
  77. ProcessUrlRewriteSavingObserver::class,
  78. [
  79. 'cmsPageUrlRewriteGenerator' => $this->cmsPageUrlRewriteGeneratorMock,
  80. 'urlPersist' => $this->urlPersistMock,
  81. ]
  82. );
  83. }
  84. /**
  85. * @param bool $identifierChanged
  86. * @param bool $storeIdChanged
  87. * @return void
  88. * @dataProvider executeDataProvider
  89. */
  90. public function testExecute($identifierChanged, $storeIdChanged)
  91. {
  92. $pageId = 1;
  93. $urls = ['first url', 'second url'];
  94. $this->pageMock->expects($this->any())
  95. ->method('dataHasChangedFor')
  96. ->willReturnMap([
  97. ['identifier', $identifierChanged],
  98. ['store_id', $storeIdChanged],
  99. ]);
  100. $this->pageMock->expects($this->once())
  101. ->method('getId')
  102. ->willReturn($pageId);
  103. $this->cmsPageUrlRewriteGeneratorMock->expects($this->once())
  104. ->method('generate')
  105. ->with($this->pageMock)
  106. ->willReturn($urls);
  107. $this->urlPersistMock->expects($this->once())
  108. ->method('deleteByData')
  109. ->with([
  110. UrlRewrite::ENTITY_ID => $pageId,
  111. UrlRewrite::ENTITY_TYPE => CmsPageUrlRewriteGenerator::ENTITY_TYPE,
  112. ]);
  113. $this->urlPersistMock->expects($this->once())
  114. ->method('replace')
  115. ->with($urls);
  116. $this->observer->execute($this->eventObserverMock);
  117. }
  118. /**
  119. * return array
  120. */
  121. public function executeDataProvider()
  122. {
  123. return [
  124. ['identifier' => true, 'storeIdChanged' => true],
  125. ['identifier' => true, 'storeIdChanged' => false],
  126. ['identifier' => false, 'storeIdChanged' => true],
  127. ];
  128. }
  129. /**
  130. * @return void
  131. */
  132. public function testExecuteWithoutDataChanged()
  133. {
  134. $this->pageMock->expects($this->any())
  135. ->method('dataHasChangedFor')
  136. ->willReturnMap([
  137. ['identifier', false],
  138. ['store_id', false],
  139. ]);
  140. $this->pageMock->expects($this->never())
  141. ->method('getId');
  142. $this->cmsPageUrlRewriteGeneratorMock->expects($this->never())
  143. ->method('generate');
  144. $this->urlPersistMock->expects($this->never())
  145. ->method('deleteByData');
  146. $this->urlPersistMock->expects($this->never())
  147. ->method('replace');
  148. $this->observer->execute($this->eventObserverMock);
  149. }
  150. }