Skip to content

Commit d58ec64

Browse files
ENGCOM-6540: Add plugin for SalesOrderItemRepository gift message (#19093) #25946
2 parents f77cef0 + 92547d0 commit d58ec64

File tree

4 files changed

+190
-0
lines changed

4 files changed

+190
-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: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
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+
const SERVICE_NAME = 'salesOrderRepositoryV1';
16+
const RESOURCE_PATH = '/V1/orders/';
17+
18+
/**
19+
* @magentoDataFixture Magento/GiftMessage/_files/order_with_message.php
20+
* @magentoConfigFixture default_store sales/gift_options/allow_order 1
21+
* @magentoAppIsolation enabled
22+
* @magentoDbIsolation disabled
23+
*/
24+
public function testGet()
25+
{
26+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
27+
/** @var \Magento\Sales\Model\Order $order */
28+
$order = $objectManager->create(\Magento\Sales\Model\Order::class)->loadByIncrementId('100000001');
29+
$orderId = $order->getId();
30+
$serviceInfo = [
31+
'rest' => [
32+
'resourcePath' => self::RESOURCE_PATH . $orderId,
33+
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
34+
],
35+
'soap' => [
36+
'service' => self::SERVICE_NAME,
37+
'serviceVersion' => self::SERVICE_VERSION,
38+
'operation' => self::SERVICE_NAME . 'Get',
39+
],
40+
];
41+
$expectedMessage = [
42+
'recipient' => 'Mercutio',
43+
'sender' => 'Romeo',
44+
'message' => 'I thought all for the best.',
45+
];
46+
$requestData = ['id' => $orderId];
47+
$result = $this->_webApiCall($serviceInfo, $requestData);
48+
$resultMessage = $result['extension_attributes']['gift_message'];
49+
static::assertCount(5, $resultMessage);
50+
unset($resultMessage['gift_message_id']);
51+
unset($resultMessage['customer_id']);
52+
static::assertEquals($expectedMessage, $resultMessage);
53+
}
54+
}
Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
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+
const SERVICE_VERSION = 'V1';
15+
const SERVICE_NAME = 'salesOrderItemRepositoryV1';
16+
const RESOURCE_PATH = '/V1/orders/items/';
17+
18+
/**
19+
* @magentoDataFixture Magento/GiftMessage/_files/order_with_message.php
20+
* @magentoConfigFixture default_store sales/gift_options/allow_items 1
21+
* @magentoAppIsolation enabled
22+
* @magentoDbIsolation disabled
23+
*/
24+
public function testGet()
25+
{
26+
$objectManager = \Magento\TestFramework\Helper\Bootstrap::getObjectManager();
27+
/** @var \Magento\Sales\Model\Order $order */
28+
$order = $objectManager->create(\Magento\Sales\Model\Order::class)->loadByIncrementId('100000001');
29+
$items = $order->getItems();
30+
/** @var \Magento\Sales\Api\Data\OrderItemInterface $orderItem */
31+
$orderItem = array_shift($items);
32+
$itemId = $orderItem->getItemId();
33+
$serviceInfo = [
34+
'rest' => [
35+
'resourcePath' => self::RESOURCE_PATH . $itemId,
36+
'httpMethod' => \Magento\Framework\Webapi\Rest\Request::HTTP_METHOD_GET,
37+
],
38+
'soap' => [
39+
'service' => self::SERVICE_NAME,
40+
'serviceVersion' => self::SERVICE_VERSION,
41+
'operation' => self::SERVICE_NAME . 'Get',
42+
],
43+
];
44+
$expectedMessage = [
45+
'recipient' => 'Mercutio',
46+
'sender' => 'Romeo',
47+
'message' => 'I thought all for the best.',
48+
];
49+
$requestData = ['id' => $itemId];
50+
$result = $this->_webApiCall($serviceInfo, $requestData);
51+
$resultMessage = $result['extension_attributes']['gift_message'];
52+
static::assertCount(5, $resultMessage);
53+
unset($resultMessage['gift_message_id']);
54+
unset($resultMessage['customer_id']);
55+
static::assertEquals($expectedMessage, $resultMessage);
56+
}
57+
}

0 commit comments

Comments
 (0)