InitialThemeSourceTest.php 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  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\Source;
  7. use Magento\Framework\App\DeploymentConfig;
  8. use Magento\Framework\DataObject;
  9. use Magento\Framework\DataObject\Factory as DataObjectFactory;
  10. use Magento\Framework\DB\Adapter\AdapterInterface;
  11. use Magento\Framework\DB\Select;
  12. use Magento\Theme\Model\ResourceModel\Theme;
  13. use Magento\Theme\Model\ResourceModel\ThemeFactory;
  14. use Magento\Theme\Model\Source\InitialThemeSource;
  15. use PHPUnit_Framework_MockObject_MockObject as Mock;
  16. /**
  17. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  18. */
  19. class InitialThemeSourceTest extends \PHPUnit\Framework\TestCase
  20. {
  21. /**
  22. * @var InitialThemeSource
  23. */
  24. private $model;
  25. /**
  26. * @var DeploymentConfig|Mock
  27. */
  28. private $deploymentConfigMock;
  29. /**
  30. * @var ThemeFactory|Mock
  31. */
  32. private $themeFactoryMock;
  33. /**
  34. * @var DataObjectFactory|Mock
  35. */
  36. private $dataObjectFactoryMock;
  37. /**
  38. * @var DataObject|Mock
  39. */
  40. private $dataObjectMock;
  41. /**
  42. * @var Theme|Mock
  43. */
  44. private $themeMock;
  45. /**
  46. * @var AdapterInterface|Mock
  47. */
  48. private $connectionMock;
  49. /**
  50. * @var Select|Mock
  51. */
  52. private $selectMock;
  53. protected function setUp()
  54. {
  55. $this->deploymentConfigMock = $this->getMockBuilder(DeploymentConfig::class)
  56. ->disableOriginalConstructor()
  57. ->getMock();
  58. $this->themeFactoryMock = $this->getMockBuilder(ThemeFactory::class)
  59. ->setMethods(['create'])
  60. ->disableOriginalConstructor()
  61. ->getMock();
  62. $this->themeMock = $this->getMockBuilder(Theme::class)
  63. ->disableOriginalConstructor()
  64. ->getMock();
  65. $this->selectMock = $this->getMockBuilder(Select::class)
  66. ->disableOriginalConstructor()
  67. ->setMethods(['sort', 'from'])
  68. ->getMock();
  69. $this->connectionMock = $this->getMockBuilder(AdapterInterface::class)
  70. ->getMockForAbstractClass();
  71. $this->dataObjectFactoryMock = $this->getMockBuilder(DataObjectFactory::class)
  72. ->setMethods(['create'])
  73. ->disableOriginalConstructor()
  74. ->getMock();
  75. $this->dataObjectMock = $this->getMockBuilder(DataObject::class)
  76. ->disableOriginalConstructor()
  77. ->getMock();
  78. $this->themeMock->expects($this->any())
  79. ->method('getConnection')
  80. ->willReturn($this->connectionMock);
  81. $this->themeFactoryMock->expects($this->any())
  82. ->method('create')
  83. ->willReturn($this->themeMock);
  84. $this->connectionMock->expects($this->any())
  85. ->method('select')
  86. ->willReturn($this->selectMock);
  87. $this->selectMock->expects($this->any())
  88. ->method('from')
  89. ->willReturnSelf();
  90. $this->selectMock->expects($this->any())
  91. ->method('sort')
  92. ->willReturnSelf();
  93. $this->model = new InitialThemeSource(
  94. $this->deploymentConfigMock,
  95. $this->themeFactoryMock,
  96. $this->dataObjectFactoryMock
  97. );
  98. }
  99. public function testGetNotDeployed()
  100. {
  101. $this->deploymentConfigMock->expects($this->once())
  102. ->method('isDbAvailable')
  103. ->willReturn(false);
  104. $this->assertSame([], $this->model->get());
  105. }
  106. public function testGet()
  107. {
  108. $this->deploymentConfigMock->expects($this->once())
  109. ->method('isDbAvailable')
  110. ->willReturn(true);
  111. $this->connectionMock->expects($this->once())
  112. ->method('fetchAssoc')
  113. ->willReturn(
  114. [
  115. '1' => [
  116. 'theme_id' => '1',
  117. 'parent_id' => null,
  118. 'theme_path' => 'Magento/backend',
  119. 'theme_title' => 'Magento 2 backend',
  120. 'is_featured' => '0',
  121. 'area' => 'adminhtml',
  122. 'type' => '0',
  123. 'code' => 'Magento/backend',
  124. ],
  125. '2' => [
  126. 'theme_id' => '2',
  127. 'parent_id' => null,
  128. 'theme_path' => 'Magento/blank',
  129. 'theme_title' => 'Magento Blank',
  130. 'is_featured' => '0',
  131. 'area' => 'frontend',
  132. 'type' => '0',
  133. 'code' => 'Magento/blank',
  134. ],
  135. '3' => [
  136. 'theme_id' => '3',
  137. 'parent_id' => '2',
  138. 'theme_path' => 'Magento/luma',
  139. 'theme_title' => 'Magento Luma',
  140. 'is_featured' => '0',
  141. 'area' => 'frontend',
  142. 'type' => '0',
  143. 'code' => 'Magento/luma',
  144. ],
  145. ]
  146. );
  147. $this->dataObjectFactoryMock->expects($this->once())
  148. ->method('create')
  149. ->with(
  150. [
  151. 'adminhtml/Magento/backend' => [
  152. 'parent_id' => null,
  153. 'theme_path' => 'Magento/backend',
  154. 'theme_title' => 'Magento 2 backend',
  155. 'is_featured' => '0',
  156. 'area' => 'adminhtml',
  157. 'type' => '0',
  158. 'code' => 'Magento/backend',
  159. ],
  160. 'frontend/Magento/blank' => [
  161. 'parent_id' => null,
  162. 'theme_path' => 'Magento/blank',
  163. 'theme_title' => 'Magento Blank',
  164. 'is_featured' => '0',
  165. 'area' => 'frontend',
  166. 'type' => '0',
  167. 'code' => 'Magento/blank',
  168. ],
  169. 'frontend/Magento/luma' => [
  170. 'parent_id' => 'Magento/blank',
  171. 'theme_path' => 'Magento/luma',
  172. 'theme_title' => 'Magento Luma',
  173. 'is_featured' => '0',
  174. 'area' => 'frontend',
  175. 'type' => '0',
  176. 'code' => 'Magento/luma',
  177. ],
  178. ]
  179. )
  180. ->willReturn($this->dataObjectMock);
  181. $this->dataObjectMock->expects($this->once())
  182. ->method('getData');
  183. $this->model->get();
  184. }
  185. }