CollectionTest.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Eav\Test\Unit\Model\ResourceModel\Attribute;
  7. /**
  8. * Class CollectionTest
  9. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  10. */
  11. class CollectionTest extends \PHPUnit\Framework\TestCase
  12. {
  13. /**
  14. * @var \Magento\Eav\Model\ResourceModel\Attribute\Collection|\PHPUnit_Framework_MockObject_MockObject
  15. */
  16. protected $model;
  17. /**
  18. * @var \Magento\Framework\Data\Collection\EntityFactory|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $entityFactoryMock;
  21. /**
  22. * @var \Psr\Log\LoggerInterface|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. protected $loggerMock;
  25. /**
  26. * @var \Magento\Framework\Data\Collection\Db\FetchStrategyInterface|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. protected $fetchStrategyMock;
  29. /**
  30. * @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
  31. */
  32. protected $eventManagerMock;
  33. /**
  34. * @var \Magento\Eav\Model\Config|\PHPUnit_Framework_MockObject_MockObject
  35. */
  36. protected $eavConfigMock;
  37. /**
  38. * @var \Magento\Eav\Model\Entity\Type
  39. */
  40. protected $entityTypeMock;
  41. /**
  42. * @var \Magento\Store\Model\StoreManagerInterface|\PHPUnit_Framework_MockObject_MockObject
  43. */
  44. protected $storeManagerMock;
  45. /**
  46. * @var \Magento\Framework\DB\Adapter\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject
  47. */
  48. protected $connectionMock;
  49. /**
  50. * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
  51. */
  52. protected $resourceMock;
  53. /**
  54. * @var \Magento\Framework\DB\Select|\PHPUnit_Framework_MockObject_MockObject
  55. */
  56. protected $select;
  57. /**
  58. * @var \PHPUnit_Framework_MockObject_MockObject
  59. */
  60. protected $selectRenderer;
  61. protected function setUp()
  62. {
  63. $this->entityFactoryMock = $this->createMock(\Magento\Framework\Data\Collection\EntityFactory::class);
  64. $this->loggerMock = $this->createMock(\Psr\Log\LoggerInterface::class);
  65. $this->fetchStrategyMock = $this->createMock(
  66. \Magento\Framework\Data\Collection\Db\FetchStrategyInterface::class
  67. );
  68. $this->eventManagerMock = $this->createMock(\Magento\Framework\Event\ManagerInterface::class);
  69. $this->eavConfigMock = $this->createMock(\Magento\Eav\Model\Config::class);
  70. $this->entityTypeMock = $this->createPartialMock(\Magento\Eav\Model\Entity\Type::class, ['__wakeup']);
  71. $this->entityTypeMock->setAdditionalAttributeTable('some_extra_table');
  72. $this->eavConfigMock->expects($this->any())
  73. ->method('getEntityType')
  74. ->will($this->returnValue($this->entityTypeMock));
  75. $this->storeManagerMock = $this->createMock(\Magento\Store\Model\StoreManagerInterface::class);
  76. $this->storeManagerMock->expects($this->any())->method('getStore')->will($this->returnSelf());
  77. $this->connectionMock = $this->createPartialMock(
  78. \Magento\Framework\DB\Adapter\Pdo\Mysql::class,
  79. ['select', 'describeTable', 'quoteIdentifier', '_connect', '_quote']
  80. );
  81. $this->selectRenderer = $this->getMockBuilder(\Magento\Framework\DB\Select\SelectRenderer::class)
  82. ->disableOriginalConstructor()
  83. ->getMock();
  84. $this->select = new \Magento\Framework\DB\Select($this->connectionMock, $this->selectRenderer);
  85. $this->resourceMock = $this->getMockForAbstractClass(
  86. \Magento\Framework\Model\ResourceModel\Db\AbstractDb::class,
  87. [],
  88. '',
  89. false,
  90. true,
  91. true,
  92. ['__wakeup', 'getConnection', 'getMainTable', 'getTable']
  93. );
  94. $this->connectionMock->expects($this->any())->method('select')->will($this->returnValue($this->select));
  95. $this->connectionMock->expects($this->any())->method('quoteIdentifier')->will($this->returnArgument(0));
  96. $this->connectionMock->expects($this->any())
  97. ->method('describeTable')
  98. ->will($this->returnValueMap(
  99. [
  100. [
  101. 'some_main_table',
  102. null,
  103. [
  104. 'col1' => [],
  105. 'col2' => [],
  106. ],
  107. ],
  108. [
  109. 'some_extra_table',
  110. null,
  111. [
  112. 'col2' => [],
  113. 'col3' => [],
  114. ]
  115. ],
  116. [
  117. null,
  118. null,
  119. [
  120. 'col2' => [],
  121. 'col3' => [],
  122. 'col4' => [],
  123. ]
  124. ],
  125. ]
  126. ));
  127. $this->connectionMock->expects($this->any())->method('_quote')->will($this->returnArgument(0));
  128. $this->resourceMock->expects($this->any())->method('getConnection')->willReturn($this->connectionMock);
  129. $this->resourceMock->expects($this->any())->method('getMainTable')->willReturn('some_main_table');
  130. $this->resourceMock->expects($this->any())->method('getTable')->willReturn('some_extra_table');
  131. }
  132. /**
  133. * @dataProvider initSelectDataProvider
  134. */
  135. public function testInitSelect($column, $value)
  136. {
  137. $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  138. $this->model = $helper->getObject(
  139. \Magento\Customer\Model\ResourceModel\Attribute\Collection::class,
  140. [
  141. 'entityFactory' => $this->entityFactoryMock,
  142. 'logger' => $this->loggerMock,
  143. 'fetchStrategy' => $this->fetchStrategyMock,
  144. 'eventManager' => $this->eventManagerMock,
  145. 'eavConfig' => $this->eavConfigMock,
  146. 'storeManager' => $this->storeManagerMock,
  147. 'connection' => $this->connectionMock,
  148. 'resource' => $this->resourceMock
  149. ]
  150. );
  151. $this->model->addFieldToFilter($column, $value);
  152. $this->selectRenderer->expects($this->once())
  153. ->method('render')
  154. ->withAnyParameters();
  155. $this->model->getSelectCountSql()->assemble();
  156. }
  157. /**
  158. * @return array
  159. */
  160. public function initSelectDataProvider()
  161. {
  162. return [
  163. 'main_table_expression' => [
  164. 'col2', '1',
  165. ],
  166. 'additional_table_expression' => [
  167. 'col3', '2',
  168. ]
  169. ];
  170. }
  171. }