Skip to content

Commit d54281a

Browse files
committed
Add resolver to determine if quote is virtual
1 parent db43c11 commit d54281a

File tree

4 files changed

+251
-0
lines changed

4 files changed

+251
-0
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
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\QuoteGraphQl\Model\Resolver;
9+
10+
use Magento\Framework\Exception\LocalizedException;
11+
use Magento\Framework\GraphQl\Config\Element\Field;
12+
use Magento\Framework\GraphQl\Query\ResolverInterface;
13+
use Magento\Framework\GraphQl\Schema\Type\ResolveInfo;
14+
use Magento\Quote\Model\Quote;
15+
16+
/**
17+
* @inheritdoc
18+
*/
19+
class CartIsVirtual implements ResolverInterface
20+
{
21+
/**
22+
* @inheritdoc
23+
*/
24+
public function resolve(Field $field, $context, ResolveInfo $info, array $value = null, array $args = null)
25+
{
26+
if (!isset($value['model'])) {
27+
throw new LocalizedException(__('"model" value should be specified'));
28+
}
29+
/** @var Quote $cart */
30+
$cart = $value['model'];
31+
32+
return (bool)$cart->getIsVirtual();
33+
}
34+
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ type Cart {
198198
selected_payment_method: SelectedPaymentMethod @resolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\SelectedPaymentMethod")
199199
prices: CartPrices @resolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\CartPrices")
200200
total_quantity: Float! @resolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\CartTotalQuantity")
201+
is_virtual: Boolean! @resolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\CartIsVirtual")
201202
}
202203

203204
interface CartAddressInterface @typeResolver(class: "\\Magento\\QuoteGraphQl\\Model\\Resolver\\CartAddressTypeResolver") {
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
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 is_virtual from cart
17+
*/
18+
class GetCartIsVirtualTest 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/Catalog/_files/simple_product.php
40+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
41+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
42+
*/
43+
public function testGetCartIsNotVirtual()
44+
{
45+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
46+
47+
$query = $this->getQuery($maskedQuoteId);
48+
$response = $this->graphQlQuery($query, [], '', $this->getHeaderMap());
49+
50+
$this->assertArrayHasKey('cart', $response);
51+
$this->assertArrayHasKey('is_virtual', $response['cart']);
52+
$this->assertFalse($response['cart']['is_virtual']);
53+
}
54+
55+
/**
56+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
57+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
58+
* @magentoApiDataFixture Magento/Catalog/_files/product_virtual.php
59+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
60+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
61+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_virtual_product.php
62+
*/
63+
public function testGetMixedCartIsNotVirtual()
64+
{
65+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
66+
67+
$query = $this->getQuery($maskedQuoteId);
68+
$response = $this->graphQlQuery($query, [], '', $this->getHeaderMap());
69+
70+
$this->assertArrayHasKey('cart', $response);
71+
$this->assertArrayHasKey('is_virtual', $response['cart']);
72+
$this->assertFalse($response['cart']['is_virtual']);
73+
}
74+
75+
/**
76+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
77+
* @magentoApiDataFixture Magento/Catalog/_files/product_virtual.php
78+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
79+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_virtual_product.php
80+
*/
81+
public function testGetCartIsVirtual()
82+
{
83+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
84+
85+
$query = $this->getQuery($maskedQuoteId);
86+
$response = $this->graphQlQuery($query, [], '', $this->getHeaderMap());
87+
88+
$this->assertArrayHasKey('cart', $response);
89+
$this->assertArrayHasKey('is_virtual', $response['cart']);
90+
$this->assertTrue($response['cart']['is_virtual']);
91+
}
92+
93+
/**
94+
* @param string $maskedQuoteId
95+
* @return string
96+
*/
97+
private function getQuery(string $maskedQuoteId): string
98+
{
99+
return <<<QUERY
100+
{
101+
cart(cart_id:"$maskedQuoteId") {
102+
is_virtual
103+
}
104+
}
105+
QUERY;
106+
}
107+
108+
/**
109+
* @param string $username
110+
* @param string $password
111+
* @return array
112+
*/
113+
private function getHeaderMap(string $username = '[email protected]', string $password = 'password'): array
114+
{
115+
$customerToken = $this->customerTokenService->createCustomerAccessToken($username, $password);
116+
$headerMap = ['Authorization' => 'Bearer ' . $customerToken];
117+
return $headerMap;
118+
}
119+
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
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 is_virtual from cart
16+
*/
17+
class GetCartIsVirtualTest 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/Catalog/_files/simple_product.php
32+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
33+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
34+
*/
35+
public function testGetCartIsNotVirtual()
36+
{
37+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
38+
39+
$query = $this->getQuery($maskedQuoteId);
40+
$response = $this->graphQlQuery($query);
41+
42+
$this->assertArrayHasKey('cart', $response);
43+
$this->assertArrayHasKey('is_virtual', $response['cart']);
44+
$this->assertFalse($response['cart']['is_virtual']);
45+
}
46+
47+
/**
48+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
49+
* @magentoApiDataFixture Magento/Catalog/_files/product_virtual.php
50+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
51+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
52+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_virtual_product.php
53+
*/
54+
public function testGetMixedCartIsNotVirtual()
55+
{
56+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
57+
58+
$query = $this->getQuery($maskedQuoteId);
59+
$response = $this->graphQlQuery($query);
60+
61+
$this->assertArrayHasKey('cart', $response);
62+
$this->assertArrayHasKey('is_virtual', $response['cart']);
63+
$this->assertFalse($response['cart']['is_virtual']);
64+
}
65+
66+
/**
67+
* @magentoApiDataFixture Magento/Catalog/_files/product_virtual.php
68+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
69+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_virtual_product.php
70+
*/
71+
public function testGetCartIsVirtual()
72+
{
73+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
74+
75+
$query = $this->getQuery($maskedQuoteId);
76+
$response = $this->graphQlQuery($query);
77+
78+
$this->assertArrayHasKey('cart', $response);
79+
$this->assertArrayHasKey('is_virtual', $response['cart']);
80+
$this->assertTrue($response['cart']['is_virtual']);
81+
}
82+
83+
/**
84+
* @param string $maskedQuoteId
85+
* @return string
86+
*/
87+
private function getQuery(string $maskedQuoteId): string
88+
{
89+
return <<<QUERY
90+
{
91+
cart(cart_id:"$maskedQuoteId") {
92+
is_virtual
93+
}
94+
}
95+
QUERY;
96+
}
97+
}

0 commit comments

Comments
 (0)