AbstractModelTest.php 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Rule\Test\Unit\Model;
  7. /**
  8. * Class AbstractModelTest. Unit test for \Magento\Rule\Model\AbstractModel
  9. *
  10. * @package Magento\Rule\Test\Unit\Model
  11. *
  12. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  13. */
  14. class AbstractModelTest extends \PHPUnit\Framework\TestCase
  15. {
  16. /**
  17. * @var \Magento\Rule\Model\AbstractModel|\PHPUnit_Framework_MockObject_MockObject
  18. */
  19. private $model;
  20. /**
  21. * @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
  22. */
  23. private $contextMock;
  24. /**
  25. * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
  26. */
  27. private $registryMock;
  28. /**
  29. * @var \Magento\Framework\Data\FormFactory|\PHPUnit_Framework_MockObject_MockObject
  30. */
  31. private $formFactoryMock;
  32. /**
  33. * @var \Magento\Framework\Stdlib\DateTime\TimezoneInterface|\PHPUnit_Framework_MockObject_MockObject
  34. */
  35. private $localeDateMock;
  36. /**
  37. * @var \Magento\Framework\Event\ManagerInterface|\PHPUnit_Framework_MockObject_MockObject
  38. */
  39. private $eventManagerMock;
  40. protected function setUp()
  41. {
  42. $this->localeDateMock = $this->getMockBuilder(\Magento\Framework\Stdlib\DateTime\TimezoneInterface::class)
  43. ->disableOriginalConstructor()
  44. ->getMock();
  45. $this->formFactoryMock = $this->getMockBuilder(\Magento\Framework\Data\FormFactory::class)
  46. ->disableOriginalConstructor()
  47. ->getMock();
  48. $this->registryMock = $this->getMockBuilder(\Magento\Framework\Registry::class)
  49. ->disableOriginalConstructor()
  50. ->getMock();
  51. $this->contextMock = $this->getMockBuilder(\Magento\Framework\Model\Context::class)
  52. ->disableOriginalConstructor()
  53. ->setMethods(['getEventDispatcher'])
  54. ->getMock();
  55. $this->eventManagerMock = $this->getMockBuilder(\Magento\Framework\Event\ManagerInterface::class)
  56. ->disableOriginalConstructor()
  57. ->setMethods(['dispatch'])
  58. ->getMock();
  59. $this->contextMock->expects($this->any())
  60. ->method('getEventDispatcher')
  61. ->will($this->returnValue($this->eventManagerMock));
  62. $resourceMock = $this->getMockBuilder(\Magento\Framework\Model\ResourceModel\AbstractResource::class)
  63. ->disableOriginalConstructor()
  64. ->getMock();
  65. $resourceCollectionMock = $this->getMockBuilder(\Magento\Framework\Data\Collection\AbstractDb::class)
  66. ->disableOriginalConstructor()
  67. ->getMock();
  68. $extensionFactory = $this->getMockBuilder(\Magento\Framework\Api\ExtensionAttributesFactory::class)
  69. ->disableOriginalConstructor()
  70. ->getMock();
  71. $customAttributeFactory = $this->getMockBuilder(\Magento\Framework\Api\AttributeValueFactory::class)
  72. ->disableOriginalConstructor()
  73. ->getMock();
  74. $this->model = $this->getMockForAbstractClass(
  75. \Magento\Rule\Model\AbstractModel::class,
  76. [
  77. 'context' => $this->contextMock,
  78. 'registry' => $this->registryMock,
  79. 'formFactory' => $this->formFactoryMock,
  80. 'localeDate' => $this->localeDateMock,
  81. 'resource' => $resourceMock,
  82. 'resourceCollection' => $resourceCollectionMock,
  83. 'data' => [],
  84. 'extensionFactory' => $extensionFactory,
  85. 'customAttributeFactory' => $customAttributeFactory,
  86. 'serializer' => $this->getSerializerMock(),
  87. ]
  88. );
  89. }
  90. /**
  91. * Get mock for serializer
  92. *
  93. * @return \Magento\Framework\Serialize\Serializer\Json|\PHPUnit_Framework_MockObject_MockObject
  94. */
  95. private function getSerializerMock()
  96. {
  97. $serializerMock = $this->getMockBuilder(\Magento\Framework\Serialize\Serializer\Json::class)
  98. ->disableOriginalConstructor()
  99. ->setMethods(['serialize', 'unserialize'])
  100. ->getMock();
  101. $serializerMock->expects($this->any())
  102. ->method('serialize')
  103. ->will(
  104. $this->returnCallback(
  105. function ($value) {
  106. return json_encode($value);
  107. }
  108. )
  109. );
  110. $serializerMock->expects($this->any())
  111. ->method('unserialize')
  112. ->will(
  113. $this->returnCallback(
  114. function ($value) {
  115. return json_decode($value, true);
  116. }
  117. )
  118. );
  119. return $serializerMock;
  120. }
  121. public function testGetConditions()
  122. {
  123. $conditionsArray = ['conditions' => 'serialized'];
  124. $serializedConditions = json_encode($conditionsArray);
  125. $conditions = $this->getMockBuilder(\Magento\Rule\Model\Condition\Combine::class)
  126. ->setMethods(['setRule', 'setId', 'setPrefix', 'loadArray'])
  127. ->disableOriginalConstructor()
  128. ->getMock();
  129. $conditions->expects($this->once())->method('setRule')->will($this->returnSelf());
  130. $conditions->expects($this->once())->method('setId')->will($this->returnSelf());
  131. $conditions->expects($this->once())->method('setPrefix')->will($this->returnSelf());
  132. $this->model->expects($this->once())->method('getConditionsInstance')->will($this->returnValue($conditions));
  133. $this->model->setConditionsSerialized($serializedConditions);
  134. $conditions->expects($this->once())->method('loadArray')->with($conditionsArray);
  135. $this->assertEquals($conditions, $this->model->getConditions());
  136. }
  137. public function testGetActions()
  138. {
  139. $actionsArray = ['actions' => 'some_actions'];
  140. $actionsSerialized = json_encode($actionsArray);
  141. $actions = $this->getMockBuilder(\Magento\Rule\Model\Action\Collection::class)
  142. ->setMethods(['setRule', 'setId', 'setPrefix', 'loadArray'])
  143. ->disableOriginalConstructor()
  144. ->getMock();
  145. $actions->expects($this->once())->method('setRule')->will($this->returnSelf());
  146. $actions->expects($this->once())->method('setId')->will($this->returnSelf());
  147. $actions->expects($this->once())->method('setPrefix')->will($this->returnSelf());
  148. $this->model->expects($this->once())->method('getActionsInstance')->will($this->returnValue($actions));
  149. $this->model->setActionsSerialized($actionsSerialized);
  150. $actions->expects($this->once())->method('loadArray')->with($actionsArray);
  151. $this->assertEquals($actions, $this->model->getActions());
  152. }
  153. public function testBeforeSave()
  154. {
  155. $conditions = $this->getMockBuilder(\Magento\Rule\Model\Condition\Combine::class)
  156. ->setMethods(['asArray'])
  157. ->disableOriginalConstructor()
  158. ->getMock();
  159. $actions = $this->getMockBuilder(\Magento\Rule\Model\Action\Collection::class)
  160. ->setMethods(['asArray'])
  161. ->disableOriginalConstructor()
  162. ->getMock();
  163. $this->model->setConditions($conditions);
  164. $this->model->setActions($actions);
  165. $conditions->expects($this->any())->method('asArray')->will($this->returnValue(['conditions' => 'array']));
  166. $actions->expects($this->any())->method('asArray')->will($this->returnValue(['actions' => 'array']));
  167. $this->eventManagerMock->expects($this->exactly(2))->method('dispatch');
  168. $this->assertEquals($this->model, $this->model->beforeSave());
  169. $this->assertEquals(json_encode(['conditions' => 'array']), $this->model->getConditionsSerialized());
  170. $this->assertEquals(json_encode(['actions' => 'array']), $this->model->getActionsSerialized());
  171. }
  172. }