Skip to content

Commit 58fa5d4

Browse files
committed
GraphQL-571: [Checkout Coverage] Place order for guest
1 parent c8cdc96 commit 58fa5d4

File tree

6 files changed

+216
-55
lines changed

6 files changed

+216
-55
lines changed

app/code/Magento/QuoteGraphQl/Model/Resolver/GuestEmail.php renamed to app/code/Magento/QuoteGraphQl/Model/Resolver/CartEmail.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
/**
1818
* @inheritdoc
1919
*/
20-
class GuestEmail implements ResolverInterface
20+
class CartEmail implements ResolverInterface
2121
{
2222
/**
2323
* @var GetCartForUser

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ type PlaceOrderOutput {
175175
type Cart {
176176
items: [CartItemInterface] @resolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\CartItems")
177177
applied_coupon: AppliedCoupon @resolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\AppliedCoupon")
178-
guest_email: String @resolver (class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\GuestEmail")
178+
email: String @resolver (class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\CartEmail")
179179
shipping_addresses: [CartAddress]! @resolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\ShippingAddresses")
180180
billing_address: CartAddress! @resolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\BillingAddress")
181181
available_payment_methods: [AvailablePaymentMethod] @resolver(class: "Magento\\QuoteGraphQl\\Model\\Resolver\\AvailablePaymentMethods") @doc(description: "Available payment methods")
Lines changed: 125 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,125 @@
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\Quote\Customer;
9+
10+
use Magento\GraphQl\Quote\GetMaskedQuoteIdByReservedOrderId;
11+
use Magento\Integration\Api\CustomerTokenServiceInterface;
12+
use Magento\TestFramework\Helper\Bootstrap;
13+
use Magento\TestFramework\TestCase\GraphQlAbstract;
14+
15+
/**
16+
* Test for getting email from cart
17+
*/
18+
class GetCartEmailTest extends GraphQlAbstract
19+
{
20+
/**
21+
* @var GetMaskedQuoteIdByReservedOrderId
22+
*/
23+
private $getMaskedQuoteIdByReservedOrderId;
24+
25+
/**
26+
* @var CustomerTokenServiceInterface
27+
*/
28+
private $customerTokenService;
29+
30+
protected function setUp()
31+
{
32+
$objectManager = Bootstrap::getObjectManager();
33+
$this->getMaskedQuoteIdByReservedOrderId = $objectManager->get(GetMaskedQuoteIdByReservedOrderId::class);
34+
$this->customerTokenService = $objectManager->get(CustomerTokenServiceInterface::class);
35+
}
36+
37+
/**
38+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
39+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
40+
*/
41+
public function testGetCartEmail()
42+
{
43+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
44+
45+
$query = $this->getQuery($maskedQuoteId);
46+
$response = $this->graphQlQuery($query, [], '', $this->getHeaderMap());
47+
48+
$this->assertArrayHasKey('cart', $response);
49+
$this->assertArrayHasKey('email', $response['cart']);
50+
$this->assertEquals('[email protected]', $response['cart']['email']);
51+
}
52+
53+
/**
54+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
55+
* @expectedException \Exception
56+
* @expectedExceptionMessage Could not find a cart with ID "non_existent_masked_id"
57+
*/
58+
public function testGetCartEmailFromNonExistentCart()
59+
{
60+
$maskedQuoteId = 'non_existent_masked_id';
61+
$query = $this->getQuery($maskedQuoteId);
62+
63+
$this->graphQlQuery($query, [], '', $this->getHeaderMap());
64+
}
65+
66+
/**
67+
* _security
68+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
69+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
70+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/set_guest_email.php
71+
*/
72+
public function testGetEmailFromGuestCart()
73+
{
74+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
75+
$query = $this->getQuery($maskedQuoteId);
76+
77+
$this->expectExceptionMessage(
78+
"The current user cannot perform operations on cart \"{$maskedQuoteId}\""
79+
);
80+
$this->graphQlQuery($query, [], '', $this->getHeaderMap());
81+
}
82+
83+
/**
84+
* _security
85+
* @magentoApiDataFixture Magento/Customer/_files/three_customers.php
86+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
87+
*/
88+
public function testGetEmailFromAnotherCustomerCart()
89+
{
90+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
91+
$query = $this->getQuery($maskedQuoteId);
92+
93+
$this->expectExceptionMessage(
94+
"The current user cannot perform operations on cart \"{$maskedQuoteId}\""
95+
);
96+
$this->graphQlMutation($query, [], '', $this->getHeaderMap('[email protected]'));
97+
}
98+
99+
/**
100+
* @param string $maskedQuoteId
101+
* @return string
102+
*/
103+
private function getQuery(string $maskedQuoteId): string
104+
{
105+
return <<<QUERY
106+
{
107+
cart(cart_id:"$maskedQuoteId") {
108+
email
109+
}
110+
}
111+
QUERY;
112+
}
113+
114+
/**
115+
* @param string $username
116+
* @param string $password
117+
* @return array
118+
*/
119+
private function getHeaderMap(string $username = '[email protected]', string $password = 'password'): array
120+
{
121+
$customerToken = $this->customerTokenService->createCustomerAccessToken($username, $password);
122+
$headerMap = ['Authorization' => 'Bearer ' . $customerToken];
123+
return $headerMap;
124+
}
125+
}

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

Lines changed: 0 additions & 52 deletions
This file was deleted.
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
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\Quote\Guest;
9+
10+
use Magento\GraphQl\Quote\GetMaskedQuoteIdByReservedOrderId;
11+
use Magento\TestFramework\Helper\Bootstrap;
12+
use Magento\TestFramework\TestCase\GraphQlAbstract;
13+
14+
/**
15+
* Test for getting email from cart
16+
*/
17+
class GetCartEmailTest extends GraphQlAbstract
18+
{
19+
/**
20+
* @var GetMaskedQuoteIdByReservedOrderId
21+
*/
22+
private $getMaskedQuoteIdByReservedOrderId;
23+
24+
protected function setUp()
25+
{
26+
$objectManager = Bootstrap::getObjectManager();
27+
$this->getMaskedQuoteIdByReservedOrderId = $objectManager->get(GetMaskedQuoteIdByReservedOrderId::class);
28+
}
29+
30+
/**
31+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
32+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/set_guest_email.php
33+
*/
34+
public function testGetCartEmail()
35+
{
36+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
37+
38+
$query = $this->getQuery($maskedQuoteId);
39+
$response = $this->graphQlQuery($query);
40+
41+
$this->assertArrayHasKey('cart', $response);
42+
$this->assertArrayHasKey('email', $response['cart']);
43+
$this->assertEquals('[email protected]', $response['cart']['email']);
44+
}
45+
46+
/**
47+
* @expectedException \Exception
48+
* @expectedExceptionMessage Could not find a cart with ID "non_existent_masked_id"
49+
*/
50+
public function testGetCartEmailFromNonExistentCart()
51+
{
52+
$maskedQuoteId = 'non_existent_masked_id';
53+
$query = $this->getQuery($maskedQuoteId);
54+
55+
$this->graphQlQuery($query);
56+
}
57+
58+
/**
59+
* _security
60+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
61+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
62+
*/
63+
public function testGetCartEmailFromCustomerCart()
64+
{
65+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
66+
$query = $this->getQuery($maskedQuoteId);
67+
68+
$this->expectExceptionMessage(
69+
"The current user cannot perform operations on cart \"{$maskedQuoteId}\""
70+
);
71+
$this->graphQlQuery($query);
72+
}
73+
74+
/**
75+
* @param string $maskedQuoteId
76+
* @return string
77+
*/
78+
private function getQuery(string $maskedQuoteId): string
79+
{
80+
return <<<QUERY
81+
{
82+
cart(cart_id:"$maskedQuoteId") {
83+
email
84+
}
85+
}
86+
QUERY;
87+
}
88+
}

dev/tests/integration/testsuite/Magento/GraphQl/Quote/_files/guest/set_guest_email.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,5 +20,5 @@
2020
$quote = $quoteFactory->create();
2121
$quoteResource->load($quote, 'test_quote', 'reserved_order_id');
2222

23-
$quote->setCustomerEmail('customer@example.com');
23+
$quote->setCustomerEmail('guest@example.com');
2424
$cartRepository->save($quote);

0 commit comments

Comments
 (0)