Skip to content

Commit 5579318

Browse files
committed
Merge remote-tracking branch 'origin/AC-2794' into Hammer_QaulityBacklog_GraphQL_24052022
2 parents 19d13f5 + 4aee39f commit 5579318

File tree

3 files changed

+181
-8
lines changed

3 files changed

+181
-8
lines changed

app/code/Magento/GiftMessageGraphQl/Model/Resolver/Order/GiftMessage.php

Lines changed: 29 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,17 @@
77

88
namespace Magento\GiftMessageGraphQl\Model\Resolver\Order;
99

10+
use Magento\Framework\App\ObjectManager;
1011
use Magento\Framework\Exception\LocalizedException;
1112
use Magento\Framework\GraphQl\Config\Element\Field;
1213
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
1314
use Magento\Framework\GraphQl\Query\Resolver\ContextInterface;
1415
use Magento\Framework\GraphQl\Query\Resolver\Value;
1516
use Magento\Framework\GraphQl\Query\ResolverInterface;
17+
use Magento\Framework\GraphQl\Query\Uid;
1618
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
1719
use Magento\GiftMessage\Api\OrderRepositoryInterface;
20+
use Psr\Log\LoggerInterface;
1821

1922
/**
2023
* Class for getting GiftMessage from CustomerOrder
@@ -24,15 +27,29 @@ class GiftMessage implements ResolverInterface
2427
/**
2528
* @var OrderRepositoryInterface
2629
*/
27-
private $orderRepository;
30+
private OrderRepositoryInterface $orderRepository;
31+
32+
/**
33+
* @var LoggerInterface
34+
*/
35+
private LoggerInterface $logger;
36+
37+
/** @var Uid */
38+
private $uidEncoder;
2839

2940
/**
3041
* @param OrderRepositoryInterface $orderRepository
42+
* @param LoggerInterface|null $logger
43+
* @param Uid|null $uidEncoder
3144
*/
3245
public function __construct(
33-
OrderRepositoryInterface $orderRepository
46+
OrderRepositoryInterface $orderRepository,
47+
LoggerInterface $logger = null,
48+
Uid $uidEncoder = null
3449
) {
3550
$this->orderRepository = $orderRepository;
51+
$this->logger = $logger ?? ObjectManager::getInstance()->get(LoggerInterface::class);
52+
$this->uidEncoder = $uidEncoder ?? ObjectManager::getInstance()->get(Uid::class);
3653
}
3754

3855
/**
@@ -58,12 +75,19 @@ public function resolve(
5875
if (!isset($value['id'])) {
5976
throw new GraphQlInputException(__('"id" value should be specified'));
6077
}
61-
// phpcs:ignore Magento2.Functions.DiscouragedFunction
62-
$orderId = (int)base64_decode($value['id']) ?: (int)$value['id'];
78+
79+
$orderId = $this->uidEncoder->decode((string) $this->uidEncoder->encode((string) $value['id']));
80+
6381
try {
6482
$orderGiftMessage = $this->orderRepository->get($orderId);
6583
} catch (LocalizedException $e) {
66-
throw new GraphQlInputException(__('Can\'t load gift message for order'));
84+
$this->logger->error(__('Can\'t load gift message for order'));
85+
86+
return null;
87+
}
88+
89+
if (!$orderGiftMessage->getGiftMessageId()) {
90+
return null;
6791
}
6892

6993
return [
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
<?php
2+
/**
3+
*
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
declare(strict_types=1);
8+
9+
namespace Magento\GiftMessageGraphQl\Test\Unit\Model\Resolver\Order;
10+
11+
use Magento\Framework\GraphQl\Config\Element\Field;
12+
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
13+
use Magento\Framework\GraphQl\Query\Resolver\ContextInterface;
14+
use Magento\Framework\GraphQl\Query\Resolver\Value;
15+
use Magento\Framework\GraphQl\Query\ResolverInterface;
16+
use Magento\Framework\GraphQl\Query\Uid;
17+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
18+
use Magento\GiftMessage\Api\Data\MessageInterface;
19+
use Magento\GiftMessage\Api\OrderRepositoryInterface;
20+
use Magento\GiftMessageGraphQl\Model\Resolver\Order\GiftMessage;
21+
use PHPUnit\Framework\MockObject\MockObject;
22+
use PHPUnit\Framework\TestCase;
23+
use Psr\Log\LoggerInterface;
24+
25+
class GiftMessageTest extends TestCase
26+
{
27+
/**
28+
* @var GiftMessage
29+
*/
30+
private GiftMessage $giftMessage;
31+
32+
/**
33+
* @var Field|MockObject
34+
*/
35+
private Field $fieldMock;
36+
37+
/**
38+
* @var ContextInterface|MockObject
39+
*/
40+
private ContextInterface $contextMock;
41+
42+
/**
43+
* @var ResolverInterface|MockObject
44+
*/
45+
private ResolverInterface $resolverMock;
46+
47+
/**
48+
* @var ResolveInfo|MockObject
49+
*/
50+
private ResolveInfo $resolveInfoMock;
51+
52+
/**
53+
* @var OrderRepositoryInterface|MockObject
54+
*/
55+
private OrderRepositoryInterface $orderRepositoryMock;
56+
57+
/**
58+
* @var MessageInterface|MockObject
59+
*/
60+
private MessageInterface $messageMock;
61+
62+
/**
63+
* @var array
64+
*/
65+
private array $valueMock = [];
66+
67+
protected function setUp(): void
68+
{
69+
$this->fieldMock = $this->createMock(Field::class);
70+
$this->contextMock = $this->createMock(ContextInterface::class);
71+
$this->resolverMock = $this->createMock(ResolverInterface::class);
72+
$this->resolveInfoMock = $this->createMock(ResolveInfo::class);
73+
$this->orderRepositoryMock =$this->createMock(OrderRepositoryInterface::class);
74+
$logger = $this->createMock(LoggerInterface::class);
75+
$uidEncoder = $this->createMock(Uid::class);
76+
$this->messageMock = $this->createMock(MessageInterface::class);
77+
$this->giftMessage = new GiftMessage(
78+
$this->orderRepositoryMock,
79+
$logger,
80+
$uidEncoder
81+
);
82+
}
83+
84+
/**
85+
* @throws GraphQlInputException
86+
*/
87+
public function testResolveWithoutIDInValueParameter(): void
88+
{
89+
$this->expectException(GraphQlInputException::class);
90+
$this->expectExceptionMessage('"id" value should be specified');
91+
$this->giftMessage->resolve($this->fieldMock, $this->contextMock, $this->resolveInfoMock, $this->valueMock);
92+
}
93+
94+
/**
95+
* @throws GraphQlInputException
96+
*/
97+
public function testResolve(): void
98+
{
99+
$this->valueMock = ['id' => "111"];
100+
$this->orderRepositoryMock
101+
->expects($this->once())
102+
->method('get')
103+
->willReturn($this->messageMock);
104+
105+
$this->messageMock
106+
->expects($this->once())
107+
->method('getGiftMessageId')
108+
->willReturn(null);
109+
110+
$this->assertEquals(
111+
null,
112+
$this->giftMessage->resolve($this->fieldMock, $this->contextMock, $this->resolveInfoMock, $this->valueMock)
113+
);
114+
}
115+
116+
/**
117+
* @return array|Value|mixed
118+
* @throws GraphQlInputException
119+
*/
120+
public function testResolveWithMessageId(): void
121+
{
122+
$this->valueMock = ['id' => "112"];
123+
$this->orderRepositoryMock
124+
->expects($this->once())
125+
->method('get')
126+
->willReturn($this->messageMock);
127+
128+
$this->messageMock
129+
->expects($this->once())
130+
->method('getGiftMessageId')
131+
->willReturn(1);
132+
133+
$this->assertEquals(
134+
[
135+
'to' => '',
136+
'from' => '',
137+
'message' =>''
138+
],
139+
$this->giftMessage->resolve($this->fieldMock, $this->contextMock, $this->resolveInfoMock, $this->valueMock)
140+
);
141+
}
142+
}

dev/tests/api-functional/testsuite/Magento/GraphQl/GiftMessage/Order/GiftMessageTest.php

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,16 @@ public function testGiftMessageNotAllowForOrder()
5959
$query = $this->getCustomerOrdersQuery();
6060
$currentEmail = 'customer@example.com';
6161
$currentPassword = 'password';
62-
$this->expectException(\Exception::class);
63-
$this->expectExceptionMessage('Can\'t load gift message for order');
64-
$this->graphQlQuery($query, [], '', $this->getCustomerAuthHeaders($currentEmail, $currentPassword));
62+
$response = $this->graphQlQuery(
63+
$query,
64+
[],
65+
'',
66+
$this->getCustomerAuthHeaders($currentEmail, $currentPassword)
67+
);
68+
self::assertEquals(1, count($response['customerOrders']));
69+
foreach ($response['customerOrders']['items'] as $order) {
70+
self::assertArrayHasKey('gift_message', $order);
71+
}
6572
}
6673

6774
/**

0 commit comments

Comments
 (0)