Skip to content

Commit 30b5818

Browse files
committed
Add plugin for SalesOrderItemRepository gift message (#19093)
1 parent 9125aa6 commit 30b5818

File tree

4 files changed

+204
-0
lines changed

4 files changed

+204
-0
lines changed
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\GiftMessage\Model\Plugin;
9+
10+
use Magento\Framework\Exception\NoSuchEntityException;
11+
use Magento\GiftMessage\Api\OrderItemRepositoryInterface as GiftMessageItemRepositoryInterface;
12+
use Magento\Sales\Api\Data\OrderItemExtensionFactory;
13+
use Magento\Sales\Api\Data\OrderItemInterface;
14+
use Magento\Sales\Api\OrderItemRepositoryInterface;
15+
16+
/**
17+
* Plugin for adding gift message to order item
18+
*/
19+
class OrderItemGet
20+
{
21+
22+
/**
23+
* @var OrderItemExtensionFactory
24+
*/
25+
private $orderItemExtensionFactory;
26+
27+
/**
28+
* @var GiftMessageItemRepositoryInterface
29+
*/
30+
private $giftMessageItemRepository;
31+
32+
/**
33+
* OrderItemGet constructor.
34+
*
35+
* @param GiftMessageItemRepositoryInterface $giftMessageItemRepository
36+
* @param OrderItemExtensionFactory $orderItemExtensionFactory
37+
*/
38+
public function __construct(
39+
GiftMessageItemRepositoryInterface $giftMessageItemRepository,
40+
OrderItemExtensionFactory $orderItemExtensionFactory
41+
) {
42+
$this->giftMessageItemRepository = $giftMessageItemRepository;
43+
$this->orderItemExtensionFactory = $orderItemExtensionFactory;
44+
}
45+
46+
/**
47+
* Add gift message for order item
48+
*
49+
* @param OrderItemRepositoryInterface $subject
50+
* @param OrderItemInterface $orderItem
51+
* @return OrderItemInterface
52+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
53+
*/
54+
public function afterGet(OrderItemRepositoryInterface $subject, OrderItemInterface $orderItem)
55+
{
56+
$extensionAttributes = $orderItem->getExtensionAttributes();
57+
if ($extensionAttributes && $extensionAttributes->getGiftMessage()) {
58+
return $orderItem;
59+
}
60+
try {
61+
/* @var \Magento\GiftMessage\Api\Data\MessageInterface $giftMessage */
62+
$giftMessage = $this->giftMessageItemRepository->get(
63+
$orderItem->getOrderId(),
64+
$orderItem->getItemId()
65+
);
66+
} catch (NoSuchEntityException $e) {
67+
return $orderItem;
68+
}
69+
/** @var \Magento\Sales\Api\Data\OrderItemExtension $orderItemExtension */
70+
$orderItemExtension = $extensionAttributes ?: $this->orderItemExtensionFactory->create();
71+
$orderItemExtension->setGiftMessage($giftMessage);
72+
$orderItem->setExtensionAttributes($orderItemExtension);
73+
74+
return $orderItem;
75+
}
76+
}

app/code/Magento/GiftMessage/etc/di.xml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,7 @@
3737
</argument>
3838
</arguments>
3939
</type>
40+
<type name="Magento\Sales\Api\OrderItemRepositoryInterface">
41+
<plugin name="get_gift_message" type="Magento\GiftMessage\Model\Plugin\OrderItemGet"/>
42+
</type>
4043
</config>
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\GiftMessage\Api;
9+
10+
use Magento\TestFramework\TestCase\WebapiAbstract;
11+
12+
class OrderGetRepositoryTest extends WebapiAbstract
13+
{
14+
const SERVICE_VERSION = 'V1';
15+
16+
const SERVICE_NAME = 'giftMessageItemRepositoryV1';
17+
18+
const RESOURCE_PATH = '/V1/orders/';
19+
20+
/**
21+
* @magentoDataFixture Magento/GiftMessage/_files/order_with_message.php
22+
* @magentoConfigFixture default_store sales/gift_options/allow_order 1
23+
* @magentoAppIsolation enabled
24+
* @magentoDbIsolation disabled
25+
*/
26+
public function testGet()
27+
{
28+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
29+
/** @var \Magento\Sales\Model\Order $order */
30+
$order = $objectManager->create(\Magento\Sales\Model\Order::class)->loadByIncrementId('100000001');
31+
$orderId = $order->getId();
32+
$serviceInfo = [
33+
'rest' => [
34+
'resourcePath' => self::RESOURCE_PATH . $orderId,
35+
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
36+
],
37+
'soap' => [
38+
'service' => self::SERVICE_NAME,
39+
'serviceVersion' => self::SERVICE_VERSION,
40+
'operation' => self::SERVICE_NAME . 'Get',
41+
],
42+
];
43+
$expectedMessage = [
44+
'recipient' => 'Mercutio',
45+
'sender' => 'Romeo',
46+
'message' => 'I thought all for the best.',
47+
];
48+
$requestData = ["orderId" => $orderId];
49+
$result = $this->_webApiCall($serviceInfo, $requestData);
50+
$resultMessage = $result['extension_attributes']['gift_message'];
51+
static::assertCount(5, $resultMessage);
52+
unset($resultMessage['gift_message_id']);
53+
unset($resultMessage['customer_id']);
54+
static::assertEquals($expectedMessage, $resultMessage);
55+
}
56+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
declare(strict_types=1);
7+
8+
namespace Magento\GiftMessage\Api;
9+
10+
use Magento\TestFramework\TestCase\WebapiAbstract;
11+
12+
class OrderItemGetRepositoryTest extends WebapiAbstract
13+
{
14+
15+
const SERVICE_VERSION = 'V1';
16+
17+
const SERVICE_NAME = 'giftMessageItemRepositoryV1';
18+
19+
const RESOURCE_PATH = '/V1/orders/items/';
20+
21+
/**
22+
* @var \Magento\TestFramework\ObjectManager
23+
*/
24+
protected $objectManager;
25+
26+
protected function setUp()
27+
{
28+
$this->objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
29+
}
30+
31+
/**
32+
* @magentoDataFixture Magento/GiftMessage/_files/order_with_message.php
33+
* @magentoConfigFixture default_store sales/gift_options/allow_items 1
34+
* @magentoAppIsolation enabled
35+
* @magentoDbIsolation disabled
36+
*/
37+
public function testGet()
38+
{
39+
/** @var \Magento\Sales\Model\Order $order */
40+
$order = $this->objectManager->create(\Magento\Sales\Model\Order::class)->loadByIncrementId('100000001');
41+
$items = $order->getItems();
42+
/** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
43+
$orderItem = array_shift($items);
44+
$itemId = $orderItem->getItemId();
45+
$serviceInfo = [
46+
'rest' => [
47+
'resourcePath' => self::RESOURCE_PATH . $itemId,
48+
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
49+
],
50+
'soap' => [
51+
'service' => self::SERVICE_NAME,
52+
'serviceVersion' => self::SERVICE_VERSION,
53+
'operation' => self::SERVICE_NAME . 'Get',
54+
],
55+
];
56+
$expectedMessage = [
57+
'recipient' => 'Mercutio',
58+
'sender' => 'Romeo',
59+
'message' => 'I thought all for the best.',
60+
];
61+
$requestData = ["orderItemId" => $itemId];
62+
$result = $this->_webApiCall($serviceInfo, $requestData);
63+
$resultMessage = $result['extension_attributes']['gift_message'];
64+
static::assertCount(5, $resultMessage);
65+
unset($resultMessage['gift_message_id']);
66+
unset($resultMessage['customer_id']);
67+
static::assertEquals($expectedMessage, $resultMessage);
68+
}
69+
}

0 commit comments

Comments
 (0)