ItemTest.php 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\Quote\Test\Unit\Model\ResourceModel\Quote;
  7. use Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite;
  8. use Magento\Framework\TestFramework\Unit\Helper\ObjectManager as ObjectManagerHelper;
  9. use Magento\Quote\Model\ResourceModel\Quote\Item;
  10. /**
  11. * Class ItemTest
  12. *
  13. * @SuppressWarnings(PHPMD.TooManyFields)
  14. * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  15. */
  16. class ItemTest extends \PHPUnit\Framework\TestCase
  17. {
  18. /**
  19. * @var Item
  20. */
  21. protected $model;
  22. /**
  23. * @var \Magento\Framework\App\ResourceConnection|\PHPUnit_Framework_MockObject_MockObject
  24. */
  25. protected $resourceMock;
  26. /**
  27. * @var \Magento\Quote\Model\Quote\Item|\PHPUnit_Framework_MockObject_MockObject
  28. */
  29. protected $quoteItemMock;
  30. /**
  31. * @var \Magento\Framework\DB\Adapter\AdapterInterface|\PHPUnit_Framework_MockObject_MockObject
  32. */
  33. protected $connectionMock;
  34. /**
  35. * @var \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot|\PHPUnit_Framework_MockObject_MockObject
  36. */
  37. protected $entitySnapshotMock;
  38. /**
  39. * @var RelationComposite|\PHPUnit_Framework_MockObject_MockObject
  40. */
  41. protected $relationCompositeMock;
  42. /**
  43. * @var \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor|\PHPUnit_Framework_MockObject_MockObject
  44. */
  45. protected $objectRelationProcessorMock;
  46. /**
  47. * Mock class dependencies
  48. */
  49. protected function setUp()
  50. {
  51. $this->resourceMock = $this->createMock(\Magento\Framework\App\ResourceConnection::class);
  52. $this->quoteItemMock = $this->createMock(\Magento\Quote\Model\Quote\Item::class);
  53. $this->connectionMock = $this->createPartialMock(\Magento\Framework\DB\Adapter\Pdo\Mysql::class, [
  54. 'describeTable',
  55. 'insert',
  56. 'lastInsertId',
  57. 'beginTransaction',
  58. 'rollback',
  59. 'commit',
  60. 'quoteInto',
  61. 'update'
  62. ]);
  63. $this->entitySnapshotMock = $this->createMock(
  64. \Magento\Framework\Model\ResourceModel\Db\VersionControl\Snapshot::class
  65. );
  66. $this->relationCompositeMock = $this->createMock(
  67. \Magento\Framework\Model\ResourceModel\Db\VersionControl\RelationComposite::class
  68. );
  69. $this->objectRelationProcessorMock = $this->createMock(
  70. \Magento\Framework\Model\ResourceModel\Db\ObjectRelationProcessor::class
  71. );
  72. $contextMock = $this->createMock(\Magento\Framework\Model\ResourceModel\Db\Context::class);
  73. $contextMock->expects($this->once())->method('getResources')->willReturn($this->resourceMock);
  74. $contextMock->expects($this->once())
  75. ->method('getObjectRelationProcessor')
  76. ->willReturn($this->objectRelationProcessorMock);
  77. $objectManager = new ObjectManagerHelper($this);
  78. $this->model = $objectManager->getObject(
  79. \Magento\Quote\Model\ResourceModel\Quote\Item::class,
  80. [
  81. 'context' => $contextMock,
  82. 'entitySnapshot' => $this->entitySnapshotMock,
  83. 'entityRelationComposite' => $this->relationCompositeMock
  84. ]
  85. );
  86. }
  87. public function testInstanceOf()
  88. {
  89. $this->assertInstanceOf(
  90. \Magento\Framework\Model\ResourceModel\Db\VersionControl\AbstractDb::class,
  91. $this->model
  92. );
  93. }
  94. public function testSaveNotModifiedItem()
  95. {
  96. $this->entitySnapshotMock->expects($this->exactly(2))
  97. ->method('isModified')
  98. ->with($this->quoteItemMock)
  99. ->willReturn(false);
  100. $this->quoteItemMock->expects($this->never())
  101. ->method('isOptionsSaved');
  102. $this->quoteItemMock->expects($this->never())
  103. ->method('saveItemOptions');
  104. $this->resourceMock->expects($this->any())
  105. ->method('getConnection')
  106. ->willReturn($this->connectionMock);
  107. $this->assertEquals($this->model, $this->model->save($this->quoteItemMock));
  108. }
  109. public function testSaveSavedBeforeItem()
  110. {
  111. $this->entitySnapshotMock->expects($this->exactly(2))
  112. ->method('isModified')
  113. ->with($this->quoteItemMock)
  114. ->willReturn(true);
  115. $this->quoteItemMock->expects($this->once())
  116. ->method('isOptionsSaved')
  117. ->willReturn(true);
  118. $this->quoteItemMock->expects($this->never())
  119. ->method('saveItemOptions');
  120. $this->resourceMock->expects($this->any())
  121. ->method('getConnection')
  122. ->willReturn($this->connectionMock);
  123. $this->assertEquals($this->model, $this->model->save($this->quoteItemMock));
  124. }
  125. public function testSaveModifiedItem()
  126. {
  127. $this->entitySnapshotMock->expects($this->exactly(2))
  128. ->method('isModified')
  129. ->with($this->quoteItemMock)
  130. ->willReturn(true);
  131. $this->quoteItemMock->expects($this->once())
  132. ->method('isOptionsSaved')
  133. ->willReturn(false);
  134. $this->quoteItemMock->expects($this->once())
  135. ->method('saveItemOptions');
  136. $this->resourceMock->expects($this->any())
  137. ->method('getConnection')
  138. ->willReturn($this->connectionMock);
  139. $this->assertEquals($this->model, $this->model->save($this->quoteItemMock));
  140. }
  141. }