DataProviderTest.php 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Theme\Test\Unit\Model\Design\Config;
  7. use Magento\Config\Model\Config\Reader\Source\Deployed\SettingChecker;
  8. use Magento\Framework\App\Config\ScopeCodeResolver;
  9. use Magento\Framework\App\RequestInterface;
  10. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
  11. use Magento\Theme\Model\Design\Config\DataLoader;
  12. use Magento\Theme\Model\Design\Config\DataProvider;
  13. use Magento\Theme\Model\Design\Config\MetadataLoader;
  14. use Magento\Theme\Model\ResourceModel\Design\Config\Collection;
  15. /**
  16. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  17. */
  18. class DataProviderTest extends \PHPUnit\Framework\TestCase
  19. {
  20. /**
  21. * @var DataProvider
  22. */
  23. protected $model;
  24. /**
  25. * @var DataProvider\DataLoader|\PHPUnit_Framework_MockObject_MockObject
  26. */
  27. protected $dataLoader;
  28. /**
  29. * @var DataProvider\MetadataLoader|\PHPUnit_Framework_MockObject_MockObject
  30. */
  31. protected $metadataLoader;
  32. /**
  33. * @var Collection|\PHPUnit_Framework_MockObject_MockObject
  34. */
  35. protected $collection;
  36. /**
  37. * @var ObjectManager
  38. */
  39. private $objectManager;
  40. /**
  41. * @var RequestInterface|\PHPUnit_Framework_MockObject_MockObject
  42. */
  43. private $requestMock;
  44. /**
  45. * @var ScopeCodeResolver|\PHPUnit_Framework_MockObject_MockObject
  46. */
  47. private $scopeCodeResolverMock;
  48. /**
  49. * @var SettingChecker|\PHPUnit_Framework_MockObject_MockObject
  50. */
  51. private $settingCheckerMock;
  52. protected function setUp()
  53. {
  54. $this->objectManager = new ObjectManager($this);
  55. $this->dataLoader = $this->getMockBuilder(\Magento\Theme\Model\Design\Config\DataProvider\DataLoader::class)
  56. ->disableOriginalConstructor()
  57. ->getMock();
  58. $this->metadataLoader = $this->getMockBuilder(
  59. \Magento\Theme\Model\Design\Config\DataProvider\MetadataLoader::class
  60. )->disableOriginalConstructor()->getMock();
  61. $this->metadataLoader->expects($this->once())
  62. ->method('getData')
  63. ->willReturn([]);
  64. $this->collection = $this->getMockBuilder(\Magento\Theme\Model\ResourceModel\Design\Config\Collection::class)
  65. ->disableOriginalConstructor()
  66. ->getMock();
  67. $collectionFactory = $this->getMockBuilder(
  68. \Magento\Theme\Model\ResourceModel\Design\Config\CollectionFactory::class
  69. )->disableOriginalConstructor()->setMethods(['create'])->getMock();
  70. $collectionFactory->expects($this->once())
  71. ->method('create')
  72. ->willReturn($this->collection);
  73. $this->requestMock = $this->getMockBuilder(RequestInterface::class)
  74. ->disableOriginalConstructor()
  75. ->getMock();
  76. $this->scopeCodeResolverMock = $this->getMockBuilder(ScopeCodeResolver::class)
  77. ->disableOriginalConstructor()
  78. ->getMock();
  79. $this->settingCheckerMock = $this->getMockBuilder(SettingChecker::class)
  80. ->disableOriginalConstructor()
  81. ->getMock();
  82. $this->model = new DataProvider(
  83. 'scope',
  84. 'scope',
  85. 'scope',
  86. $this->dataLoader,
  87. $this->metadataLoader,
  88. $collectionFactory
  89. );
  90. $this->objectManager->setBackwardCompatibleProperty(
  91. $this->model,
  92. 'request',
  93. $this->requestMock
  94. );
  95. $this->objectManager->setBackwardCompatibleProperty(
  96. $this->model,
  97. 'scopeCodeResolver',
  98. $this->scopeCodeResolverMock
  99. );
  100. $this->objectManager->setBackwardCompatibleProperty(
  101. $this->model,
  102. 'settingChecker',
  103. $this->settingCheckerMock
  104. );
  105. }
  106. public function testGetData()
  107. {
  108. $data = [
  109. 'test_key' => 'test_value',
  110. ];
  111. $this->dataLoader->expects($this->once())
  112. ->method('getData')
  113. ->willReturn($data);
  114. $this->assertEquals($data, $this->model->getData());
  115. }
  116. /**
  117. * @param array $inputMeta
  118. * @param array $expectedMeta
  119. * @param array $request
  120. * @dataProvider getMetaDataProvider
  121. */
  122. public function testGetMeta(array $inputMeta, array $expectedMeta, array $request)
  123. {
  124. $this->requestMock->expects($this->any())
  125. ->method('getParams')
  126. ->willReturn($request);
  127. $this->scopeCodeResolverMock->expects($this->any())
  128. ->method('resolve')
  129. ->with('stores', 1)
  130. ->willReturn('default');
  131. $this->settingCheckerMock->expects($this->any())
  132. ->method('isReadOnly')
  133. ->withConsecutive(
  134. ['design/head/welcome', 'stores', 'default'],
  135. ['design/head/logo', 'stores', 'default'],
  136. ['design/head/head', 'stores', 'default']
  137. )
  138. ->willReturnOnConsecutiveCalls(
  139. true,
  140. false,
  141. true
  142. );
  143. $this->objectManager->setBackwardCompatibleProperty(
  144. $this->model,
  145. 'meta',
  146. $inputMeta
  147. );
  148. $this->assertSame($expectedMeta, $this->model->getMeta());
  149. }
  150. /**
  151. * @return array
  152. */
  153. public function getMetaDataProvider()
  154. {
  155. return [
  156. [
  157. [
  158. 'option1'
  159. ],
  160. [
  161. 'option1'
  162. ],
  163. [
  164. 'scope' => 'default'
  165. ]
  166. ],
  167. [
  168. [
  169. 'other_settings' => [
  170. 'children' => [
  171. 'head' => [
  172. 'children' => [
  173. 'head_welcome' => [
  174. ],
  175. 'head_logo' => [
  176. ],
  177. 'head_head' => [
  178. ]
  179. ]
  180. ]
  181. ]
  182. ]
  183. ],
  184. [
  185. 'other_settings' => [
  186. 'children' => [
  187. 'head' => [
  188. 'children' => [
  189. 'head_welcome' => [
  190. 'arguments' => [
  191. 'data' => [
  192. 'config' => [
  193. 'disabled' => true,
  194. 'is_disable_inheritance' => true,
  195. ]
  196. ]
  197. ]
  198. ],
  199. 'head_logo' => [
  200. ],
  201. 'head_head' => [
  202. 'arguments' => [
  203. 'data' => [
  204. 'config' => [
  205. 'disabled' => true,
  206. 'is_disable_inheritance' => true,
  207. ]
  208. ]
  209. ]
  210. ]
  211. ]
  212. ]
  213. ]
  214. ]
  215. ],
  216. [
  217. 'scope' => 'stores',
  218. 'scope_id' => 1
  219. ]
  220. ]
  221. ];
  222. }
  223. }