Skip to content

Commit db4fe3a

Browse files
committed
Add GiftMessageGraphQL module and add gift_message query for cart
1 parent 1e28f35 commit db4fe3a

File tree

7 files changed

+187
-0
lines changed

7 files changed

+187
-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\GiftMessageGraphQl\Model\Resolver;
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 Gift Message
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+
*/
52+
public function resolve(
53+
Field $field,
54+
$context,
55+
ResolveInfo $info,
56+
array $value = null,
57+
array $args = null
58+
) {
59+
if (!isset($value['model'])) {
60+
throw new GraphQlInputException(__('"model" value should be specified'));
61+
}
62+
$cart = $value['model'];
63+
64+
$giftCartMessage = $this->cartRepository->get($cart->getId());
65+
66+
if (is_null($giftCartMessage)) {
67+
throw new GraphQlInputException(__("Gift message doesn't exist for current cart"));
68+
}
69+
70+
return [
71+
'to' => $giftCartMessage->getRecipient() ?? '',
72+
'from' => $giftCartMessage->getSender() ?? '',
73+
'message'=> $giftCartMessage->getMessage() ?? ''
74+
];
75+
}
76+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# GiftMessageGraphQl
2+
3+
**GiftMessageGraphQl**
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
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-gift-message": "*"
9+
},
10+
"license": [
11+
"OSL-3.0",
12+
"AFL-3.0"
13+
],
14+
"autoload": {
15+
"files": [
16+
"registration.php"
17+
],
18+
"psr-4": {
19+
"Magento\\GiftMessageGraphQl\\": ""
20+
}
21+
}
22+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
</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\\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+
);
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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+
use Magento\GraphQl\Quote\GetMaskedQuoteIdByReservedOrderId;
9+
use Magento\TestFramework\Helper\Bootstrap;
10+
use Magento\TestFramework\TestCase\GraphQlAbstract;
11+
12+
class GiftMessageTest extends GraphQlAbstract
13+
{
14+
/**
15+
* @var GetMaskedQuoteIdByReservedOrderId
16+
*/
17+
private $getMaskedQuoteIdByReservedOrderId;
18+
19+
protected function setUp()
20+
{
21+
$objectManager = Bootstrap::getObjectManager();
22+
$this->getMaskedQuoteIdByReservedOrderId = $objectManager->get(GetMaskedQuoteIdByReservedOrderId::class);
23+
}
24+
25+
/**
26+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
27+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
28+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
29+
*/
30+
public function testGiftMessageForCart()
31+
{
32+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
33+
$query = <<<QUERY
34+
{
35+
cart(cart_id: "$maskedQuoteId") {
36+
gift_message {
37+
to
38+
from
39+
message
40+
}
41+
}
42+
}
43+
QUERY;
44+
$response = $this->graphQlQuery($query);
45+
self::assertArrayHasKey('gift_message', $response['cart']);
46+
self::assertArrayHasKey('to', $response['cart']['gift_message']);
47+
self::assertArrayHasKey('from', $response['cart']['gift_message']);
48+
self::assertArrayHasKey('message', $response['cart']['gift_message']);
49+
}
50+
}

0 commit comments

Comments
 (0)