AbstractModelTest.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Framework\Model\Test\Unit;
  7. class AbstractModelTest extends \PHPUnit\Framework\TestCase
  8. {
  9. /**
  10. * @var \Magento\Framework\Model\AbstractModel
  11. */
  12. protected $model;
  13. /**
  14. * @var \Magento\Framework\Model\Context|\PHPUnit_Framework_MockObject_MockObject
  15. */
  16. protected $contextMock;
  17. /**
  18. * @var \Magento\Framework\Registry|\PHPUnit_Framework_MockObject_MockObject
  19. */
  20. protected $registryMock;
  21. /**
  22. * @var \Magento\Framework\Model\ResourceModel\Db\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
  23. */
  24. protected $resourceMock;
  25. /**
  26. * @var \Magento\Framework\Data\Collection\AbstractDb|\PHPUnit_Framework_MockObject_MockObject
  27. */
  28. protected $resourceCollectionMock;
  29. /**
  30. * @var \Magento\Framework\DB\Adapter\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject
  31. */
  32. protected $connectionMock;
  33. /**
  34. * @var \PHPUnit_Framework_MockObject_MockObject
  35. */
  36. protected $actionValidatorMock;
  37. protected function setUp()
  38. {
  39. $this->actionValidatorMock = $this->createMock(\Magento\Framework\Model\ActionValidator\RemoveAction::class);
  40. $this->contextMock = new \Magento\Framework\Model\Context(
  41. $this->createMock(\Psr\Log\LoggerInterface::class),
  42. $this->createMock(\Magento\Framework\Event\ManagerInterface::class),
  43. $this->createMock(\Magento\Framework\App\CacheInterface::class),
  44. $this->createMock(\Magento\Framework\App\State::class),
  45. $this->actionValidatorMock
  46. );
  47. $this->registryMock = $this->createMock(\Magento\Framework\Registry::class);
  48. $this->resourceMock = $this->createPartialMock(\Magento\Framework\Model\ResourceModel\Db\AbstractDb::class, [
  49. '_construct',
  50. 'getConnection',
  51. '__wakeup',
  52. 'commit',
  53. 'delete',
  54. 'getIdFieldName',
  55. 'rollBack'
  56. ]);
  57. $this->resourceCollectionMock = $this->getMockBuilder(\Magento\Framework\Data\Collection\AbstractDb::class)
  58. ->disableOriginalConstructor()
  59. ->getMockForAbstractClass();
  60. $this->model = $this->getMockForAbstractClass(
  61. \Magento\Framework\Model\AbstractModel::class,
  62. [$this->contextMock, $this->registryMock, $this->resourceMock, $this->resourceCollectionMock]
  63. );
  64. $this->connectionMock = $this->createMock(\Magento\Framework\DB\Adapter\AdapterInterface::class);
  65. $this->resourceMock->expects($this->any())
  66. ->method('getConnection')
  67. ->will($this->returnValue($this->connectionMock));
  68. }
  69. public function testDelete()
  70. {
  71. $this->resourceMock->expects($this->once())->method('delete')->with($this->model);
  72. $this->model->delete();
  73. }
  74. public function testUpdateStoredData()
  75. {
  76. $this->model->setData(
  77. [
  78. 'id' => 1000,
  79. 'name' => 'Test Name'
  80. ]
  81. );
  82. $this->assertEmpty($this->model->getStoredData());
  83. $this->model->afterLoad();
  84. $this->assertEquals($this->model->getData(), $this->model->getStoredData());
  85. $this->model->setData('value', 'Test Value');
  86. $this->model->afterSave();
  87. $this->assertEquals($this->model->getData(), $this->model->getStoredData());
  88. $this->model->afterDelete();
  89. $this->assertEmpty($this->model->getStoredData());
  90. }
  91. /**
  92. * Tests \Magento\Framework\DataObject->isDeleted()
  93. */
  94. public function testIsDeleted()
  95. {
  96. $this->assertFalse($this->model->isDeleted());
  97. $this->model->isDeleted();
  98. $this->assertFalse($this->model->isDeleted());
  99. $this->model->isDeleted(true);
  100. $this->assertTrue($this->model->isDeleted());
  101. }
  102. /**
  103. * Tests \Magento\Framework\DataObject->hasDataChanges()
  104. */
  105. public function testHasDataChanges()
  106. {
  107. $this->assertFalse($this->model->hasDataChanges());
  108. $this->model->setData('key', 'value');
  109. $this->assertTrue($this->model->hasDataChanges(), 'Data changed');
  110. $this->model->setDataChanges(false);
  111. $this->model->setData('key', 'value');
  112. $this->assertFalse($this->model->hasDataChanges(), 'Data not changed');
  113. $this->model->setData(['key' => 'value']);
  114. $this->assertFalse($this->model->hasDataChanges(), 'Data not changed (array)');
  115. $this->model->unsetData();
  116. $this->assertTrue($this->model->hasDataChanges(), 'Unset data');
  117. }
  118. /**
  119. * Tests \Magento\Framework\DataObject->getId()
  120. */
  121. public function testSetGetId()
  122. {
  123. $this->model->setId('test');
  124. $this->assertEquals('test', $this->model->getId());
  125. }
  126. public function testSetGetIdFieldName()
  127. {
  128. $name = 'entity_id_custom';
  129. $this->model->setIdFieldName($name);
  130. $this->assertEquals($name, $this->model->getIdFieldName());
  131. }
  132. /**
  133. * Tests \Magento\Framework\DataObject->setOrigData()
  134. */
  135. public function testOrigData()
  136. {
  137. $data = ['key1' => 'value1', 'key2' => 'value2'];
  138. $this->model->setData($data);
  139. $this->model->setOrigData();
  140. $this->model->setData('key1', 'test');
  141. $this->assertTrue($this->model->dataHasChangedFor('key1'));
  142. $this->assertEquals($data, $this->model->getOrigData());
  143. $this->model->setOrigData('key1', 'test');
  144. $this->assertEquals('test', $this->model->getOrigData('key1'));
  145. }
  146. /**
  147. * Tests \Magento\Framework\DataObject->setDataChanges()
  148. */
  149. public function testSetDataChanges()
  150. {
  151. $this->assertFalse($this->model->hasDataChanges());
  152. $this->model->setDataChanges(true);
  153. $this->assertTrue($this->model->hasDataChanges());
  154. }
  155. }