ConfigTest.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314
  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\Wysiwyg;
  7. /**
  8. * @covers \Magento\Cms\Model\Wysiwyg\Config
  9. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  10. */
  11. class ConfigTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * @var \Magento\Cms\Model\Wysiwyg\Config
  15. */
  16. protected $wysiwygConfig;
  17. /**
  18. * @var \Magento\Backend\Model\UrlInterface|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $backendUrlMock;
  21. /**
  22. * @var \Magento\Framework\View\Asset\Repository|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. protected $assetRepoMock;
  25. /**
  26. * @var \Magento\Framework\AuthorizationInterface|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. protected $authorizationMock;
  29. /**
  30. * @var \Magento\Variable\Model\Variable\Config|\PHPUnit_Framework_MockObject_MockObject
  31. */
  32. protected $variableConfigMock;
  33. /**
  34. * @var \Magento\Widget\Model\Widget\Config|\PHPUnit_Framework_MockObject_MockObject
  35. */
  36. protected $widgetConfigMock;
  37. /**
  38. * @var \Magento\Framework\App\Config\ScopeConfigInterface|\PHPUnit_Framework_MockObject_MockObject
  39. */
  40. protected $scopeConfigMock;
  41. /**
  42. * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
  43. */
  44. protected $storeManagerMock;
  45. /**
  46. * @var \Magento\Store\Model\Store|\PHPUnit_Framework_MockObject_MockObject
  47. */
  48. protected $storeMock;
  49. /**
  50. * @var \Magento\Framework\View\Asset\File|\PHPUnit_Framework_MockObject_MockObject
  51. */
  52. protected $assetFileMock;
  53. /**
  54. * @var \Magento\Framework\Filesystem|\PHPUnit_Framework_MockObject_MockObject
  55. */
  56. protected $filesystemMock;
  57. /**
  58. * @var \Magento\Cms\Model\Wysiwyg\CompositeConfigProvider
  59. */
  60. private $configProvider;
  61. /**
  62. * @var array
  63. */
  64. protected $windowSize = [];
  65. protected function setUp()
  66. {
  67. $this->filesystemMock = $this->createMock(\Magento\Framework\Filesystem::class);
  68. $this->backendUrlMock = $this->getMockBuilder(\Magento\Backend\Model\UrlInterface::class)
  69. ->disableOriginalConstructor()
  70. ->getMock();
  71. $this->assetRepoMock = $this->getMockBuilder(\Magento\Framework\View\Asset\Repository::class)
  72. ->disableOriginalConstructor()
  73. ->getMock();
  74. $this->authorizationMock = $this->getMockBuilder(\Magento\Framework\AuthorizationInterface::class)
  75. ->disableOriginalConstructor()
  76. ->getMock();
  77. $this->variableConfigMock = $this->getMockBuilder(\Magento\Variable\Model\Variable\Config::class)
  78. ->disableOriginalConstructor()
  79. ->getMock();
  80. $this->widgetConfigMock = $this->getMockBuilder(\Magento\Widget\Model\Widget\Config::class)
  81. ->disableOriginalConstructor()
  82. ->getMock();
  83. $this->scopeConfigMock = $this->getMockBuilder(\Magento\Framework\App\Config\ScopeConfigInterface::class)
  84. ->disableOriginalConstructor()
  85. ->getMock();
  86. $this->storeManagerMock = $this->getMockBuilder(\Magento\Store\Model\StoreManagerInterface::class)
  87. ->disableOriginalConstructor()
  88. ->getMock();
  89. $this->storeMock = $this->getMockBuilder(\Magento\Store\Model\Store::class)
  90. ->disableOriginalConstructor()
  91. ->getMock();
  92. $this->assetFileMock = $this->getMockBuilder(\Magento\Framework\View\Asset\File::class)
  93. ->disableOriginalConstructor()
  94. ->getMock();
  95. $this->windowSize = [
  96. 'width' => 1200,
  97. 'height' => 800,
  98. ];
  99. $defaultConfigProvider = new \Magento\Cms\Model\WysiwygDefaultConfig();
  100. $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  101. $configProviderFactory = $this->getMockBuilder(\Magento\Cms\Model\Wysiwyg\ConfigProviderFactory::class)
  102. ->disableOriginalConstructor()
  103. ->getMock();
  104. $configProviderFactory->expects($this->any())->method('create')->willReturn($defaultConfigProvider);
  105. $this->configProvider = $this->getMockBuilder(\Magento\Cms\Model\Wysiwyg\CompositeConfigProvider::class)
  106. ->enableOriginalConstructor()
  107. ->setConstructorArgs(
  108. [
  109. 'activeEditor' => $this->getMockBuilder(\Magento\Ui\Block\Wysiwyg\ActiveEditor::class)
  110. ->disableOriginalConstructor()->getMock(),
  111. 'configProviderFactory' => $configProviderFactory,
  112. 'variablePluginConfigProvider' => ['default' => \Magento\Cms\Model\WysiwygDefaultConfig::class],
  113. 'widgetPluginConfigProvider' => ['default' => \Magento\Cms\Model\WysiwygDefaultConfig::class],
  114. 'wysiwygConfigPostProcessor' => ['default' => \Magento\Cms\Model\WysiwygDefaultConfig::class],
  115. 'galleryConfigProvider' => ['default' => \Magento\Cms\Model\WysiwygDefaultConfig::class],
  116. ]
  117. )
  118. ->setMethods(['processVariableConfig', 'processWidgetConfig'])
  119. ->getMock();
  120. $this->wysiwygConfig = $objectManager->getObject(
  121. \Magento\Cms\Model\Wysiwyg\Config::class,
  122. [
  123. 'backendUrl' => $this->backendUrlMock,
  124. 'assetRepo' => $this->assetRepoMock,
  125. 'authorization' => $this->authorizationMock,
  126. 'variableConfig' => $this->variableConfigMock,
  127. 'widgetConfig' => $this->widgetConfigMock,
  128. 'scopeConfig' => $this->scopeConfigMock,
  129. 'windowSize' => $this->windowSize,
  130. 'storeManager' => $this->storeManagerMock,
  131. 'filesystem' => $this->filesystemMock,
  132. 'configProvider' => $this->configProvider
  133. ]
  134. );
  135. }
  136. /**
  137. * @covers \Magento\Cms\Model\Wysiwyg\Config::getConfig
  138. * @param array $data
  139. * @param boolean $isAuthorizationAllowed
  140. * @param array $expectedResults
  141. *
  142. * @dataProvider getConfigDataProvider
  143. */
  144. public function testGetConfig($data, $isAuthorizationAllowed, $expectedResults)
  145. {
  146. $this->backendUrlMock->expects($this->atLeastOnce())
  147. ->method('getUrl')
  148. ->withConsecutive(
  149. ['cms/wysiwyg/directive'],
  150. ['cms/wysiwyg_images/index']
  151. );
  152. $this->backendUrlMock->expects($this->once())
  153. ->method('getBaseUrl')
  154. ->willReturn('localhost/index.php/');
  155. $this->filesystemMock->expects($this->once())
  156. ->method('getUri')
  157. ->willReturn('pub/static');
  158. /** @var \Magento\Framework\View\Asset\ContextInterface|\PHPUnit_Framework_MockObject_MockObject $contextMock */
  159. $contextMock = $this->createMock(\Magento\Framework\View\Asset\ContextInterface::class);
  160. $contextMock->expects($this->once())
  161. ->method('getBaseUrl')
  162. ->willReturn('localhost/pub/static/');
  163. $this->assetRepoMock->expects($this->once())
  164. ->method('getStaticViewFileContext')
  165. ->willReturn($contextMock);
  166. $this->authorizationMock->expects($this->atLeastOnce())
  167. ->method('isAllowed')
  168. ->with('Magento_Cms::media_gallery')
  169. ->willReturn($isAuthorizationAllowed);
  170. if ($data['add_variables']) {
  171. $this->configProvider->expects($this->once())
  172. ->method('processVariableConfig');
  173. }
  174. if ($data['add_widgets']) {
  175. $this->configProvider->expects($this->once())
  176. ->method('processWidgetConfig');
  177. }
  178. $config = $this->wysiwygConfig->getConfig($data);
  179. $this->assertInstanceOf(\Magento\Framework\DataObject::class, $config);
  180. $this->assertEquals($expectedResults[0], $config->getData('someData'));
  181. $this->assertEquals('localhost/pub/static/', $config->getData('baseStaticUrl'));
  182. $this->assertEquals('localhost/pub/static/', $config->getData('baseStaticDefaultUrl'));
  183. }
  184. /**
  185. * @return array
  186. */
  187. public function getConfigDataProvider()
  188. {
  189. return [
  190. 'add_variables IS FALSE, add_widgets IS FALSE, isAuthorizationAllowed IS FALSE' => [
  191. 'data' => [
  192. 'add_variables' => false,
  193. 'add_widgets' => false,
  194. ],
  195. 'isAuthorizationAllowed' => false,
  196. 'expectedResults' => [null, null, null],
  197. ],
  198. 'add_variables IS TRUE, add_widgets IS TRUE, isAuthorizationAllowed IS TRUE' => [
  199. 'data' => [
  200. 'someData' => 'important data',
  201. 'add_variables' => true,
  202. 'add_widgets' => true,
  203. ],
  204. 'isAuthorizationAllowed' => true,
  205. 'expectedResults' => ['important data', 'wysiwyg is here', 'plugins are here'],
  206. ]
  207. ];
  208. }
  209. /**
  210. * @covers \Magento\Cms\Model\Wysiwyg\Config::getSkinImagePlaceholderPath
  211. */
  212. public function testGetSkinImagePlaceholderPath()
  213. {
  214. $staticPath = 'pub/static';
  215. $placeholderPath = 'adminhtml/Magento/backend/en_US/Magento_Cms/images/wysiwyg_skin_image.png';
  216. $expectedResult = 'pub/static/adminhtml/Magento/backend/en_US/Magento_Cms/images/wysiwyg_skin_image.png';
  217. $this->storeManagerMock->expects($this->any())
  218. ->method('getStore')
  219. ->willReturn($this->storeMock);
  220. $this->storeMock->expects($this->any())
  221. ->method('getBaseStaticDir')
  222. ->willReturn($staticPath);
  223. $this->assetRepoMock->expects($this->any())
  224. ->method('createAsset')
  225. ->with(\Magento\Cms\Model\Wysiwyg\Config::WYSIWYG_SKIN_IMAGE_PLACEHOLDER_ID)
  226. ->willReturn($this->assetFileMock);
  227. $this->assetFileMock->expects($this->once())
  228. ->method('getPath')
  229. ->willReturn($placeholderPath);
  230. $this->assertEquals($expectedResult, $this->wysiwygConfig->getSkinImagePlaceholderPath());
  231. }
  232. /**
  233. * @covers \Magento\Cms\Model\Wysiwyg\Config::isEnabled
  234. * @param string $wysiwygState
  235. * @param boolean $expectedResult
  236. *
  237. * @dataProvider isEnabledDataProvider
  238. */
  239. public function testIsEnabled($wysiwygState, $expectedResult)
  240. {
  241. $storeId = 1;
  242. $this->wysiwygConfig->setStoreId($storeId);
  243. $this->scopeConfigMock->expects($this->atLeastOnce())
  244. ->method('getValue')
  245. ->with('cms/wysiwyg/enabled', 'store', $storeId)
  246. ->willReturn($wysiwygState);
  247. $this->assertEquals($expectedResult, $this->wysiwygConfig->isEnabled());
  248. }
  249. /**
  250. * @return array
  251. */
  252. public function isEnabledDataProvider()
  253. {
  254. return [
  255. ['wysiwygState' => 'enabled', 'expectedResult' => true],
  256. ['wysiwygState' => 'hidden', 'expectedResult' => true],
  257. ['wysiwygState' => 'masked', 'expectedResult' => false]
  258. ];
  259. }
  260. /**
  261. * @covers \Magento\Cms\Model\Wysiwyg\Config::isHidden
  262. * @param string $status
  263. * @param boolean $expectedResult
  264. *
  265. * @dataProvider isHiddenDataProvider
  266. */
  267. public function testIsHidden($status, $expectedResult)
  268. {
  269. $this->scopeConfigMock->expects($this->atLeastOnce())
  270. ->method('getValue')
  271. ->with('cms/wysiwyg/enabled', 'store')
  272. ->willReturn($status);
  273. $this->assertEquals($expectedResult, $this->wysiwygConfig->isHidden());
  274. }
  275. /**
  276. * @return array
  277. */
  278. public function isHiddenDataProvider()
  279. {
  280. return [
  281. ['status' => 'hidden', 'expectedResult' => true],
  282. ['status' => 'enabled', 'expectedResult' => false],
  283. ['status' => 'masked', 'expectedResult' => false]
  284. ];
  285. }
  286. }