Skip to content

Commit b356f78

Browse files
committed
AC-2794::GraphQl. Mutation: customerOrders query and gift_message attribute
2 parents f1adf23 + 03a3b6c commit b356f78

File tree

2 files changed

+163
-3
lines changed

2 files changed

+163
-3
lines changed

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

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
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;
@@ -15,6 +16,7 @@
1516
use Magento\Framework\GraphQl\Query\ResolverInterface;
1617
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
1718
use Magento\GiftMessage\Api\OrderRepositoryInterface;
19+
use Psr\Log\LoggerInterface;
1820

1921
/**
2022
* Class for getting GiftMessage from CustomerOrder
@@ -24,15 +26,22 @@ class GiftMessage implements ResolverInterface
2426
/**
2527
* @var OrderRepositoryInterface
2628
*/
27-
private $orderRepository;
29+
private OrderRepositoryInterface $orderRepository;
30+
31+
/**
32+
* @var LoggerInterface
33+
*/
34+
private LoggerInterface $logger;
2835

2936
/**
3037
* @param OrderRepositoryInterface $orderRepository
3138
*/
3239
public function __construct(
33-
OrderRepositoryInterface $orderRepository
40+
OrderRepositoryInterface $orderRepository,
41+
LoggerInterface $logger = null
3442
) {
3543
$this->orderRepository = $orderRepository;
44+
$this->logger = $logger ?? ObjectManager::getInstance()->get(LoggerInterface::class);
3645
}
3746

3847
/**
@@ -60,10 +69,17 @@ public function resolve(
6069
}
6170
// phpcs:ignore Magento2.Functions.DiscouragedFunction
6271
$orderId = (int)base64_decode($value['id']) ?: (int)$value['id'];
72+
6373
try {
6474
$orderGiftMessage = $this->orderRepository->get($orderId);
6575
} catch (LocalizedException $e) {
66-
throw new GraphQlInputException(__('Can\'t load gift message for order'));
76+
$this->logger->error(__('Can\'t load gift message for order'));
77+
78+
return null;
79+
}
80+
81+
if (!$orderGiftMessage->getGiftMessageId()) {
82+
return null;
6783
}
6884

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

0 commit comments

Comments
 (0)