BuilderTest.php 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\SalesSequence\Test\Unit\Model;
  7. /**
  8. * Class BuilderTest
  9. */
  10. class BuilderTest extends \PHPUnit\Framework\TestCase
  11. {
  12. /**
  13. * @var \Magento\SalesSequence\Model\Builder
  14. */
  15. private $sequenceBuilder;
  16. /**
  17. * @var \Magento\SalesSequence\Model\ResourceModel\Meta | \PHPUnit_Framework_MockObject_MockObject
  18. */
  19. private $resourceSequenceMeta;
  20. /**
  21. * @var \Magento\SalesSequence\Model\Meta | \PHPUnit_Framework_MockObject_MockObject
  22. */
  23. private $meta;
  24. /**
  25. * @var \Magento\SalesSequence\Model\Profile | \PHPUnit_Framework_MockObject_MockObject
  26. */
  27. private $profile;
  28. /**
  29. * @var \Magento\SalesSequence\Model\MetaFactory | \PHPUnit_Framework_MockObject_MockObject
  30. */
  31. private $metaFactory;
  32. /**
  33. * @var \Magento\SalesSequence\Model\ProfileFactory | \PHPUnit_Framework_MockObject_MockObject
  34. */
  35. private $profileFactory;
  36. /**
  37. * @var \Magento\Framework\DB\Adapter\AdapterInterface | \PHPUnit_Framework_MockObject_MockObject
  38. */
  39. private $connectionMock;
  40. /**
  41. * @var \Magento\Framework\DB\Ddl\Sequence | \PHPUnit_Framework_MockObject_MockObject
  42. */
  43. private $sequence;
  44. /**
  45. * @var \Magento\Framework\App\ResourceConnection | \PHPUnit_Framework_MockObject_MockObject
  46. */
  47. private $resourceMock;
  48. protected function setUp()
  49. {
  50. $this->connectionMock = $this->getMockForAbstractClass(
  51. \Magento\Framework\DB\Adapter\AdapterInterface::class,
  52. [],
  53. '',
  54. false,
  55. false,
  56. true,
  57. ['query']
  58. );
  59. $this->resourceSequenceMeta = $this->createPartialMock(
  60. \Magento\SalesSequence\Model\ResourceModel\Meta::class,
  61. ['loadByEntityTypeAndStore', 'save', 'createSequence']
  62. );
  63. $this->meta = $this->createPartialMock(
  64. \Magento\SalesSequence\Model\Meta::class,
  65. ['getId', 'setData', 'save', 'getSequenceTable']
  66. );
  67. $this->sequence = $this->createMock(\Magento\Framework\DB\Ddl\Sequence::class);
  68. $this->resourceMock = $this->createMock(\Magento\Framework\App\ResourceConnection::class);
  69. $this->profile = $this->createPartialMock(
  70. \Magento\SalesSequence\Model\Profile::class,
  71. ['getId', 'setData', 'getStartValue']
  72. );
  73. $this->metaFactory = $this->createPartialMock(\Magento\SalesSequence\Model\MetaFactory::class, ['create']);
  74. $this->metaFactory->expects($this->any())->method('create')->willReturn($this->meta);
  75. $this->profileFactory = $this->createPartialMock(
  76. \Magento\SalesSequence\Model\ProfileFactory::class,
  77. ['create']
  78. );
  79. $this->profileFactory->expects($this->any())->method('create')->willReturn($this->profile);
  80. $this->resourceMock->expects($this->atLeastOnce())
  81. ->method('getTableName')
  82. ->willReturn('sequence_lalalka_1');
  83. $helper = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
  84. $this->sequenceBuilder = $helper->getObject(
  85. \Magento\SalesSequence\Model\Builder::class,
  86. [
  87. 'resourceMetadata' => $this->resourceSequenceMeta,
  88. 'metaFactory' => $this->metaFactory,
  89. 'profileFactory' => $this->profileFactory,
  90. 'appResource' => $this->resourceMock,
  91. 'ddlSequence' => $this->sequence
  92. ]
  93. );
  94. }
  95. public function testAddSequenceExistMeta()
  96. {
  97. $entityType = 'lalalka';
  98. $storeId = 1;
  99. $this->resourceSequenceMeta->expects($this->once())
  100. ->method('loadByEntityTypeAndStore')
  101. ->with($entityType, $storeId)
  102. ->willReturn($this->meta);
  103. $this->meta->expects($this->once())
  104. ->method('getSequenceTable')
  105. ->willReturn('sequence_lalalka_1');
  106. $this->profileFactory->expects($this->never())
  107. ->method('create');
  108. $this->sequenceBuilder->setEntityType($entityType)
  109. ->setStoreId($storeId)
  110. ->setSuffix('SUFF')
  111. ->setPrefix('PREF')
  112. ->setStartValue(1)
  113. ->setStep(1)
  114. ->setWarningValue(9999999)
  115. ->setMaxValue(912992192)
  116. ->create();
  117. }
  118. public function testAddSequence()
  119. {
  120. $entityType = 'lalalka';
  121. $storeId = 1;
  122. $prefix = 'PRE';
  123. $suffix = 'SUF';
  124. $startValue = 1;
  125. $step = 1;
  126. $maxValue = 120000;
  127. $warningValue = 110000;
  128. $this->resourceSequenceMeta->expects($this->once())
  129. ->method('loadByEntityTypeAndStore')
  130. ->with($entityType, $storeId)
  131. ->willReturn($this->meta);
  132. $this->meta->expects($this->once())
  133. ->method('getSequenceTable')
  134. ->willReturn(null);
  135. $this->profileFactory->expects($this->once())
  136. ->method('create')
  137. ->with([
  138. 'data' => [
  139. 'prefix' => $prefix,
  140. 'suffix' => $suffix,
  141. 'start_value' => $startValue,
  142. 'step' => $step,
  143. 'max_value' => $maxValue,
  144. 'warning_value' => $warningValue,
  145. 'is_active' => 1
  146. ]
  147. ])->willReturn($this->profile);
  148. $sequenceTable = sprintf('sequence_%s_%s', $entityType, $storeId);
  149. $this->metaFactory->expects($this->once())
  150. ->method('create')
  151. ->with([
  152. 'data' => [
  153. 'entity_type' => $entityType,
  154. 'store_id' => $storeId,
  155. 'sequence_table' => $sequenceTable,
  156. 'active_profile' => $this->profile
  157. ]
  158. ])->willReturn($this->meta);
  159. $this->resourceSequenceMeta->expects($this->once())->method('save')->willReturn($this->meta);
  160. $this->stepCreateSequence($sequenceTable, $startValue);
  161. $this->sequenceBuilder->setEntityType($entityType)
  162. ->setStoreId($storeId)
  163. ->setPrefix($prefix)
  164. ->setSuffix($suffix)
  165. ->setStartValue($startValue)
  166. ->setStep($step)
  167. ->setMaxValue($maxValue)
  168. ->setWarningValue($warningValue)
  169. ->create();
  170. }
  171. /**
  172. * Step create sequence
  173. *
  174. * @param $sequenceName
  175. * @param $startNumber
  176. */
  177. private function stepCreateSequence($sequenceName, $startNumber)
  178. {
  179. $sql = "some sql";
  180. $this->resourceMock->expects($this->atLeastOnce())
  181. ->method('getTableName');
  182. $this->resourceMock->expects($this->any())
  183. ->method('getConnection')
  184. ->with('sales')
  185. ->willReturn($this->connectionMock);
  186. $this->sequence->expects($this->once())
  187. ->method('getCreateSequenceDdl')
  188. ->with($sequenceName, $startNumber)
  189. ->willReturn($sql);
  190. $this->connectionMock->expects($this->once())->method('query')->with($sql);
  191. }
  192. }