Skip to content

Commit 034af40

Browse files
committed
PR 28072 Add coverage for cart items
1 parent b059e51 commit 034af40

File tree

5 files changed

+253
-0
lines changed

5 files changed

+253
-0
lines changed
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
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\Item;
9+
10+
use Magento\Framework\Exception\LocalizedException;
11+
use Magento\Framework\Exception\NoSuchEntityException;
12+
use Magento\Framework\GraphQl\Config\Element\Field;
13+
use Magento\Framework\GraphQl\Exception\GraphQlInputException;
14+
use Magento\Framework\GraphQl\Query\Resolver\ContextInterface;
15+
use Magento\Framework\GraphQl\Query\Resolver\Value;
16+
use Magento\Framework\GraphQl\Query\ResolverInterface;
17+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
18+
use Magento\GiftMessage\Api\ItemRepositoryInterface;
19+
20+
/**
21+
* Class provides ability to get GiftMessage for cart item
22+
*/
23+
class GiftMessage implements ResolverInterface
24+
{
25+
/**
26+
* @var ItemRepositoryInterface
27+
*/
28+
private $itemRepository;
29+
30+
/**
31+
* GiftMessageItem constructor.
32+
*
33+
* @param ItemRepositoryInterface $itemRepository
34+
*/
35+
public function __construct(
36+
ItemRepositoryInterface $itemRepository
37+
) {
38+
$this->itemRepository = $itemRepository;
39+
}
40+
41+
/**
42+
* Return information about Gift message for item cart
43+
*
44+
* @param Field $field
45+
* @param ContextInterface $context
46+
* @param ResolveInfo $info
47+
* @param array|null $value
48+
* @param array|null $args
49+
*
50+
* @return array|Value|mixed
51+
* @throws GraphQlInputException
52+
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
53+
*/
54+
public function resolve(
55+
Field $field,
56+
$context,
57+
ResolveInfo $info,
58+
array $value = null,
59+
array $args = null
60+
) {
61+
if (!isset($value['model'])) {
62+
throw new GraphQlInputException(__('"model" value should be specified'));
63+
}
64+
65+
$quoteItem = $value['model'];
66+
67+
try {
68+
$giftItemMessage = $this->itemRepository->get($quoteItem->getQuoteId(), $quoteItem->getItemId());
69+
} catch (LocalizedException $e) {
70+
throw new GraphQlInputException(__('Can\'t load cart item'));
71+
}
72+
73+
return [
74+
'to' => isset($giftItemMessage) ? $giftItemMessage->getRecipient() : '',
75+
'from' => isset($giftItemMessage) ? $giftItemMessage->getSender() : '',
76+
'message'=> isset($giftItemMessage) ? $giftItemMessage->getMessage() : ''
77+
];
78+
}
79+
}

app/code/Magento/GiftMessageGraphQl/etc/schema.graphqls

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,22 @@ type Cart {
55
gift_message: GiftMessage @resolver (class: "\\Magento\\GiftMessageGraphQl\\Model\\Resolver\\Cart\\GiftMessage") @doc(description: "The entered gift message for the cart")
66
}
77

8+
type SimpleCartItem {
9+
gift_message: GiftMessage @resolver (class: "\\Magento\\GiftMessageGraphQl\\Model\\Resolver\\Cart\\Item\\GiftMessage") @doc(description: "The entered gift message for the cart item")
10+
}
11+
12+
type ConfigurableCartItem {
13+
gift_message: GiftMessage @resolver (class: "\\Magento\\GiftMessageGraphQl\\Model\\Resolver\\Cart\\Item\\GiftMessage") @doc(description: "The entered gift message for the cart item")
14+
}
15+
16+
type BundleCartItem {
17+
gift_message: GiftMessage @resolver (class: "\\Magento\\GiftMessageGraphQl\\Model\\Resolver\\Cart\\Item\\GiftMessage") @doc(description: "The entered gift message for the cart item")
18+
}
19+
20+
type GiftCardCartItem {
21+
gift_message: GiftMessage @resolver (class: "\\Magento\\GiftMessageGraphQl\\Model\\Resolver\\Cart\\Item\\GiftMessage") @doc(description: "The entered gift message for the cart item")
22+
}
23+
824
type GiftMessage {
925
to: String! @doc(description: "Recepient name")
1026
from: String! @doc(description: "Sender name")
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
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\Item;
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/guest/quote_with_item_message.php
31+
* @throws NoSuchEntityException
32+
* @throws Exception
33+
*/
34+
public function testGiftMessageCartForItem()
35+
{
36+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_guest_order_with_gift_message');
37+
$query = <<<QUERY
38+
{
39+
cart(cart_id: "$maskedQuoteId") {
40+
items {
41+
product {
42+
name
43+
}
44+
... on SimpleCartItem {
45+
gift_message {
46+
to
47+
from
48+
message
49+
}
50+
}
51+
}
52+
}
53+
}
54+
QUERY;
55+
$response = $this->graphQlQuery($query);
56+
foreach ($response['cart']['items'] as $item) {
57+
self::assertArrayHasKey('gift_message', $item);
58+
self::assertArrayHasKey('to', $item['gift_message']);
59+
self::assertArrayHasKey('from', $item['gift_message']);
60+
self::assertArrayHasKey('message', $item['gift_message']);
61+
}
62+
}
63+
}
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
require __DIR__ . '/../../../../Magento/Catalog/_files/products.php';
8+
9+
use Magento\Catalog\Model\Product;
10+
use Magento\Framework\ObjectManagerInterface;
11+
use Magento\GiftMessage\Model\Message;
12+
use Magento\GiftMessage\Model\ResourceModel\Message as MessageResource;
13+
use Magento\Quote\Model\Quote;
14+
use Magento\Quote\Model\QuoteIdMask;
15+
use Magento\Quote\Model\ResourceModel\Quote as QuoteResource;
16+
use Magento\Quote\Model\ResourceModel\Quote\QuoteIdMask as QuoteIdMaskResource;
17+
use Magento\Quote\Model\ResourceModel\Quote\QuoteIdMaskFactory;
18+
use Magento\TestFramework\Helper\Bootstrap;
19+
20+
/** @var ObjectManagerInterface $objectManager */
21+
$objectManager = Bootstrap::getObjectManager();
22+
23+
/** @var QuoteResource $quote */
24+
$quote = $objectManager->create(QuoteResource::class);
25+
26+
/** @var Quote $quoteModel */
27+
$quoteModel = $objectManager->create(Quote::class);
28+
$quoteModel->setData(['store_id' => 1, 'is_active' => 1, 'is_multi_shipping' => 0]);
29+
$quote->save($quoteModel);
30+
31+
$product = $objectManager->create(Product::class);
32+
$quoteProduct = $product->load($product->getIdBySku('simple'));
33+
34+
$quoteModel->setReservedOrderId('test_guest_order_with_gift_message')
35+
->addProduct($product->load($product->getIdBySku('simple')), 1);
36+
$quoteModel->collectTotals();
37+
$quote->save($quoteModel);
38+
39+
/** @var MessageResource $message */
40+
$message = $objectManager->create(MessageResource::class);
41+
42+
/** @var Message $message */
43+
$messageModel = $objectManager->create(Message::class);
44+
45+
$messageModel->setSender('John Doe');
46+
$messageModel->setRecipient('Jane Roe');
47+
$messageModel->setMessage('Gift Message Text');
48+
$message->save($messageModel);
49+
50+
$quoteModel->getItemByProduct($quoteProduct)->setGiftMessageId($messageModel->getId());
51+
$quote->save($quoteModel);
52+
53+
/** @var QuoteIdMaskResource $quoteIdMask */
54+
$quoteIdMask = Bootstrap::getObjectManager()
55+
->create(QuoteIdMaskFactory::class)
56+
->create();
57+
58+
/** @var QuoteIdMask $quoteIdMaskModel */
59+
$quoteIdMaskModel = $objectManager->create(QuoteIdMask::class);
60+
61+
$quoteIdMaskModel->setQuoteId($quoteModel->getId());
62+
$quoteIdMaskModel->setDataChanges(true);
63+
$quoteIdMask->save($quoteIdMaskModel);
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
<?php
2+
/**
3+
* Copyright © Magento, Inc. All rights reserved.
4+
* See COPYING.txt for license details.
5+
*/
6+
7+
use Magento\Catalog\Model\Product;
8+
use Magento\Framework\Registry;
9+
use Magento\GiftMessage\Model\Message;
10+
use Magento\Quote\Model\Quote;
11+
use Magento\TestFramework\Helper\Bootstrap;
12+
13+
$registry = Bootstrap::getObjectManager()->get(Registry::class);
14+
$registry->unregister('isSecureArea');
15+
$registry->register('isSecureArea', true);
16+
$objectManager = Bootstrap::getObjectManager();
17+
$quote = $objectManager->create(Quote::class);
18+
$quote->load('test_guest_order_with_gift_message', 'reserved_order_id');
19+
$message = $objectManager->create(Message::class);
20+
$product = $objectManager->create(Product::class);
21+
foreach ($quote->getAllItems() as $item) {
22+
$message->load($item->getGiftMessageId());
23+
$message->delete();
24+
$sku = $item->getSku();
25+
$product->load($product->getIdBySku($sku));
26+
if ($product->getId()) {
27+
$product->delete();
28+
}
29+
}
30+
$quote->delete();
31+
$registry->unregister('isSecureArea');
32+
$registry->register('isSecureArea', false);

0 commit comments

Comments
 (0)