Skip to content

Commit 969553a

Browse files
committed
Merge remote-tracking branch 'origin/ENGCOM-4808-magento-graphql-ce-578' into graphql-develop-prs
2 parents e1efcf2 + 3268815 commit 969553a

File tree

4 files changed

+327
-5
lines changed

4 files changed

+327
-5
lines changed

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,17 +69,15 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
6969
}
7070
$paymentMethodCode = $args['input']['payment_method']['code'];
7171

72-
$poNumber = isset($args['input']['payment_method']['purchase_order_number'])
73-
&& empty($args['input']['payment_method']['purchase_order_number'])
74-
? $args['input']['payment_method']['purchase_order_number']
75-
: null;
72+
$poNumber = $args['input']['payment_method']['purchase_order_number'] ?? null;
73+
$additionalData = $args['input']['payment_method']['additional_data'] ?? [];
7674

7775
$cart = $this->getCartForUser->execute($maskedCartId, $context->getUserId());
7876
$payment = $this->paymentFactory->create([
7977
'data' => [
8078
PaymentInterface::KEY_METHOD => $paymentMethodCode,
8179
PaymentInterface::KEY_PO_NUMBER => $poNumber,
82-
PaymentInterface::KEY_ADDITIONAL_DATA => [],
80+
PaymentInterface::KEY_ADDITIONAL_DATA => $additionalData,
8381
]
8482
]);
8583

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

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,9 +131,13 @@ input SetPaymentMethodOnCartInput {
131131

132132
input PaymentMethodInput {
133133
code: String! @doc(description:"Payment method code")
134+
additional_data: PaymentMethodAdditionalDataInput @doc(description:"Additional payment data")
134135
purchase_order_number: String @doc(description:"Purchase order number")
135136
}
136137

138+
input PaymentMethodAdditionalDataInput {
139+
}
140+
137141
input SetGuestEmailOnCartInput {
138142
cart_id: String!
139143
email: String!
@@ -248,9 +252,13 @@ type AvailablePaymentMethod {
248252

249253
type SelectedPaymentMethod {
250254
code: String @doc(description: "The payment method code")
255+
additional_data: SelectedPaymentMethodAdditionalData @doc(description: "Additional payment data")
251256
purchase_order_number: String @doc(description: "The purchase order number.")
252257
}
253258

259+
type SelectedPaymentMethodAdditionalData {
260+
}
261+
254262
enum AdressTypeEnum {
255263
SHIPPING
256264
BILLING
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
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 Exception;
11+
use Magento\GraphQl\Quote\GetMaskedQuoteIdByReservedOrderId;
12+
use Magento\Integration\Api\CustomerTokenServiceInterface;
13+
use Magento\OfflinePayments\Model\Purchaseorder;
14+
use Magento\TestFramework\Helper\Bootstrap;
15+
use Magento\TestFramework\TestCase\GraphQlAbstract;
16+
17+
/**
18+
* Test for setting Purchase Order payment method on cart by customer
19+
*/
20+
class SetPurchaseOrderPaymentMethodOnCartTest extends GraphQlAbstract
21+
{
22+
/**
23+
* @var GetMaskedQuoteIdByReservedOrderId
24+
*/
25+
private $getMaskedQuoteIdByReservedOrderId;
26+
27+
/**
28+
* @var CustomerTokenServiceInterface
29+
*/
30+
private $customerTokenService;
31+
32+
/**
33+
* @inheritdoc
34+
*/
35+
protected function setUp()
36+
{
37+
$objectManager = Bootstrap::getObjectManager();
38+
$this->getMaskedQuoteIdByReservedOrderId = $objectManager->get(GetMaskedQuoteIdByReservedOrderId::class);
39+
$this->customerTokenService = $objectManager->get(CustomerTokenServiceInterface::class);
40+
}
41+
42+
/**
43+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
44+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
45+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
46+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
47+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
48+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/enable_offline_payment_methods.php
49+
*/
50+
public function testSetPurchaseOrderPaymentMethodOnCartWithSimpleProduct()
51+
{
52+
$methodCode = Purchaseorder::PAYMENT_METHOD_PURCHASEORDER_CODE;
53+
$purchaseOrderNumber = '123456';
54+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
55+
56+
$query = <<<QUERY
57+
mutation {
58+
setPaymentMethodOnCart(input: {
59+
cart_id: "$maskedQuoteId"
60+
payment_method: {
61+
code: "$methodCode"
62+
purchase_order_number: "$purchaseOrderNumber"
63+
}
64+
}) {
65+
cart {
66+
selected_payment_method {
67+
code
68+
purchase_order_number
69+
}
70+
}
71+
}
72+
}
73+
QUERY;
74+
$response = $this->graphQlMutation($query, [], '', $this->getHeaderMap());
75+
76+
self::assertArrayHasKey('setPaymentMethodOnCart', $response);
77+
self::assertArrayHasKey('cart', $response['setPaymentMethodOnCart']);
78+
self::assertArrayHasKey('selected_payment_method', $response['setPaymentMethodOnCart']['cart']);
79+
self::assertEquals($methodCode, $response['setPaymentMethodOnCart']['cart']['selected_payment_method']['code']);
80+
self::assertEquals(
81+
$purchaseOrderNumber,
82+
$response['setPaymentMethodOnCart']['cart']['selected_payment_method']['purchase_order_number']
83+
);
84+
}
85+
86+
/**
87+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
88+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
89+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
90+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
91+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
92+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/enable_offline_payment_methods.php
93+
*
94+
* @expectedException Exception
95+
* @expectedExceptionMessage Purchase order number is a required field.
96+
*/
97+
public function testSetPurchaseOrderPaymentMethodOnCartWithoutPurchaseOrderNumber()
98+
{
99+
$methodCode = Purchaseorder::PAYMENT_METHOD_PURCHASEORDER_CODE;
100+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
101+
102+
$query = <<<QUERY
103+
mutation {
104+
setPaymentMethodOnCart(input: {
105+
cart_id: "$maskedQuoteId"
106+
payment_method: {
107+
code: "$methodCode"
108+
}
109+
}) {
110+
cart {
111+
selected_payment_method {
112+
code
113+
}
114+
}
115+
}
116+
}
117+
QUERY;
118+
$this->graphQlMutation($query, [], '', $this->getHeaderMap());
119+
}
120+
121+
/**
122+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
123+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
124+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
125+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
126+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
127+
*
128+
* @expectedException Exception
129+
* @expectedExceptionMessage The requested Payment Method is not available.
130+
*/
131+
public function testSetDisabledPurchaseOrderPaymentMethodOnCart()
132+
{
133+
$methodCode = Purchaseorder::PAYMENT_METHOD_PURCHASEORDER_CODE;
134+
$purchaseOrderNumber = '123456';
135+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
136+
137+
$query = <<<QUERY
138+
mutation {
139+
setPaymentMethodOnCart(input: {
140+
cart_id: "$maskedQuoteId"
141+
payment_method: {
142+
code: "$methodCode"
143+
purchase_order_number: "$purchaseOrderNumber"
144+
}
145+
}) {
146+
cart {
147+
selected_payment_method {
148+
code
149+
purchase_order_number
150+
}
151+
}
152+
}
153+
}
154+
QUERY;
155+
$this->graphQlMutation($query, [], '', $this->getHeaderMap());
156+
}
157+
158+
/**
159+
* @param string $username
160+
* @param string $password
161+
* @return array
162+
*/
163+
private function getHeaderMap(string $username = 'customer@example.com', string $password = 'password'): array
164+
{
165+
$customerToken = $this->customerTokenService->createCustomerAccessToken($username, $password);
166+
$headerMap = ['Authorization' => 'Bearer ' . $customerToken];
167+
return $headerMap;
168+
}
169+
}
Lines changed: 147 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,147 @@
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 Exception;
11+
use Magento\GraphQl\Quote\GetMaskedQuoteIdByReservedOrderId;
12+
use Magento\OfflinePayments\Model\Purchaseorder;
13+
use Magento\TestFramework\Helper\Bootstrap;
14+
use Magento\TestFramework\TestCase\GraphQlAbstract;
15+
16+
/**
17+
* Test for setting Purchase Order payment method on cart by guest
18+
*/
19+
class SetPurchaseOrderPaymentMethodOnCartTest extends GraphQlAbstract
20+
{
21+
/**
22+
* @var GetMaskedQuoteIdByReservedOrderId
23+
*/
24+
private $getMaskedQuoteIdByReservedOrderId;
25+
26+
/**
27+
* @inheritdoc
28+
*/
29+
protected function setUp()
30+
{
31+
$objectManager = Bootstrap::getObjectManager();
32+
$this->getMaskedQuoteIdByReservedOrderId = $objectManager->get(GetMaskedQuoteIdByReservedOrderId::class);
33+
}
34+
35+
/**
36+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
37+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
38+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
39+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
40+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/enable_offline_payment_methods.php
41+
*/
42+
public function testSetPurchaseOrderPaymentMethodOnCartWithSimpleProduct()
43+
{
44+
$methodCode = Purchaseorder::PAYMENT_METHOD_PURCHASEORDER_CODE;
45+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
46+
$purchaseOrderNumber = '123456';
47+
48+
$query = <<<QUERY
49+
mutation {
50+
setPaymentMethodOnCart(input: {
51+
cart_id: "$maskedQuoteId"
52+
payment_method: {
53+
code: "$methodCode"
54+
purchase_order_number: "$purchaseOrderNumber"
55+
}
56+
}) {
57+
cart {
58+
selected_payment_method {
59+
code
60+
purchase_order_number
61+
}
62+
}
63+
}
64+
}
65+
QUERY;
66+
$response = $this->graphQlMutation($query);
67+
68+
self::assertArrayHasKey('setPaymentMethodOnCart', $response);
69+
self::assertArrayHasKey('cart', $response['setPaymentMethodOnCart']);
70+
self::assertArrayHasKey('selected_payment_method', $response['setPaymentMethodOnCart']['cart']);
71+
self::assertEquals($methodCode, $response['setPaymentMethodOnCart']['cart']['selected_payment_method']['code']);
72+
self::assertEquals(
73+
$purchaseOrderNumber,
74+
$response['setPaymentMethodOnCart']['cart']['selected_payment_method']['purchase_order_number']
75+
);
76+
}
77+
78+
/**
79+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
80+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
81+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
82+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
83+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/enable_offline_payment_methods.php
84+
*
85+
* @expectedException Exception
86+
* @expectedExceptionMessage Purchase order number is a required field.
87+
*/
88+
public function testSetPurchaseOrderPaymentMethodOnCartWithoutPurchaseOrderNumber()
89+
{
90+
$methodCode = Purchaseorder::PAYMENT_METHOD_PURCHASEORDER_CODE;
91+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
92+
93+
$query = <<<QUERY
94+
mutation {
95+
setPaymentMethodOnCart(input: {
96+
cart_id: "$maskedQuoteId"
97+
payment_method: {
98+
code: "$methodCode"
99+
}
100+
}) {
101+
cart {
102+
selected_payment_method {
103+
code
104+
}
105+
}
106+
}
107+
}
108+
QUERY;
109+
$this->graphQlMutation($query);
110+
}
111+
112+
/**
113+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
114+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
115+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
116+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
117+
*
118+
* @expectedException Exception
119+
* @expectedExceptionMessage The requested Payment Method is not available.
120+
*/
121+
public function testSetDisabledPurchaseOrderPaymentMethodOnCart()
122+
{
123+
$methodCode = Purchaseorder::PAYMENT_METHOD_PURCHASEORDER_CODE;
124+
$purchaseOrderNumber = '123456';
125+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
126+
127+
$query = <<<QUERY
128+
mutation {
129+
setPaymentMethodOnCart(input: {
130+
cart_id: "$maskedQuoteId"
131+
payment_method: {
132+
code: "$methodCode"
133+
purchase_order_number: "$purchaseOrderNumber"
134+
}
135+
}) {
136+
cart {
137+
selected_payment_method {
138+
code
139+
purchase_order_number
140+
}
141+
}
142+
}
143+
}
144+
QUERY;
145+
$this->graphQlMutation($query);
146+
}
147+
}

0 commit comments

Comments
 (0)