ShipmentTest.php 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. /**
  3. * Copyright © Magento, Inc. All rights reserved.
  4. * See COPYING.txt for license details.
  5. */
  6. declare(strict_types=1);
  7. namespace Magento\Sales\Model\Order;
  8. use Magento\Framework\Api\SearchCriteriaBuilder;
  9. use Magento\Payment\Helper\Data;
  10. use Magento\Sales\Api\Data\CommentInterface;
  11. use Magento\Sales\Api\Data\OrderInterface;
  12. use Magento\Sales\Api\Data\ShipmentInterface;
  13. use Magento\Sales\Api\Data\ShipmentItemInterface;
  14. use Magento\Sales\Api\Data\ShipmentTrackInterface;
  15. use Magento\Sales\Api\OrderRepositoryInterface;
  16. use Magento\Sales\Api\ShipmentRepositoryInterface;
  17. use Magento\TestFramework\Helper\Bootstrap;
  18. use Magento\TestFramework\ObjectManager;
  19. /**
  20. * @magentoAppIsolation enabled
  21. * @magentoDataFixture Magento/Sales/_files/order.php
  22. */
  23. class ShipmentTest extends \PHPUnit\Framework\TestCase
  24. {
  25. /**
  26. * @var ObjectManager
  27. */
  28. private $objectManager;
  29. /**
  30. * @var ShipmentRepositoryInterface
  31. */
  32. private $shipmentRepository;
  33. /**
  34. * @inheritdoc
  35. */
  36. protected function setUp()
  37. {
  38. $this->objectManager = Bootstrap::getObjectManager();
  39. $this->shipmentRepository = $this->objectManager->get(ShipmentRepositoryInterface::class);
  40. }
  41. /**
  42. * Check the correctness and stability of set/get packages of shipment
  43. *
  44. * @magentoAppArea frontend
  45. */
  46. public function testPackages()
  47. {
  48. $order = $this->getOrder('100000001');
  49. $payment = $order->getPayment();
  50. $paymentInfoBlock = $this->objectManager->get(Data::class)
  51. ->getInfoBlock($payment);
  52. $payment->setBlockMock($paymentInfoBlock);
  53. $items = [];
  54. foreach ($order->getItems() as $item) {
  55. $items[$item->getId()] = $item->getQtyOrdered();
  56. }
  57. /** @var \Magento\Sales\Model\Order\Shipment $shipment */
  58. $shipment = $this->objectManager->get(ShipmentFactory::class)->create($order, $items);
  59. $packages = [['1'], ['2']];
  60. $shipment->setPackages($packages);
  61. $saved = $this->shipmentRepository->save($shipment);
  62. self::assertEquals($packages, $saved->getPackages());
  63. }
  64. /**
  65. * Check that getTracksCollection() always return collection instance.
  66. */
  67. public function testAddTrack()
  68. {
  69. $order = $this->getOrder('100000001');
  70. /** @var ShipmentTrackInterface $track */
  71. $track = $this->objectManager->create(ShipmentTrackInterface::class);
  72. $track->setNumber('Test Number')
  73. ->setTitle('Test Title')
  74. ->setCarrierCode('Test CODE');
  75. $items = [];
  76. foreach ($order->getItems() as $item) {
  77. $items[$item->getId()] = $item->getQtyOrdered();
  78. }
  79. /** @var \Magento\Sales\Model\Order\Shipment $shipment */
  80. $shipment = $this->objectManager->get(ShipmentFactory::class)
  81. ->create($order, $items);
  82. $shipment->addTrack($track);
  83. $this->shipmentRepository->save($shipment);
  84. $saved = $this->shipmentRepository->get((int)$shipment->getEntityId());
  85. self::assertNotEmpty($saved->getTracks());
  86. }
  87. /**
  88. * Checks adding comment to the shipment entity.
  89. */
  90. public function testAddComment()
  91. {
  92. $message1 = 'Test Comment 1';
  93. $message2 = 'Test Comment 2';
  94. $order = $this->getOrder('100000001');
  95. /** @var ShipmentInterface $shipment */
  96. $shipment = $this->objectManager->create(ShipmentInterface::class);
  97. $shipment->setOrder($order)
  98. ->addItem($this->objectManager->create(ShipmentItemInterface::class))
  99. ->addComment($message1)
  100. ->addComment($message2);
  101. $saved = $this->shipmentRepository->save($shipment);
  102. $comments = $saved->getComments();
  103. $actual = array_map(function (CommentInterface $comment) {
  104. return $comment->getComment();
  105. }, $comments);
  106. self::assertEquals(2, count($actual));
  107. self::assertEquals([$message1, $message2], $actual);
  108. }
  109. /**
  110. * Gets order entity by increment id.
  111. *
  112. * @param string $incrementId
  113. * @return OrderInterface
  114. */
  115. private function getOrder(string $incrementId): OrderInterface
  116. {
  117. /** @var SearchCriteriaBuilder $searchCriteriaBuilder */
  118. $searchCriteriaBuilder = $this->objectManager->get(SearchCriteriaBuilder::class);
  119. $searchCriteria = $searchCriteriaBuilder->addFilter('increment_id', $incrementId)
  120. ->create();
  121. /** @var OrderRepositoryInterface $repository */
  122. $repository = $this->objectManager->get(OrderRepositoryInterface::class);
  123. $items = $repository->getList($searchCriteria)
  124. ->getItems();
  125. return array_pop($items);
  126. }
  127. }