Skip to content

Commit fb18e4f

Browse files
committed
GraphQL-363: Always return cart id null after add product
1 parent 1dcd5c5 commit fb18e4f

File tree

3 files changed

+57
-78
lines changed

3 files changed

+57
-78
lines changed

app/code/Magento/QuoteGraphQl/Model/Resolver/AddSimpleProductsToCart.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
8181

8282
$this->addProductsToCart->execute($cart, $cartItems);
8383
$cartData = $this->extractDataFromCart->execute($cart);
84-
$cartData["cart_id"] = $cartHash;
8584

8685
return [
8786
'cart' => $cartData,

app/code/Magento/QuoteGraphQl/Model/Resolver/Cart.php

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -54,14 +54,8 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
5454
$currentUserId = $context->getUserId();
5555
$cart = $this->getCartForUser->execute($maskedCartId, $currentUserId);
5656

57-
$data = array_merge(
58-
[
59-
'cart_id' => $maskedCartId,
60-
'model' => $cart
61-
],
62-
$this->extractDataFromCart->execute($cart)
63-
);
64-
57+
$data = $this->extractDataFromCart->execute($cart);
58+
$data['model'] = $cart;
6559
return $data;
6660
}
6761
}

dev/tests/api-functional/testsuite/Magento/GraphQl/Quote/GetCartTest.php

Lines changed: 55 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
namespace Magento\GraphQl\Quote;
99

1010
use Magento\Integration\Api\CustomerTokenServiceInterface;
11-
use Magento\Quote\Model\Quote;
11+
use Magento\Quote\Model\QuoteFactory;
1212
use Magento\Quote\Model\QuoteIdToMaskedQuoteIdInterface;
1313
use Magento\Quote\Model\ResourceModel\Quote as QuoteResource;
1414
use Magento\TestFramework\Helper\Bootstrap;
@@ -19,124 +19,103 @@
1919
*/
2020
class GetCartTest extends GraphQlAbstract
2121
{
22-
/**
23-
* @var CustomerTokenServiceInterface
24-
*/
25-
private $customerTokenService;
26-
2722
/**
2823
* @var QuoteResource
2924
*/
3025
private $quoteResource;
3126

3227
/**
33-
* @var Quote
28+
* @var QuoteFactory
3429
*/
35-
private $quote;
30+
private $quoteFactory;
3631

3732
/**
3833
* @var QuoteIdToMaskedQuoteIdInterface
3934
*/
4035
private $quoteIdToMaskedId;
4136

4237
/**
43-
* @inheritdoc
38+
* @var CustomerTokenServiceInterface
4439
*/
40+
private $customerTokenService;
41+
4542
protected function setUp()
4643
{
4744
$objectManager = Bootstrap::getObjectManager();
48-
$this->quoteResource = $objectManager->create(QuoteResource::class);
49-
$this->quote = $objectManager->create(Quote::class);
50-
$this->quoteIdToMaskedId = $objectManager->create(QuoteIdToMaskedQuoteIdInterface::class);
45+
$this->quoteResource = $objectManager->get(QuoteResource::class);
46+
$this->quoteFactory = $objectManager->get(QuoteFactory::class);
47+
$this->quoteIdToMaskedId = $objectManager->get(QuoteIdToMaskedQuoteIdInterface::class);
5148
$this->customerTokenService = $objectManager->get(CustomerTokenServiceInterface::class);
5249
}
5350

5451
/**
55-
* @magentoApiDataFixture Magento/Checkout/_files/quote_with_items_saved.php
52+
* @magentoApiDataFixture Magento/Checkout/_files/active_quote.php
5653
*/
57-
public function testGetOwnCartForRegisteredCustomer()
54+
public function testGetCartForGuest()
5855
{
59-
$reservedOrderId = 'test_order_item_with_items';
60-
$this->quoteResource->load(
61-
$this->quote,
62-
$reservedOrderId,
63-
'reserved_order_id'
64-
);
65-
66-
$maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$this->quote->getId());
67-
$query = $this->prepareGetCartQuery($maskedQuoteId);
56+
$maskedQuoteId = $this->getMaskedQuoteIdByReversedQuoteId('test_order_1');
57+
$query = $this->getCartQuery($maskedQuoteId);
6858

69-
$response = $this->sendRequestWithToken($query);
59+
$response = $this->graphQlQuery($query);
7060

7161
self::assertArrayHasKey('cart', $response);
72-
self::assertNotEmpty($response['cart']['items']);
73-
self::assertNotEmpty($response['cart']['shipping_addresses']);
62+
self::assertEquals($maskedQuoteId, $response['cart']['cart_id']);
7463
}
7564

7665
/**
7766
* @magentoApiDataFixture Magento/Checkout/_files/quote_with_items_saved.php
7867
*/
79-
public function testGetCartFromAnotherCustomer()
68+
public function testGetCartByRegisteredCustomer()
8069
{
81-
$reservedOrderId = 'test_order_item_with_items';
82-
$this->quoteResource->load(
83-
$this->quote,
84-
$reservedOrderId,
85-
'reserved_order_id'
86-
);
87-
88-
$maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$this->quote->getId());
89-
$query = $this->prepareGetCartQuery($maskedQuoteId);
70+
$maskedQuoteId = $this->getMaskedQuoteIdByReversedQuoteId('test_order_item_with_items');
71+
$query = $this->getCartQuery($maskedQuoteId);
9072

91-
self::expectExceptionMessage("The current user cannot perform operations on cart \"$maskedQuoteId\"");
73+
$response = $this->graphQlQuery($query, [], '', $this->getHeaderMap());
9274

93-
$this->graphQlQuery($query);
75+
self::assertArrayHasKey('cart', $response);
76+
self::assertEquals($maskedQuoteId, $response['cart']['cart_id']);
77+
self::assertNotEmpty($response['cart']['items']);
9478
}
9579

9680
/**
97-
* @magentoApiDataFixture Magento/Checkout/_files/active_quote.php
81+
* @magentoApiDataFixture Magento/Checkout/_files/quote_with_items_saved.php
9882
*/
99-
public function testGetCartForGuest()
83+
public function testGetCartOfAnotherCustomerByGuest()
10084
{
101-
$reservedOrderId = 'test_order_1';
102-
$this->quoteResource->load(
103-
$this->quote,
104-
$reservedOrderId,
105-
'reserved_order_id'
106-
);
107-
108-
$maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$this->quote->getId());
109-
$query = $this->prepareGetCartQuery($maskedQuoteId);
85+
$maskedQuoteId = $this->getMaskedQuoteIdByReversedQuoteId('test_order_item_with_items');
86+
$query = $this->getCartQuery($maskedQuoteId);
11087

111-
$response = $this->graphQlQuery($query);
112-
113-
self::assertArrayHasKey('cart', $response);
88+
self:$this->expectExceptionMessage(
89+
"The current user cannot perform operations on cart \"{$maskedQuoteId}\""
90+
);
91+
$this->graphQlQuery($query);
11492
}
11593

94+
/**
95+
* @expectedException \Exception
96+
* @expectedExceptionMessage Could not find a cart with ID "non_existent_masked_id"
97+
*/
11698
public function testGetNonExistentCart()
11799
{
118100
$maskedQuoteId = 'non_existent_masked_id';
119-
$query = $this->prepareGetCartQuery($maskedQuoteId);
120-
121-
self::expectExceptionMessage("Could not find a cart with ID \"$maskedQuoteId\"");
101+
$query = $this->getCartQuery($maskedQuoteId);
122102

123103
$this->graphQlQuery($query);
124104
}
125105

126106
/**
127-
* Generates query for setting the specified shipping method on cart
128-
*
129107
* @param string $maskedQuoteId
130108
* @return string
131109
*/
132-
private function prepareGetCartQuery(
110+
private function getCartQuery(
133111
string $maskedQuoteId
134112
) : string {
135113
return <<<QUERY
136114
{
137115
cart(cart_id: "$maskedQuoteId") {
116+
cart_id
138117
applied_coupon {
139-
code
118+
code
140119
}
141120
items {
142121
id
@@ -147,23 +126,30 @@ private function prepareGetCartQuery(
147126
}
148127
}
149128
}
150-
151129
QUERY;
152130
}
153131

154132
/**
155-
* Sends a GraphQL request with using a bearer token
156-
*
157-
* @param string $query
158-
* @return array
159-
* @throws \Magento\Framework\Exception\AuthenticationException
133+
* @param string $reversedQuoteId
134+
* @return string
160135
*/
161-
private function sendRequestWithToken(string $query): array
136+
private function getMaskedQuoteIdByReversedQuoteId(string $reversedQuoteId): string
162137
{
138+
$quote = $this->quoteFactory->create();
139+
$this->quoteResource->load($quote, $reversedQuoteId, 'reserved_order_id');
163140

164-
$customerToken = $this->customerTokenService->createCustomerAccessToken('customer@example.com', 'password');
165-
$headerMap = ['Authorization' => 'Bearer ' . $customerToken];
141+
return $this->quoteIdToMaskedId->execute((int)$quote->getId());
142+
}
166143

167-
return $this->graphQlQuery($query, [], '', $headerMap);
144+
/**
145+
* @param string $username
146+
* @param string $password
147+
* @return array
148+
*/
149+
private function getHeaderMap(string $username = 'customer@example.com', string $password = 'password'): array
150+
{
151+
$customerToken = $this->customerTokenService->createCustomerAccessToken($username, $password);
152+
$headerMap = ['Authorization' => 'Bearer ' . $customerToken];
153+
return $headerMap;
168154
}
169155
}

0 commit comments

Comments
 (0)