OrderSaveTest.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. namespace Magento\GiftMessage\Test\Unit\Model\Plugin;
  7. use Magento\GiftMessage\Model\Plugin\OrderSave;
  8. class OrderSaveTest extends \PHPUnit\Framework\TestCase
  9. {
  10. /**
  11. * @var OrderSave
  12. */
  13. private $plugin;
  14. /**
  15. * @var \PHPUnit_Framework_MockObject_MockObject
  16. */
  17. private $giftMessageOrderRepositoryMock;
  18. /**
  19. * @var \PHPUnit_Framework_MockObject_MockObject
  20. */
  21. private $giftMessageOrderItemRepositoryMock;
  22. /**
  23. * @var \PHPUnit_Framework_MockObject_MockObject
  24. */
  25. private $orderMock;
  26. /**
  27. * @var \PHPUnit_Framework_MockObject_MockObject
  28. */
  29. private $orderExtensionMock;
  30. /**
  31. * @var \PHPUnit_Framework_MockObject_MockObject
  32. */
  33. private $giftMessageMock;
  34. /**
  35. * @var \PHPUnit_Framework_MockObject_MockObject
  36. */
  37. private $orderItemMock;
  38. /**
  39. * @var \PHPUnit_Framework_MockObject_MockObject
  40. */
  41. private $orderItemExtensionMock;
  42. /**
  43. * @var \PHPUnit_Framework_MockObject_MockObject
  44. */
  45. private $orderRepositoryMock;
  46. public function setUp()
  47. {
  48. $this->giftMessageOrderRepositoryMock = $this->createMock(
  49. \Magento\GiftMessage\Api\OrderRepositoryInterface::class
  50. );
  51. $this->giftMessageOrderItemRepositoryMock = $this->createMock(
  52. \Magento\GiftMessage\Api\OrderItemRepositoryInterface::class
  53. );
  54. $this->orderMock = $this->createMock(
  55. \Magento\Sales\Api\Data\OrderInterface::class
  56. );
  57. $this->orderExtensionMock = $this->createPartialMock(
  58. \Magento\Sales\Api\Data\OrderExtension::class,
  59. ['getGiftMessage', 'setGiftMessage']
  60. );
  61. $this->giftMessageMock = $this->createMock(
  62. \Magento\GiftMessage\Api\Data\MessageInterface::class
  63. );
  64. $this->orderItemMock = $this->createMock(
  65. \Magento\Sales\Api\Data\OrderItemInterface::class
  66. );
  67. $this->orderItemExtensionMock = $this->createPartialMock(
  68. \Magento\Sales\Api\Data\OrderItemExtension::class,
  69. ['setGiftMessage', 'getGiftMessage']
  70. );
  71. $this->orderRepositoryMock = $this->createMock(
  72. \Magento\Sales\Api\OrderRepositoryInterface::class
  73. );
  74. $this->plugin = new OrderSave(
  75. $this->giftMessageOrderRepositoryMock,
  76. $this->giftMessageOrderItemRepositoryMock
  77. );
  78. }
  79. public function testAfterSaveGiftMessages()
  80. {
  81. // save Gift Message on order level
  82. $orderId = 1;
  83. $orderItemId = 2;
  84. $this->orderMock->expects($this->exactly(2))->method('getEntityId')->willReturn($orderId);
  85. $this->orderItemMock->expects($this->once())->method('getItemId')->willReturn($orderItemId);
  86. $this->orderMock
  87. ->expects($this->once())
  88. ->method('getExtensionAttributes')
  89. ->willReturn($this->orderExtensionMock);
  90. $this->orderExtensionMock
  91. ->expects($this->exactly(2))
  92. ->method('getGiftMessage')
  93. ->willReturn($this->giftMessageMock);
  94. $this->giftMessageOrderRepositoryMock
  95. ->expects($this->once())
  96. ->method('save')
  97. ->with($orderId, $this->giftMessageMock);
  98. // save Gift Messages on item level
  99. $this->orderMock->expects($this->once())->method('getItems')->willReturn([$this->orderItemMock]);
  100. $this->orderItemMock
  101. ->expects($this->once())
  102. ->method('getExtensionAttributes')
  103. ->willReturn($this->orderItemExtensionMock);
  104. $this->orderItemExtensionMock
  105. ->expects($this->exactly(2))
  106. ->method('getGiftMessage')
  107. ->willReturn($this->giftMessageMock);
  108. $this->giftMessageOrderItemRepositoryMock
  109. ->expects($this->once())->method('save')
  110. ->with($orderId, $orderItemId, $this->giftMessageMock);
  111. $this->plugin->afterSave($this->orderRepositoryMock, $this->orderMock);
  112. }
  113. /**
  114. * @expectedException \Magento\Framework\Exception\CouldNotSaveException
  115. * @expectedExceptionMessage The gift message couldn't be added to the "Test message" order.
  116. */
  117. public function testAfterSaveIfGiftMessagesNotExist()
  118. {
  119. // save Gift Message on order level
  120. $orderId = 1;
  121. $this->orderMock->expects($this->once())->method('getEntityId')->willReturn($orderId);
  122. $this->orderMock
  123. ->expects($this->once())
  124. ->method('getExtensionAttributes')
  125. ->willReturn($this->orderExtensionMock);
  126. $this->orderExtensionMock
  127. ->expects($this->exactly(2))
  128. ->method('getGiftMessage')
  129. ->willReturn($this->giftMessageMock);
  130. $this->giftMessageOrderRepositoryMock
  131. ->expects($this->once())
  132. ->method('save')
  133. ->willThrowException(new \Exception('Test message'));
  134. // save Gift Messages on item level
  135. $this->orderMock->expects($this->never())->method('getItems');
  136. $this->plugin->afterSave($this->orderRepositoryMock, $this->orderMock);
  137. }
  138. /**
  139. * @expectedException \Magento\Framework\Exception\CouldNotSaveException
  140. * @expectedExceptionMessage The gift message couldn't be added to the "Test message" order item.
  141. */
  142. public function testAfterSaveIfItemGiftMessagesNotExist()
  143. {
  144. // save Gift Message on order level
  145. $orderId = 1;
  146. $orderItemId = 2;
  147. $this->orderMock->expects($this->once())->method('getEntityId')->willReturn($orderId);
  148. $this->orderItemMock->expects($this->once())->method('getItemId')->willReturn($orderItemId);
  149. $this->orderMock
  150. ->expects($this->once())
  151. ->method('getExtensionAttributes')
  152. ->willReturn(null);
  153. $this->orderExtensionMock
  154. ->expects($this->never())
  155. ->method('getGiftMessage');
  156. // save Gift Messages on item level
  157. $this->orderMock->expects($this->once())->method('getItems')->willReturn([$this->orderItemMock]);
  158. $this->orderItemMock
  159. ->expects($this->once())
  160. ->method('getExtensionAttributes')
  161. ->willReturn($this->orderItemExtensionMock);
  162. $this->orderItemExtensionMock
  163. ->expects($this->exactly(2))
  164. ->method('getGiftMessage')
  165. ->willReturn($this->giftMessageMock);
  166. $this->giftMessageOrderItemRepositoryMock
  167. ->expects($this->once())->method('save')
  168. ->with($orderId, $orderItemId, $this->giftMessageMock)
  169. ->willThrowException(new \Exception('Test message'));
  170. $this->plugin->afterSave($this->orderRepositoryMock, $this->orderMock);
  171. }
  172. }