Skip to content

Commit 287186d

Browse files
committed
GraphQL-293: [Payment methods] Set Payment Method on Cart
1 parent 495c540 commit 287186d

File tree

1 file changed

+36
-209
lines changed

1 file changed

+36
-209
lines changed

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

Lines changed: 36 additions & 209 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,19 @@
77

88
namespace Magento\GraphQl\Quote;
99

10-
use Magento\Framework\App\Config\ScopeConfigInterface;
1110
use Magento\Integration\Api\CustomerTokenServiceInterface;
12-
use Magento\OfflinePayments\Model\Banktransfer;
13-
use Magento\OfflinePayments\Model\Cashondelivery;
1411
use Magento\OfflinePayments\Model\Checkmo;
15-
use Magento\OfflinePayments\Model\Purchaseorder;
16-
use Magento\Quote\Model\Quote;
12+
use Magento\Quote\Model\QuoteFactory;
1713
use Magento\Quote\Model\QuoteIdToMaskedQuoteIdInterface;
1814
use Magento\Quote\Model\ResourceModel\Quote as QuoteResource;
1915
use Magento\TestFramework\Helper\Bootstrap;
20-
use Magento\TestFramework\ObjectManager;
2116
use Magento\TestFramework\TestCase\GraphQlAbstract;
22-
use Magento\Framework\App\Cache\TypeListInterface;
23-
use Magento\Config\Model\ResourceModel\Config;
2417

2518
/**
2619
* Test for setting payment methods on cart
2720
*/
2821
class SetPaymentMethodOnCartTest extends GraphQlAbstract
2922
{
30-
private const OFFLINE_METHOD_CODES = [
31-
Checkmo::PAYMENT_METHOD_CHECKMO_CODE,
32-
Banktransfer::PAYMENT_METHOD_BANKTRANSFER_CODE,
33-
Cashondelivery::PAYMENT_METHOD_CASHONDELIVERY_CODE,
34-
Purchaseorder::PAYMENT_METHOD_PURCHASEORDER_CODE,
35-
];
36-
3723
/**
3824
* @var CustomerTokenServiceInterface
3925
*/
@@ -45,139 +31,56 @@ class SetPaymentMethodOnCartTest extends GraphQlAbstract
4531
private $quoteResource;
4632

4733
/**
48-
* @var Quote
34+
* @var QuoteFactory
4935
*/
50-
private $quote;
36+
private $quoteFactory;
5137

5238
/**
5339
* @var QuoteIdToMaskedQuoteIdInterface
5440
*/
5541
private $quoteIdToMaskedId;
5642

57-
/**
58-
* @var Config
59-
*/
60-
private $config;
61-
62-
/**
63-
* @var TypeListInterface
64-
*/
65-
private $cacheList;
66-
6743
/**
6844
* @inheritdoc
6945
*/
7046
protected function setUp()
7147
{
7248
$objectManager = Bootstrap::getObjectManager();
73-
$this->quoteResource = $objectManager->create(QuoteResource::class);
74-
$this->quote = $objectManager->create(Quote::class);
75-
$this->quoteIdToMaskedId = $objectManager->create(QuoteIdToMaskedQuoteIdInterface::class);
49+
$this->quoteResource = $objectManager->get(QuoteResource::class);
50+
$this->quoteFactory = $objectManager->get(QuoteFactory::class);
51+
$this->quoteIdToMaskedId = $objectManager->get(QuoteIdToMaskedQuoteIdInterface::class);
7652
$this->customerTokenService = $objectManager->get(CustomerTokenServiceInterface::class);
77-
$this->config = $objectManager->get(Config::class);
78-
$this->cacheList = $objectManager->get(TypeListInterface::class);
79-
80-
foreach (static::OFFLINE_METHOD_CODES as $offlineMethodCode) {
81-
$this->config->saveConfig(
82-
'payment/' . $offlineMethodCode . '/active',
83-
'1',
84-
ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
85-
0
86-
);
87-
}
88-
$this->cacheList->cleanType('config');
8953
}
9054

9155
/**
92-
* @inheritdoc
93-
*/
94-
protected function tearDown()
95-
{
96-
foreach (static::OFFLINE_METHOD_CODES as $offlineMethodCode) {
97-
//Never no disable checkmo method
98-
if ($offlineMethodCode === Checkmo::PAYMENT_METHOD_CHECKMO_CODE) {
99-
continue;
100-
}
101-
$this->config->saveConfig(
102-
'payment/' . $offlineMethodCode . '/active',
103-
'0',
104-
ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
105-
0
106-
);
107-
}
108-
$this->cacheList->cleanType('config');
109-
}
110-
111-
/**
112-
* @param string $methodCode
113-
* @dataProvider dataProviderOfflinePaymentMethods
11456
* @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
11557
*/
116-
public function testSetPaymentMethodOnCart(string $methodCode)
58+
public function testSetPaymentMethodOnCart()
11759
{
118-
/** @var \Magento\Config\Model\ResourceModel\Config $config */
119-
$config = ObjectManager::getInstance()->get(\Magento\Config\Model\ResourceModel\Config::class);
120-
$config->saveConfig(
121-
'payment/' . $methodCode . '/active',
122-
1,
123-
ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
124-
0
125-
);
126-
127-
$this->quoteResource->load(
128-
$this->quote,
129-
'test_order_1',
130-
'reserved_order_id'
131-
);
132-
$maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$this->quote->getId());
133-
134-
$query = $this->prepareMutationQuery(
135-
$maskedQuoteId,
136-
$methodCode
137-
);
60+
$methodCode = Checkmo::PAYMENT_METHOD_CHECKMO_CODE;
61+
$maskedQuoteId = $this->getMaskedQuoteIdByReversedQuoteId('test_order_1');
13862

63+
$query = $this->prepareMutationQuery($maskedQuoteId, $methodCode);
13964
$response = $this->sendRequestWithToken($query);
14065

141-
$this->assertArrayHasKey('setPaymentMethodOnCart', $response);
142-
$this->assertArrayHasKey('cart', $response['setPaymentMethodOnCart']);
143-
$this->assertEquals($maskedQuoteId, $response['setPaymentMethodOnCart']['cart']['cart_id']);
144-
$this->assertArrayHasKey('payment_method', $response['setPaymentMethodOnCart']['cart']);
145-
$this->assertEquals($methodCode, $response['setPaymentMethodOnCart']['cart']['payment_method']['code']);
146-
}
147-
148-
public function dataProviderOfflinePaymentMethods(): array
149-
{
150-
$methods = [];
151-
foreach (static::OFFLINE_METHOD_CODES as $offlineMethodCode) {
152-
//Purchase order requires additional input and is tested separately
153-
if ($offlineMethodCode === Purchaseorder::PAYMENT_METHOD_PURCHASEORDER_CODE) {
154-
continue;
155-
}
156-
$methods[] = [$offlineMethodCode];
157-
}
158-
159-
return $methods;
66+
self::assertArrayHasKey('setPaymentMethodOnCart', $response);
67+
self::assertArrayHasKey('cart', $response['setPaymentMethodOnCart']);
68+
self::assertEquals($maskedQuoteId, $response['setPaymentMethodOnCart']['cart']['cart_id']);
69+
self::assertArrayHasKey('selected_payment_method', $response['setPaymentMethodOnCart']['cart']);
70+
self::assertEquals($methodCode, $response['setPaymentMethodOnCart']['cart']['selected_payment_method']['code']);
16071
}
16172

16273
/**
16374
* @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
75+
* @expectedException \Exception
76+
* @expectedExceptionMessage The requested Payment Method is not available.
16477
*/
16578
public function testSetNonExistingPaymentMethod()
16679
{
167-
$paymentMethod = 'noway';
168-
$this->quoteResource->load(
169-
$this->quote,
170-
'test_order_1',
171-
'reserved_order_id'
172-
);
173-
$maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$this->quote->getId());
174-
175-
$query = $this->prepareMutationQuery(
176-
$maskedQuoteId,
177-
$paymentMethod
178-
);
80+
$methodCode = 'noway';
81+
$maskedQuoteId = $this->getMaskedQuoteIdByReversedQuoteId('test_order_1');
17982

180-
$this->expectExceptionMessage('The requested Payment Method is not available.');
83+
$query = $this->prepareMutationQuery($maskedQuoteId, $methodCode);
18184
$this->sendRequestWithToken($query);
18285
}
18386

@@ -186,18 +89,10 @@ public function testSetNonExistingPaymentMethod()
18689
*/
18790
public function testSetPaymentMethodByGuestToCustomerCart()
18891
{
189-
$paymentMethod = 'checkmo';
190-
$this->quoteResource->load(
191-
$this->quote,
192-
'test_order_1',
193-
'reserved_order_id'
194-
);
195-
$maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$this->quote->getId());
92+
$methodCode = 'checkmo';
93+
$maskedQuoteId = $this->getMaskedQuoteIdByReversedQuoteId('test_order_1');
19694

197-
$query = $this->prepareMutationQuery(
198-
$maskedQuoteId,
199-
$paymentMethod
200-
);
95+
$query = $this->prepareMutationQuery($maskedQuoteId, $methodCode);
20196

20297
$this->expectExceptionMessage(
20398
"The current user cannot perform operations on cart \"$maskedQuoteId\""
@@ -206,84 +101,6 @@ public function testSetPaymentMethodByGuestToCustomerCart()
206101
$this->graphQlQuery($query);
207102
}
208103

209-
/**
210-
* @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
211-
*/
212-
public function testSetPaymentMethodPurchaseOrderOnCart()
213-
{
214-
$methodCode = \Magento\OfflinePayments\Model\Purchaseorder::PAYMENT_METHOD_PURCHASEORDER_CODE;
215-
$poNumber = 'GQL-19002';
216-
217-
/** @var \Magento\Config\Model\ResourceModel\Config $config */
218-
$config = ObjectManager::getInstance()->get(\Magento\Config\Model\ResourceModel\Config::class);
219-
$config->saveConfig(
220-
'payment/' . $methodCode . '/active',
221-
1,
222-
ScopeConfigInterface::SCOPE_TYPE_DEFAULT,
223-
0
224-
);
225-
226-
$this->quoteResource->load(
227-
$this->quote,
228-
'test_order_1',
229-
'reserved_order_id'
230-
);
231-
$maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$this->quote->getId());
232-
233-
$query = <<<QUERY
234-
mutation {
235-
setPaymentMethodOnCart(input:
236-
{
237-
cart_id: "$maskedQuoteId",
238-
payment_method: {
239-
code: "$methodCode"
240-
po_number: "$poNumber"
241-
}
242-
}) {
243-
244-
cart {
245-
cart_id,
246-
payment_method {
247-
code
248-
po_number
249-
}
250-
}
251-
}
252-
}
253-
254-
QUERY;
255-
256-
$response = $this->sendRequestWithToken($query);
257-
258-
$this->assertArrayHasKey('setPaymentMethodOnCart', $response);
259-
$this->assertArrayHasKey('cart', $response['setPaymentMethodOnCart']);
260-
$this->assertEquals($maskedQuoteId, $response['setPaymentMethodOnCart']['cart']['cart_id']);
261-
$this->assertArrayHasKey('payment_method', $response['setPaymentMethodOnCart']['cart']);
262-
$this->assertEquals($methodCode, $response['setPaymentMethodOnCart']['cart']['payment_method']['code']);
263-
$this->assertEquals($poNumber, $response['setPaymentMethodOnCart']['cart']['payment_method']['po_number']);
264-
}
265-
266-
/**
267-
* @magentoApiDataFixture Magento/Checkout/_files/quote_with_address_saved.php
268-
*/
269-
public function testPurchaseOrderPaymentMethodFailingValidation()
270-
{
271-
$this->quoteResource->load(
272-
$this->quote,
273-
'test_order_1',
274-
'reserved_order_id'
275-
);
276-
$maskedQuoteId = $this->quoteIdToMaskedId->execute((int)$this->quote->getId());
277-
278-
$query = $this->prepareMutationQuery(
279-
$maskedQuoteId,
280-
Purchaseorder::PAYMENT_METHOD_PURCHASEORDER_CODE
281-
);
282-
283-
$this->expectExceptionMessage('Purchase order number is a required field.');
284-
$this->sendRequestWithToken($query);
285-
}
286-
287104
/**
288105
* Generates query for setting the specified shipping method on cart
289106
*
@@ -307,13 +124,12 @@ private function prepareMutationQuery(
307124
308125
cart {
309126
cart_id,
310-
payment_method {
127+
selected_payment_method {
311128
code
312129
}
313130
}
314131
}
315132
}
316-
317133
QUERY;
318134
}
319135

@@ -326,10 +142,21 @@ private function prepareMutationQuery(
326142
*/
327143
private function sendRequestWithToken(string $query): array
328144
{
329-
330145
$customerToken = $this->customerTokenService->createCustomerAccessToken('[email protected]', 'password');
331146
$headerMap = ['Authorization' => 'Bearer ' . $customerToken];
332147

333148
return $this->graphQlQuery($query, [], '', $headerMap);
334149
}
150+
151+
/**
152+
* @param string $reversedQuoteId
153+
* @return string
154+
*/
155+
private function getMaskedQuoteIdByReversedQuoteId(string $reversedQuoteId): string
156+
{
157+
$quote = $this->quoteFactory->create();
158+
$this->quoteResource->load($quote, $reversedQuoteId, 'reserved_order_id');
159+
160+
return $this->quoteIdToMaskedId->execute((int)$quote->getId());
161+
}
335162
}

0 commit comments

Comments
 (0)