Skip to content

Commit b6cc007

Browse files
committed
MAGETWO-59197: Create UI component and server structure for Vault
- Added exception throwing for non exists tokens
1 parent 217f0f1 commit b6cc007

File tree

3 files changed

+115
-103
lines changed

3 files changed

+115
-103
lines changed

app/code/Magento/Braintree/Model/Ui/Adminhtml/PayPal/TokenUiComponentProvider.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
use Magento\Vault\Model\Ui\TokenUiComponentProviderInterface;
1616

1717
/**
18-
* Gets Ui component configuration for
18+
* Gets Ui component configuration for Braintree PayPal Vault
1919
*/
2020
class TokenUiComponentProvider implements TokenUiComponentProviderInterface
2121
{

app/code/Magento/Vault/Model/Ui/Adminhtml/TokensConfigProvider.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -221,9 +221,11 @@ private function getVaultPayment($vaultPaymentCode)
221221
*/
222222
private function getPaymentTokenEntityId()
223223
{
224-
return $this->getPaymentTokenManagement()
225-
->getByPaymentId($this->getOrderPaymentEntityId())
226-
->getEntityId();
224+
$paymentToken = $this->getPaymentTokenManagement()->getByPaymentId($this->getOrderPaymentEntityId());
225+
if ($paymentToken === null) {
226+
throw new NoSuchEntityException(__('No available payment tokens for specified order payment.'));
227+
}
228+
return $paymentToken->getEntityId();
227229
}
228230

229231
/**

app/code/Magento/Vault/Test/Unit/Model/Ui/Adminhtml/TokensConfigProviderTest.php

Lines changed: 109 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Magento\Framework\Exception\InputException;
1414
use Magento\Framework\Exception\NoSuchEntityException;
1515
use Magento\Framework\Intl\DateTimeFactory;
16+
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
1617
use Magento\Framework\TestFramework\Unit\Matcher\MethodInvokedAtIndex;
1718
use Magento\Payment\Helper\Data;
1819
use Magento\Sales\Api\Data\OrderInterface;
@@ -29,7 +30,6 @@
2930
use Magento\Vault\Model\Ui\TokenUiComponentProviderInterface;
3031
use Magento\Vault\Model\VaultPaymentInterface;
3132
use PHPUnit_Framework_MockObject_MockObject as MockObject;
32-
use Magento\Framework\TestFramework\Unit\Helper\ObjectManager;
3333

3434
/**
3535
* Class TokensConfigProviderTest
@@ -104,11 +104,21 @@ class TokensConfigProviderTest extends \PHPUnit_Framework_TestCase
104104
*/
105105
private $orderRepository;
106106

107+
/**
108+
* @var TokenUiComponentProviderInterface|MockObject
109+
*/
110+
private $tokenComponentProvider;
111+
107112
/**
108113
* @var ObjectManager
109114
*/
110115
private $objectManager;
111116

117+
/**
118+
* @var TokensConfigProvider
119+
*/
120+
private $configProvider;
121+
112122
protected function setUp()
113123
{
114124
$this->paymentTokenRepository = $this->getMockBuilder(PaymentTokenRepositoryInterface::class)
@@ -138,6 +148,38 @@ protected function setUp()
138148
$this->vaultPayment = $this->getMockForAbstractClass(VaultPaymentInterface::class);
139149

140150
$this->objectManager = new ObjectManager($this);
151+
152+
$this->initStoreMock();
153+
154+
$this->tokenComponentProvider = $this->getMock(TokenUiComponentProviderInterface::class);
155+
156+
$this->configProvider = new TokensConfigProvider(
157+
$this->session,
158+
$this->paymentTokenRepository,
159+
$this->filterBuilder,
160+
$this->searchCriteriaBuilder,
161+
$this->storeManager,
162+
$this->dateTimeFactory,
163+
[
164+
self::VAULT_PROVIDER_CODE => $this->tokenComponentProvider
165+
]
166+
);
167+
168+
$this->objectManager->setBackwardCompatibleProperty(
169+
$this->configProvider,
170+
'paymentDataHelper',
171+
$this->paymentDataHelper
172+
);
173+
$this->objectManager->setBackwardCompatibleProperty(
174+
$this->configProvider,
175+
'paymentTokenManagement',
176+
$this->paymentTokenManagement
177+
);
178+
$this->objectManager->setBackwardCompatibleProperty(
179+
$this->configProvider,
180+
'orderRepository',
181+
$this->orderRepository
182+
);
141183
}
142184

143185
/**
@@ -147,8 +189,6 @@ public function testGetTokensComponentsRegisteredCustomer()
147189
{
148190
$customerId = 1;
149191

150-
$this->initStoreMock();
151-
152192
$this->session->expects(static::once())
153193
->method('getCustomerId')
154194
->willReturn($customerId);
@@ -170,7 +210,7 @@ public function testGetTokensComponentsRegisteredCustomer()
170210
$token = $this->getMockBuilder(PaymentTokenInterface::class)
171211
->getMockForAbstractClass();
172212

173-
list($tokenUiComponent, $tokenUiComponentProvider) = $this->getTokenUiComponentProvider($token);
213+
$tokenUiComponent = $this->getTokenUiComponentProvider($token);
174214

175215
$searchCriteria = $this->getSearchCriteria($customerId, self::ENTITY_ID, self::VAULT_PROVIDER_CODE);
176216

@@ -197,25 +237,7 @@ public function testGetTokensComponentsRegisteredCustomer()
197237
->method('getItems')
198238
->willReturn([$token]);
199239

200-
$configProvider = new TokensConfigProvider(
201-
$this->session,
202-
$this->paymentTokenRepository,
203-
$this->filterBuilder,
204-
$this->searchCriteriaBuilder,
205-
$this->storeManager,
206-
$this->dateTimeFactory,
207-
[
208-
self::VAULT_PROVIDER_CODE => $tokenUiComponentProvider
209-
]
210-
);
211-
212-
$this->objectManager->setBackwardCompatibleProperty(
213-
$configProvider,
214-
'paymentDataHelper',
215-
$this->paymentDataHelper
216-
);
217-
218-
static::assertEquals([$tokenUiComponent], $configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE));
240+
static::assertEquals([$tokenUiComponent], $this->configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE));
219241
}
220242

221243
/**
@@ -263,7 +285,7 @@ public function testGetTokensComponentsGuestCustomer()
263285
->method('getEntityId')
264286
->willReturn(self::ENTITY_ID);
265287

266-
list($tokenUiComponent, $tokenUiComponentProvider) = $this->getTokenUiComponentProvider($token);
288+
$tokenUiComponent = $this->getTokenUiComponentProvider($token);
267289

268290
$searchCriteria = $this->getSearchCriteria($customerId, self::ENTITY_ID, self::VAULT_PROVIDER_CODE);
269291

@@ -290,35 +312,7 @@ public function testGetTokensComponentsGuestCustomer()
290312
->method('getItems')
291313
->willReturn([$token]);
292314

293-
$configProvider = new TokensConfigProvider(
294-
$this->session,
295-
$this->paymentTokenRepository,
296-
$this->filterBuilder,
297-
$this->searchCriteriaBuilder,
298-
$this->storeManager,
299-
$this->dateTimeFactory,
300-
[
301-
self::VAULT_PROVIDER_CODE => $tokenUiComponentProvider
302-
]
303-
);
304-
305-
$this->objectManager->setBackwardCompatibleProperty(
306-
$configProvider,
307-
'paymentDataHelper',
308-
$this->paymentDataHelper
309-
);
310-
$this->objectManager->setBackwardCompatibleProperty(
311-
$configProvider,
312-
'paymentTokenManagement',
313-
$this->paymentTokenManagement
314-
);
315-
$this->objectManager->setBackwardCompatibleProperty(
316-
$configProvider,
317-
'orderRepository',
318-
$this->orderRepository
319-
);
320-
321-
static::assertEquals([$tokenUiComponent], $configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE));
315+
static::assertEquals([$tokenUiComponent], $this->configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE));
322316
}
323317

324318
/**
@@ -330,8 +324,6 @@ public function testGetTokensComponentsGuestCustomerOrderNotFound($exception)
330324
{
331325
$customerId = null;
332326

333-
$this->initStoreMock();
334-
335327
$this->session->expects(static::once())
336328
->method('getCustomerId')
337329
->willReturn($customerId);
@@ -366,35 +358,7 @@ public function testGetTokensComponentsGuestCustomerOrderNotFound($exception)
366358
$this->searchCriteriaBuilder->expects(self::never())
367359
->method('addFilters');
368360

369-
$configProvider = new TokensConfigProvider(
370-
$this->session,
371-
$this->paymentTokenRepository,
372-
$this->filterBuilder,
373-
$this->searchCriteriaBuilder,
374-
$this->storeManager,
375-
$this->dateTimeFactory,
376-
[
377-
self::VAULT_PROVIDER_CODE => $this->getMock(TokenUiComponentProviderInterface::class)
378-
]
379-
);
380-
381-
$this->objectManager->setBackwardCompatibleProperty(
382-
$configProvider,
383-
'paymentDataHelper',
384-
$this->paymentDataHelper
385-
);
386-
$this->objectManager->setBackwardCompatibleProperty(
387-
$configProvider,
388-
'paymentTokenManagement',
389-
$this->paymentTokenManagement
390-
);
391-
$this->objectManager->setBackwardCompatibleProperty(
392-
$configProvider,
393-
'orderRepository',
394-
$this->orderRepository
395-
);
396-
397-
static::assertEmpty($configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE));
361+
static::assertEmpty($this->configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE));
398362
}
399363

400364
/**
@@ -453,18 +417,66 @@ public function testGetTokensComponentsEmptyComponentProvider()
453417
static::assertEmpty($configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE));
454418
}
455419

420+
/**
421+
* @covers \Magento\Vault\Model\Ui\Adminhtml\TokensConfigProvider::getTokensComponents
422+
*/
423+
public function testGetTokensComponentsForGuestCustomerWithoutStoredTokens()
424+
{
425+
$this->session->expects(static::once())
426+
->method('getCustomerId')
427+
->willReturn(null);
428+
429+
$this->paymentDataHelper->expects(static::once())
430+
->method('getMethodInstance')
431+
->with(self::VAULT_PAYMENT_CODE)
432+
->willReturn($this->vaultPayment);
433+
434+
$this->vaultPayment->expects(static::once())
435+
->method('isActive')
436+
->with(self::STORE_ID)
437+
->willReturn(true);
438+
$this->vaultPayment->expects(static::once())
439+
->method('getProviderCode')
440+
->willReturn(self::VAULT_PROVIDER_CODE);
441+
442+
$this->session->expects(static::once())
443+
->method('getReordered')
444+
->willReturn(self::ORDER_ID);
445+
$this->orderRepository->expects(static::once())
446+
->method('get')
447+
->with(self::ORDER_ID)
448+
->willReturn($this->getOrderMock());
449+
450+
$this->paymentTokenManagement->expects(static::once())
451+
->method('getByPaymentId')
452+
->with(self::ORDER_PAYMENT_ENTITY_ID)
453+
->willReturn(null);
454+
455+
$this->filterBuilder->expects(static::once())
456+
->method('setField')
457+
->with(PaymentTokenInterface::ENTITY_ID)
458+
->willReturnSelf();
459+
$this->filterBuilder->expects(static::never())
460+
->method('setValue');
461+
462+
$this->searchCriteriaBuilder->expects(static::never())
463+
->method('addFilters');
464+
465+
static::assertEmpty($this->configProvider->getTokensComponents(self::VAULT_PAYMENT_CODE));
466+
}
467+
456468
/**
457469
* Create mock object for store
458470
*/
459471
private function initStoreMock()
460472
{
461473
$this->store = $this->getMock(StoreInterface::class);
462-
$this->store->expects(static::once())
474+
$this->store->expects(static::any())
463475
->method('getId')
464476
->willReturn(self::STORE_ID);
465477

466478
$this->storeManager = $this->getMock(StoreManagerInterface::class);
467-
$this->storeManager->expects(static::once())
479+
$this->storeManager->expects(static::any())
468480
->method('getStore')
469481
->with(null)
470482
->willReturn($this->store);
@@ -476,39 +488,37 @@ private function initStoreMock()
476488
*/
477489
private function getOrderMock()
478490
{
479-
/** @var OrderInterface|MockObject $orderMock */
480-
$orderMock = $this->getMockBuilder(OrderInterface::class)
491+
/** @var OrderInterface|MockObject $order */
492+
$order = $this->getMockBuilder(OrderInterface::class)
481493
->getMockForAbstractClass();
482-
/** @var OrderPaymentInterface|MockObject $orderPaymentMock */
483-
$orderPaymentMock = $this->getMockBuilder(OrderPaymentInterface::class)
494+
/** @var OrderPaymentInterface|MockObject $orderPayment */
495+
$orderPayment = $this->getMockBuilder(OrderPaymentInterface::class)
484496
->getMockForAbstractClass();
485497

486-
$orderMock->expects(static::once())
498+
$order->expects(static::once())
487499
->method('getPayment')
488-
->willReturn($orderPaymentMock);
489-
$orderPaymentMock->expects(static::once())
500+
->willReturn($orderPayment);
501+
$orderPayment->expects(static::once())
490502
->method('getEntityId')
491503
->willReturn(self::ORDER_PAYMENT_ENTITY_ID);
492504

493-
return $orderMock;
505+
return $order;
494506
}
495507

496508
/**
497509
* Get mock for token ui component provider
498510
* @param PaymentTokenInterface $token
499-
* @return array
511+
* @return TokenUiComponentInterface|MockObject
500512
*/
501513
private function getTokenUiComponentProvider($token)
502514
{
503515
$tokenUiComponent = $this->getMock(TokenUiComponentInterface::class);
504-
505-
$tokenUiComponentProvider = $this->getMock(TokenUiComponentProviderInterface::class);
506-
$tokenUiComponentProvider->expects(static::once())
516+
$this->tokenComponentProvider->expects(static::once())
507517
->method('getComponentForToken')
508518
->with($token)
509519
->willReturn($tokenUiComponent);
510520

511-
return [$tokenUiComponent, $tokenUiComponentProvider];
521+
return $tokenUiComponent;
512522
}
513523

514524
/**

0 commit comments

Comments
 (0)