PageTest.php 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Cms\Test\Unit\Model;
  7. use Magento\Cms\Model\Page;
  8. use Magento\Framework\App\Config\ScopeConfigInterface;
  9. use Magento\Framework\Event\ManagerInterface;
  10. use Magento\Framework\Model\Context;
  11. use Magento\Cms\Model\ResourceModel\Page as PageResource;
  12. use Magento\Framework\Model\ResourceModel\AbstractResource;
  13. /**
  14. * @covers \Magento\Cms\Model\Page
  15. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  16. */
  17. class PageTest extends \PHPUnit\Framework\TestCase
  18. {
  19. /**
  20. * @var \Magento\Cms\Model\Page
  21. */
  22. protected $model;
  23. /**
  24. * @var \Magento\Backend\Block\Template\Context|\PHPUnit_Framework_MockObject_MockObject
  25. */
  26. protected $contextMock;
  27. /**
  28. * @var ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
  29. */
  30. protected $eventManagerMock;
  31. /**
  32. * @var PageResource|\PHPUnit_Framework_MockObject_MockObject
  33. */
  34. protected $resourcePageMock;
  35. /**
  36. * @var AbstractResource|\PHPUnit_Framework_MockObject_MockObject
  37. */
  38. protected $resourcesMock;
  39. /**
  40. * @var ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
  41. */
  42. protected $scopeConfigMock;
  43. protected function setUp()
  44. {
  45. $this->eventManagerMock = $this->getMockBuilder(ManagerInterface::class)
  46. ->disableOriginalConstructor()
  47. ->getMock();
  48. $this->contextMock = $this->getMockBuilder(Context::class)
  49. ->disableOriginalConstructor()
  50. ->getMock();
  51. $this->resourcePageMock = $this->getMockBuilder(PageResource::class)
  52. ->disableOriginalConstructor()
  53. ->setMethods(['getIdFieldName', 'checkIdentifier', 'getResources'])
  54. ->getMock();
  55. $this->eventManagerMock = $this->getMockBuilder(ManagerInterface::class)
  56. ->disableOriginalConstructor()
  57. ->getMock();
  58. $this->resourcesMock = $this->getMockBuilder(AbstractResource::class)
  59. ->setMethods(['getIdFieldName', 'load', 'checkIdentifier'])
  60. ->getMockForAbstractClass();
  61. $this->scopeConfigMock = $this->getMockBuilder(ScopeConfigInterface::class)
  62. ->getMockForAbstractClass();
  63. $this->contextMock->expects($this->any())
  64. ->method('getEventDispatcher')
  65. ->willReturn($this->eventManagerMock);
  66. $this->resourcePageMock->expects($this->any())
  67. ->method('getResources')
  68. ->willReturn($this->resourcesMock);
  69. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  70. $this->model = $objectManager->getObject(
  71. Page::class,
  72. [
  73. 'context' => $this->contextMock,
  74. 'resource' => $this->resourcesMock,
  75. ]
  76. );
  77. $objectManager->setBackwardCompatibleProperty(
  78. $this->model,
  79. 'scopeConfig',
  80. $this->scopeConfigMock
  81. );
  82. }
  83. /**
  84. * @covers \Magento\Cms\Model\Page::noRoutePage
  85. */
  86. public function testNoRoutePage()
  87. {
  88. $this->assertEquals($this->model, $this->model->noRoutePage());
  89. }
  90. /**
  91. * @covers \Magento\Cms\Model\Page::checkIdentifier
  92. */
  93. public function testCheckIdentifier()
  94. {
  95. $identifier = 1;
  96. $storeId = 2;
  97. $fetchOneResult = 'some result';
  98. $this->resourcesMock->expects($this->atLeastOnce())
  99. ->method('checkIdentifier')
  100. ->with($identifier, $storeId)
  101. ->willReturn($fetchOneResult);
  102. $this->assertInternalType('string', $this->model->checkIdentifier($identifier, $storeId));
  103. }
  104. /**
  105. * @expectedException \Magento\Framework\Exception\LocalizedException
  106. * @expectedExceptionMessage This identifier is reserved for "CMS No Route Page" in configuration.
  107. */
  108. public function testBeforeSave404Identifier()
  109. {
  110. $this->model->setId(1);
  111. $this->model->setOrigData('identifier', 'no-route');
  112. $this->model->setIdentifier('no-route2');
  113. $this->scopeConfigMock->expects($this->once())
  114. ->method('getValue')
  115. ->willReturnMap(
  116. [
  117. [
  118. \Magento\Cms\Helper\Page::XML_PATH_NO_ROUTE_PAGE,
  119. ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
  120. null,
  121. 'no-route'
  122. ]
  123. ]
  124. );
  125. $this->model->beforeSave();
  126. }
  127. /**
  128. * @expectedException \Magento\Framework\Exception\LocalizedException
  129. * @expectedExceptionMessage This identifier is reserved for "CMS Home Page" in configuration.
  130. */
  131. public function testBeforeSaveHomeIdentifier()
  132. {
  133. $this->model->setId(1);
  134. $this->model->setOrigData('identifier', 'home');
  135. $this->model->setIdentifier('home2');
  136. $this->scopeConfigMock->expects($this->atLeastOnce())
  137. ->method('getValue')
  138. ->willReturnMap(
  139. [
  140. [
  141. \Magento\Cms\Helper\Page::XML_PATH_HOME_PAGE,
  142. ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
  143. null,
  144. 'home'
  145. ]
  146. ]
  147. );
  148. $this->model->beforeSave();
  149. }
  150. /**
  151. * @expectedException \Magento\Framework\Exception\LocalizedException
  152. * @expectedExceptionMessage This identifier is reserved for "CMS No Cookies Page" in configuration.
  153. */
  154. public function testBeforeSaveNoCookiesIdentifier()
  155. {
  156. $this->model->setId(1);
  157. $this->model->setOrigData('identifier', 'no-cookies');
  158. $this->model->setIdentifier('no-cookies2');
  159. $this->scopeConfigMock->expects($this->atLeastOnce())
  160. ->method('getValue')
  161. ->willReturnMap(
  162. [
  163. [
  164. \Magento\Cms\Helper\Page::XML_PATH_NO_COOKIES_PAGE,
  165. ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
  166. null,
  167. 'no-cookies'
  168. ]
  169. ]
  170. );
  171. $this->model->beforeSave();
  172. }
  173. }