Skip to content

Commit dbaf8a5

Browse files
committed
Add GiftMessageGraphQL module
1 parent 1e28f35 commit dbaf8a5

File tree

8 files changed

+198
-0
lines changed

8 files changed

+198
-0
lines changed
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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\GiftMessageGraphQl\Model\Resolver\Cart;
9+
10+
use Magento\Framework\GraphQl\Config\Element\Field;
11+
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
12+
use Magento\Framework\GraphQl\Query\Resolver\ContextInterface;
13+
use Magento\Framework\GraphQl\Query\Resolver\Value;
14+
use Magento\Framework\GraphQl\Query\ResolverInterface;
15+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
16+
use Magento\GiftMessage\Api\CartRepositoryInterface;
17+
18+
/**
19+
* Class provides ability to get GiftMessage for cart
20+
*/
21+
class GiftMessage implements ResolverInterface
22+
{
23+
/**
24+
* @var CartRepositoryInterface
25+
*/
26+
private $cartRepository;
27+
28+
/**
29+
* GiftMessage constructor.
30+
*
31+
* @param CartRepositoryInterface $cartRepository
32+
*/
33+
public function __construct(
34+
CartRepositoryInterface $cartRepository
35+
) {
36+
$this->cartRepository = $cartRepository;
37+
}
38+
39+
/**
40+
* Return information about Gift message of cart
41+
*
42+
* @param Field $field
43+
* @param ContextInterface $context
44+
* @param ResolveInfo $info
45+
* @param array|null $value
46+
* @param array|null $args
47+
*
48+
* @return array|Value|mixed
49+
*
50+
* @throws GraphQlInputException
51+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
52+
*/
53+
public function resolve(
54+
Field $field,
55+
$context,
56+
ResolveInfo $info,
57+
array $value = null,
58+
array $args = null
59+
) {
60+
if (!isset($value['model'])) {
61+
throw new GraphQlInputException(__('"model" value should be specified'));
62+
}
63+
$cart = $value['model'];
64+
65+
$giftCartMessage = $this->cartRepository->get($cart->getId());
66+
67+
if ($giftCartMessage === null) {
68+
throw new GraphQlInputException(__("Gift message doesn't exist for current cart"));
69+
}
70+
71+
return [
72+
'to' => $giftCartMessage->getRecipient() ?? '',
73+
'from' => $giftCartMessage->getSender() ?? '',
74+
'message'=> $giftCartMessage->getMessage() ?? ''
75+
];
76+
}
77+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# GiftMessageGraphQl
2+
3+
**GiftMessageGraphQl** provides information about gift messages for cart, cart items, order and order items.
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"name": "magento/module-gift-message-graph-ql",
3+
"description": "N/A",
4+
"type": "magento2-module",
5+
"require": {
6+
"php": "~7.1.3||~7.2.0||~7.3.0",
7+
"magento/framework": "*",
8+
"magento/module-graph-ql": "*",
9+
"magento/module-gift-message": "*"
10+
},
11+
"license": [
12+
"OSL-3.0",
13+
"AFL-3.0"
14+
],
15+
"autoload": {
16+
"files": [
17+
"registration.php"
18+
],
19+
"psr-4": {
20+
"Magento\\GiftMessageGraphQl\\": ""
21+
}
22+
}
23+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<?xml version="1.0"?>
2+
<!--
3+
/**
4+
* Copyright © Magento, Inc. All rights reserved.
5+
* See COPYING.txt for license details.
6+
*/
7+
-->
8+
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
9+
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
10+
<module name="Magento_GiftMessageGraphQl">
11+
<sequence>
12+
<module name="Magento_GraphQl"/>
13+
</sequence>
14+
</module>
15+
</config>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
# Copyright © Magento, Inc. All rights reserved.
2+
# See COPYING.txt for license details.
3+
4+
type Cart {
5+
gift_message: GiftMessage @resolver (class: "\\Magento\\GiftMessageGraphQl\\Model\\Resolver\\Cart\\GiftMessage") @doc(description: "The entered gift message for the cart")
6+
}
7+
8+
type GiftMessage {
9+
to: String! @doc(description: "Recepient name")
10+
from: String! @doc(description: "Sender name")
11+
message: String! @doc(description: "Gift message text")
12+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
use Magento\Framework\Component\ComponentRegistrar;
8+
9+
ComponentRegistrar::register(
10+
ComponentRegistrar::MODULE,
11+
'Magento_GiftMessageGraphQl',
12+
__DIR__
13+
);

composer.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,7 @@
167167
"magento/module-encryption-key": "*",
168168
"magento/module-fedex": "*",
169169
"magento/module-gift-message": "*",
170+
"magento/module-gift-message-graph-ql": "*",
170171
"magento/module-google-adwords": "*",
171172
"magento/module-google-analytics": "*",
172173
"magento/module-google-optimizer": "*",
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\GraphQl\GiftMessage\Cart;
9+
10+
use Exception;
11+
use Magento\Framework\Exception\NoSuchEntityException;
12+
use Magento\GraphQl\Quote\GetMaskedQuoteIdByReservedOrderId;
13+
use Magento\TestFramework\Helper\Bootstrap;
14+
use Magento\TestFramework\TestCase\GraphQlAbstract;
15+
16+
class GiftMessageTest extends GraphQlAbstract
17+
{
18+
/**
19+
* @var GetMaskedQuoteIdByReservedOrderId
20+
*/
21+
private $getMaskedQuoteIdByReservedOrderId;
22+
23+
protected function setUp()
24+
{
25+
$objectManager = Bootstrap::getObjectManager();
26+
$this->getMaskedQuoteIdByReservedOrderId = $objectManager->get(GetMaskedQuoteIdByReservedOrderId::class);
27+
}
28+
29+
/**
30+
* @magentoApiDataFixture Magento/GiftMessage/_files/quote_with_message.php
31+
* @throws NoSuchEntityException
32+
* @throws Exception
33+
*/
34+
public function testGiftMessageForCart()
35+
{
36+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('message_order_21');
37+
$query = <<<QUERY
38+
{
39+
cart(cart_id: "$maskedQuoteId") {
40+
gift_message {
41+
to
42+
from
43+
message
44+
}
45+
}
46+
}
47+
QUERY;
48+
$response = $this->graphQlQuery($query);
49+
self::assertArrayHasKey('gift_message', $response['cart']);
50+
self::assertArrayHasKey('to', $response['cart']['gift_message']);
51+
self::assertArrayHasKey('from', $response['cart']['gift_message']);
52+
self::assertArrayHasKey('message', $response['cart']['gift_message']);
53+
}
54+
}

0 commit comments

Comments
 (0)