Skip to content
This repository was archived by the owner on Dec 19, 2019. It is now read-only.

Commit 7a7b1b3

Browse files
authored
ENGCOM-4832: Offline Payment Method Tests #632
2 parents b76602b + c155d34 commit 7a7b1b3

File tree

4 files changed

+339
-3
lines changed

4 files changed

+339
-3
lines changed

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ public function resolve(Field $field, $context, ResolveInfo $info, array $value
3636

3737
return [
3838
'code' => $payment->getMethod(),
39+
'title' => $payment->getMethodInstance()->getTitle(),
3940
'purchase_order_number' => $payment->getPoNumber(),
4041
];
4142
}

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -249,12 +249,13 @@ type AvailableShippingMethod {
249249
}
250250

251251
type AvailablePaymentMethod {
252-
code: String @doc(description: "The payment method code")
253-
title: String @doc(description: "The payment method title.")
252+
code: String! @doc(description: "The payment method code")
253+
title: String! @doc(description: "The payment method title.")
254254
}
255255

256256
type SelectedPaymentMethod {
257-
code: String @doc(description: "The payment method code")
257+
code: String! @doc(description: "The payment method code")
258+
title: String! @doc(description: "The payment method title.")
258259
additional_data: SelectedPaymentMethodAdditionalData @doc(description: "Additional payment data")
259260
purchase_order_number: String @doc(description: "The purchase order number.")
260261
}
Lines changed: 177 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,177 @@
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\OfflinePayments\Model\Banktransfer;
13+
use Magento\OfflinePayments\Model\Cashondelivery;
14+
use Magento\OfflinePayments\Model\Checkmo;
15+
use Magento\OfflinePayments\Model\Purchaseorder;
16+
use Magento\TestFramework\Helper\Bootstrap;
17+
use Magento\TestFramework\TestCase\GraphQlAbstract;
18+
19+
/**
20+
* Test for setting offline payment methods on cart
21+
*/
22+
class SetOfflinePaymentMethodsOnCartTest extends GraphQlAbstract
23+
{
24+
/**
25+
* @var GetMaskedQuoteIdByReservedOrderId
26+
*/
27+
private $getMaskedQuoteIdByReservedOrderId;
28+
29+
/**
30+
* @var CustomerTokenServiceInterface
31+
*/
32+
private $customerTokenService;
33+
34+
/**
35+
* @inheritdoc
36+
*/
37+
protected function setUp()
38+
{
39+
$objectManager = Bootstrap::getObjectManager();
40+
$this->getMaskedQuoteIdByReservedOrderId = $objectManager->get(GetMaskedQuoteIdByReservedOrderId::class);
41+
$this->customerTokenService = $objectManager->get(CustomerTokenServiceInterface::class);
42+
}
43+
44+
/**
45+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
46+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
47+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
48+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
49+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
50+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/enable_offline_payment_methods.php
51+
*
52+
* @param string $methodCode
53+
* @param string $methodTitle
54+
* @dataProvider offlinePaymentMethodDataProvider
55+
*/
56+
public function testSetOfflinePaymentMethod(string $methodCode, string $methodTitle)
57+
{
58+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
59+
60+
$query = $this->getQuery($maskedQuoteId, $methodCode);
61+
$response = $this->graphQlMutation($query, [], '', $this->getHeaderMap());
62+
63+
self::assertArrayHasKey('setPaymentMethodOnCart', $response);
64+
self::assertArrayHasKey('cart', $response['setPaymentMethodOnCart']);
65+
self::assertArrayHasKey('selected_payment_method', $response['setPaymentMethodOnCart']['cart']);
66+
67+
$selectedPaymentMethod = $response['setPaymentMethodOnCart']['cart']['selected_payment_method'];
68+
self::assertArrayHasKey('code', $selectedPaymentMethod);
69+
self::assertEquals($methodCode, $selectedPaymentMethod['code']);
70+
71+
self::assertArrayHasKey('title', $selectedPaymentMethod);
72+
self::assertEquals($methodTitle, $selectedPaymentMethod['title']);
73+
}
74+
75+
/**
76+
* @return array
77+
*/
78+
public function offlinePaymentMethodDataProvider(): array
79+
{
80+
return [
81+
'check_mo' => [Checkmo::PAYMENT_METHOD_CHECKMO_CODE, 'Check / Money order'],
82+
'bank_transfer' => [Banktransfer::PAYMENT_METHOD_BANKTRANSFER_CODE, 'Bank Transfer Payment'],
83+
'cash_on_delivery' => [Cashondelivery::PAYMENT_METHOD_CASHONDELIVERY_CODE, 'Cash On Delivery'],
84+
];
85+
}
86+
87+
/**
88+
* @magentoApiDataFixture Magento/Customer/_files/customer.php
89+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
90+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/customer/create_empty_cart.php
91+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
92+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
93+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/enable_offline_payment_methods.php
94+
*/
95+
public function testSetPurchaseOrderPaymentMethod()
96+
{
97+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
98+
$methodTitle = 'Purchase Order';
99+
$methodCode = Purchaseorder::PAYMENT_METHOD_PURCHASEORDER_CODE;
100+
$poNumber = 'abc123';
101+
102+
$query = <<<QUERY
103+
mutation {
104+
setPaymentMethodOnCart(input: {
105+
cart_id: "{$maskedQuoteId}",
106+
payment_method: {
107+
code: "{$methodCode}"
108+
purchase_order_number: "{$poNumber}"
109+
}
110+
}) {
111+
cart {
112+
selected_payment_method {
113+
code
114+
title
115+
purchase_order_number
116+
}
117+
}
118+
}
119+
}
120+
QUERY;
121+
$response = $this->graphQlMutation($query, [], '', $this->getHeaderMap());
122+
123+
self::assertArrayHasKey('setPaymentMethodOnCart', $response);
124+
self::assertArrayHasKey('cart', $response['setPaymentMethodOnCart']);
125+
self::assertArrayHasKey('selected_payment_method', $response['setPaymentMethodOnCart']['cart']);
126+
127+
$selectedPaymentMethod = $response['setPaymentMethodOnCart']['cart']['selected_payment_method'];
128+
self::assertArrayHasKey('code', $selectedPaymentMethod);
129+
self::assertEquals($methodCode, $selectedPaymentMethod['code']);
130+
131+
self::assertArrayHasKey('title', $selectedPaymentMethod);
132+
self::assertEquals($methodTitle, $selectedPaymentMethod['title']);
133+
134+
self::assertArrayHasKey('purchase_order_number', $selectedPaymentMethod);
135+
self::assertEquals($poNumber, $selectedPaymentMethod['purchase_order_number']);
136+
}
137+
138+
/**
139+
* @param string $maskedQuoteId
140+
* @param string $methodCode
141+
* @return string
142+
*/
143+
private function getQuery(
144+
string $maskedQuoteId,
145+
string $methodCode
146+
) : string {
147+
return <<<QUERY
148+
mutation {
149+
setPaymentMethodOnCart(input: {
150+
cart_id: "{$maskedQuoteId}",
151+
payment_method: {
152+
code: "{$methodCode}"
153+
}
154+
}) {
155+
cart {
156+
selected_payment_method {
157+
code
158+
title
159+
}
160+
}
161+
}
162+
}
163+
QUERY;
164+
}
165+
166+
/**
167+
* @param string $username
168+
* @param string $password
169+
* @return array
170+
*/
171+
private function getHeaderMap(string $username = '[email protected]', string $password = 'password'): array
172+
{
173+
$customerToken = $this->customerTokenService->createCustomerAccessToken($username, $password);
174+
$headerMap = ['Authorization' => 'Bearer ' . $customerToken];
175+
return $headerMap;
176+
}
177+
}
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
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\OfflinePayments\Model\Banktransfer;
12+
use Magento\OfflinePayments\Model\Cashondelivery;
13+
use Magento\OfflinePayments\Model\Checkmo;
14+
use Magento\OfflinePayments\Model\Purchaseorder;
15+
use Magento\TestFramework\Helper\Bootstrap;
16+
use Magento\TestFramework\TestCase\GraphQlAbstract;
17+
18+
/**
19+
* Test for setting offline payment methods on cart
20+
*/
21+
class SetOfflinePaymentMethodsOnCartTest extends GraphQlAbstract
22+
{
23+
/**
24+
* @var GetMaskedQuoteIdByReservedOrderId
25+
*/
26+
private $getMaskedQuoteIdByReservedOrderId;
27+
28+
/**
29+
* @inheritdoc
30+
*/
31+
protected function setUp()
32+
{
33+
$objectManager = Bootstrap::getObjectManager();
34+
$this->getMaskedQuoteIdByReservedOrderId = $objectManager->get(GetMaskedQuoteIdByReservedOrderId::class);
35+
}
36+
37+
/**
38+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
39+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
40+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
41+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
42+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/enable_offline_payment_methods.php
43+
*
44+
* @param string $methodCode
45+
* @param string $methodTitle
46+
* @dataProvider offlinePaymentMethodDataProvider
47+
*/
48+
public function testSetOfflinePaymentMethod(string $methodCode, string $methodTitle)
49+
{
50+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
51+
52+
$query = $this->getQuery($maskedQuoteId, $methodCode);
53+
$response = $this->graphQlMutation($query);
54+
55+
self::assertArrayHasKey('setPaymentMethodOnCart', $response);
56+
self::assertArrayHasKey('cart', $response['setPaymentMethodOnCart']);
57+
self::assertArrayHasKey('selected_payment_method', $response['setPaymentMethodOnCart']['cart']);
58+
59+
$selectedPaymentMethod = $response['setPaymentMethodOnCart']['cart']['selected_payment_method'];
60+
self::assertArrayHasKey('code', $selectedPaymentMethod);
61+
self::assertEquals($methodCode, $selectedPaymentMethod['code']);
62+
63+
self::assertArrayHasKey('title', $selectedPaymentMethod);
64+
self::assertEquals($methodTitle, $selectedPaymentMethod['title']);
65+
}
66+
67+
/**
68+
* @return array
69+
*/
70+
public function offlinePaymentMethodDataProvider(): array
71+
{
72+
return [
73+
'check_mo' => [Checkmo::PAYMENT_METHOD_CHECKMO_CODE, 'Check / Money order'],
74+
'bank_transfer' => [Banktransfer::PAYMENT_METHOD_BANKTRANSFER_CODE, 'Bank Transfer Payment'],
75+
'cash_on_delivery' => [Cashondelivery::PAYMENT_METHOD_CASHONDELIVERY_CODE, 'Cash On Delivery'],
76+
];
77+
}
78+
79+
/**
80+
* @magentoApiDataFixture Magento/GraphQl/Catalog/_files/simple_product.php
81+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/guest/create_empty_cart.php
82+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/add_simple_product.php
83+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/set_new_shipping_address.php
84+
* @magentoApiDataFixture Magento/GraphQl/Quote/_files/enable_offline_payment_methods.php
85+
*/
86+
public function testSetPurchaseOrderPaymentMethod()
87+
{
88+
$maskedQuoteId = $this->getMaskedQuoteIdByReservedOrderId->execute('test_quote');
89+
$methodCode = Purchaseorder::PAYMENT_METHOD_PURCHASEORDER_CODE;
90+
$methodTitle = 'Purchase Order';
91+
$poNumber = 'abc123';
92+
93+
$query = <<<QUERY
94+
mutation {
95+
setPaymentMethodOnCart(input: {
96+
cart_id: "{$maskedQuoteId}",
97+
payment_method: {
98+
code: "{$methodCode}"
99+
purchase_order_number: "{$poNumber}"
100+
}
101+
}) {
102+
cart {
103+
selected_payment_method {
104+
code
105+
title
106+
purchase_order_number
107+
}
108+
}
109+
}
110+
}
111+
QUERY;
112+
113+
$response = $this->graphQlMutation($query);
114+
115+
self::assertArrayHasKey('setPaymentMethodOnCart', $response);
116+
self::assertArrayHasKey('cart', $response['setPaymentMethodOnCart']);
117+
self::assertArrayHasKey('selected_payment_method', $response['setPaymentMethodOnCart']['cart']);
118+
119+
$selectedPaymentMethod = $response['setPaymentMethodOnCart']['cart']['selected_payment_method'];
120+
self::assertArrayHasKey('code', $selectedPaymentMethod);
121+
self::assertEquals($methodCode, $selectedPaymentMethod['code']);
122+
123+
self::assertArrayHasKey('title', $selectedPaymentMethod);
124+
self::assertEquals($methodTitle, $selectedPaymentMethod['title']);
125+
126+
self::assertArrayHasKey('purchase_order_number', $selectedPaymentMethod);
127+
self::assertEquals($poNumber, $selectedPaymentMethod['purchase_order_number']);
128+
}
129+
130+
/**
131+
* @param string $maskedQuoteId
132+
* @param string $methodCode
133+
* @return string
134+
*/
135+
private function getQuery(
136+
string $maskedQuoteId,
137+
string $methodCode
138+
) : string {
139+
return <<<QUERY
140+
mutation {
141+
setPaymentMethodOnCart(input: {
142+
cart_id: "{$maskedQuoteId}",
143+
payment_method: {
144+
code: "{$methodCode}"
145+
}
146+
}) {
147+
cart {
148+
selected_payment_method {
149+
code
150+
title
151+
}
152+
}
153+
}
154+
}
155+
QUERY;
156+
}
157+
}

0 commit comments

Comments
 (0)