Skip to content

Commit 04948a0

Browse files
author
Dmytro Yushkin
committed
MAGETWO-56115: [Github] #5857 Impossible to configure custom availability gateway validator
2 parents 64536b2 + 88f80fd commit 04948a0

File tree

2 files changed

+73
-60
lines changed

2 files changed

+73
-60
lines changed

app/code/Magento/Payment/Model/Method/Adapter.php

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -268,14 +268,17 @@ public function isAvailable(CartInterface $quote = null)
268268
$checkResult = new DataObject();
269269
$checkResult->setData('is_available', true);
270270
try {
271-
$validator = $this->getValidatorPool()->get('availability');
272-
$result = $validator->validate(
273-
[
274-
'payment' => $this->paymentDataObjectFactory->create($this->getInfoInstance())
275-
]
276-
);
277-
278-
$checkResult->setData('is_available', $result->isValid());
271+
$infoInstance = $this->getInfoInstance();
272+
if ($infoInstance !== null) {
273+
$validator = $this->getValidatorPool()->get('availability');
274+
$result = $validator->validate(
275+
[
276+
'payment' => $this->paymentDataObjectFactory->create($infoInstance)
277+
]
278+
);
279+
280+
$checkResult->setData('is_available', $result->isValid());
281+
}
279282
} catch (\Exception $e) {
280283
// pass
281284
}

app/code/Magento/Payment/Test/Unit/Model/Method/AdapterTest.php

Lines changed: 62 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -13,37 +13,40 @@
1313
use Magento\Payment\Gateway\Config\ValueHandlerPoolInterface;
1414
use Magento\Payment\Gateway\Data\PaymentDataObjectFactory;
1515
use Magento\Payment\Gateway\Data\PaymentDataObjectInterface;
16+
use Magento\Payment\Gateway\Validator\ResultInterface;
17+
use Magento\Payment\Gateway\Validator\ValidatorInterface;
1618
use Magento\Payment\Gateway\Validator\ValidatorPoolInterface;
1719
use Magento\Payment\Model\InfoInterface;
1820
use Magento\Payment\Model\Method\Adapter;
21+
use PHPUnit_Framework_MockObject_MockObject as MockObject;
1922

2023
/**
2124
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
2225
*/
2326
class AdapterTest extends \PHPUnit_Framework_TestCase
2427
{
2528
/**
26-
* @var \PHPUnit_Framework_MockObject_MockObject | ManagerInterface
29+
* @var MockObject|ManagerInterface
2730
*/
2831
private $eventManager;
2932

3033
/**
31-
* @var \PHPUnit_Framework_MockObject_MockObject | ValueHandlerPoolInterface
34+
* @var MockObject|ValueHandlerPoolInterface
3235
*/
3336
private $valueHandlerPool;
3437

3538
/**
36-
* @var \PHPUnit_Framework_MockObject_MockObject | ValidatorPoolInterface
39+
* @var MockObject|ValidatorPoolInterface
3740
*/
3841
private $validatorPool;
3942

4043
/**
41-
* @var \PHPUnit_Framework_MockObject_MockObject | CommandPoolInterface
44+
* @var MockObject|CommandPoolInterface
4245
*/
4346
private $commandPool;
4447

4548
/**
46-
* @var \PHPUnit_Framework_MockObject_MockObject | PaymentDataObjectFactory
49+
* @var MockObject|PaymentDataObjectFactory
4750
*/
4851
private $paymentDataObjectFactory;
4952

@@ -69,21 +72,11 @@ class AdapterTest extends \PHPUnit_Framework_TestCase
6972

7073
protected function setUp()
7174
{
72-
$this->eventManager = $this->getMock(
73-
\Magento\Framework\Event\ManagerInterface::class
74-
);
75-
$this->valueHandlerPool = $this->getMock(
76-
\Magento\Payment\Gateway\Config\ValueHandlerPoolInterface::class
77-
);
78-
$this->validatorPool = $this->getMock(
79-
\Magento\Payment\Gateway\Validator\ValidatorPoolInterface::class
80-
);
81-
$this->commandPool = $this->getMock(
82-
\Magento\Payment\Gateway\Command\CommandPoolInterface::class
83-
);
84-
$this->paymentDataObjectFactory = $this->getMockBuilder(
85-
\Magento\Payment\Gateway\Data\PaymentDataObjectFactory::class
86-
)
75+
$this->eventManager = $this->getMock(ManagerInterface::class);
76+
$this->valueHandlerPool = $this->getMock(ValueHandlerPoolInterface::class);
77+
$this->validatorPool = $this->getMock(ValidatorPoolInterface::class);
78+
$this->commandPool = $this->getMock(CommandPoolInterface::class);
79+
$this->paymentDataObjectFactory = $this->getMockBuilder(PaymentDataObjectFactory::class)
8780
->disableOriginalConstructor()
8881
->getMock();
8982

@@ -103,11 +96,12 @@ protected function setUp()
10396
);
10497
}
10598

99+
/**
100+
* @covers \Magento\Payment\Model\Method\Adapter::isAvailable
101+
*/
106102
public function testIsAvailableNotActive()
107103
{
108-
$activeValueHandler = $this->getMock(
109-
\Magento\Payment\Gateway\Config\ValueHandlerInterface::class
110-
);
104+
$activeValueHandler = $this->getMock(ValueHandlerInterface::class);
111105

112106
$this->valueHandlerPool->expects(static::once())
113107
->method('get')
@@ -124,17 +118,16 @@ public function testIsAvailableNotActive()
124118
static::assertFalse($this->adapter->isAvailable(null));
125119
}
126120

121+
/**
122+
* @covers \Magento\Payment\Model\Method\Adapter::isAvailable
123+
*/
127124
public function testIsAvailableEmptyQuote()
128125
{
129-
$activeValueHandler = $this->getMock(
130-
\Magento\Payment\Gateway\Config\ValueHandlerInterface::class
131-
);
132-
$availabilityValidator = $this->getMock(
133-
\Magento\Payment\Gateway\Validator\ValidatorInterface::class
134-
);
135-
$paymentDO = $this->getMock(\Magento\Payment\Gateway\Data\PaymentDataObjectInterface::class);
136-
$validationResult = $this->getMock(\Magento\Payment\Gateway\Validator\ResultInterface::class);
137-
$paymentInfo = $this->getMock(\Magento\Payment\Model\InfoInterface::class);
126+
$activeValueHandler = $this->getMock(ValueHandlerInterface::class);
127+
$availabilityValidator = $this->getMock(ValidatorInterface::class);
128+
$paymentDO = $this->getMock(PaymentDataObjectInterface::class);
129+
$validationResult = $this->getMock(ResultInterface::class);
130+
$paymentInfo = $this->getMock(InfoInterface::class);
138131

139132
$this->valueHandlerPool->expects(static::once())
140133
->method('get')
@@ -167,24 +160,49 @@ public function testIsAvailableEmptyQuote()
167160
static::assertTrue($this->adapter->isAvailable(null));
168161
}
169162

163+
/**
164+
* @covers \Magento\Payment\Model\Method\Adapter::isAvailable
165+
*/
166+
public function testIsAvailableWithEmptyInfoInstance()
167+
{
168+
$activeValueHandler = $this->getMock(ValueHandlerInterface::class);
169+
$this->valueHandlerPool->expects(static::once())
170+
->method('get')
171+
->with('active')
172+
->willReturn($activeValueHandler);
173+
$activeValueHandler->expects(static::once())
174+
->method('handle')
175+
->with(['field' => 'active'])
176+
->willReturn(true);
177+
178+
$this->validatorPool->expects(static::never())
179+
->method('get')
180+
->with('availability');
181+
182+
$this->eventManager->expects(static::once())
183+
->method('dispatch');
184+
185+
static::assertTrue($this->adapter->isAvailable(null));
186+
}
187+
170188
public function testExecuteCommandWithCommandExecutor()
171189
{
172-
/** @var ManagerInterface|\PHPUnit_Framework_MockObject_MockObject $eventManager */
190+
/** @var ManagerInterface|MockObject $eventManager */
173191
$eventManager = $this->getMock(
174192
ManagerInterface::class
175193
);
176194

177-
/** @var ValueHandlerPoolInterface|\PHPUnit_Framework_MockObject_MockObject $valueHandlerPool */
195+
/** @var ValueHandlerPoolInterface|MockObject $valueHandlerPool */
178196
$valueHandlerPool = $this->getMock(
179197
ValueHandlerPoolInterface::class
180198
);
181199

182-
/** @var CommandManagerInterface|\PHPUnit_Framework_MockObject_MockObject $commandManager */
200+
/** @var CommandManagerInterface|MockObject $commandManager */
183201
$commandManager = $this->getMock(
184202
CommandManagerInterface::class
185203
);
186204

187-
/** @var PaymentDataObjectFactory|\PHPUnit_Framework_MockObject_MockObject $paymentDataObjectFactory */
205+
/** @var PaymentDataObjectFactory|MockObject $paymentDataObjectFactory */
188206
$paymentDataObjectFactory = $this->getMockBuilder(
189207
PaymentDataObjectFactory::class
190208
)
@@ -232,25 +250,17 @@ public function testExecuteCommandWithCommandExecutor()
232250

233251
public function testExecuteCommandWithCommandPool()
234252
{
235-
/** @var ManagerInterface|\PHPUnit_Framework_MockObject_MockObject $eventManager */
236-
$eventManager = $this->getMock(
237-
ManagerInterface::class
238-
);
253+
/** @var ManagerInterface|MockObject $eventManager */
254+
$eventManager = $this->getMock(ManagerInterface::class);
239255

240-
/** @var ValueHandlerPoolInterface|\PHPUnit_Framework_MockObject_MockObject $valueHandlerPool */
241-
$valueHandlerPool = $this->getMock(
242-
ValueHandlerPoolInterface::class
243-
);
256+
/** @var ValueHandlerPoolInterface|MockObject $valueHandlerPool */
257+
$valueHandlerPool = $this->getMock(ValueHandlerPoolInterface::class);
244258

245-
/** @var CommandPoolInterface|\PHPUnit_Framework_MockObject_MockObject $commandPool */
246-
$commandPool = $this->getMock(
247-
CommandPoolInterface::class
248-
);
259+
/** @var CommandPoolInterface|MockObject $commandPool */
260+
$commandPool = $this->getMock(CommandPoolInterface::class);
249261

250-
/** @var PaymentDataObjectFactory|\PHPUnit_Framework_MockObject_MockObject $paymentDataObjectFactory */
251-
$paymentDataObjectFactory = $this->getMockBuilder(
252-
PaymentDataObjectFactory::class
253-
)
262+
/** @var PaymentDataObjectFactory|MockObject $paymentDataObjectFactory */
263+
$paymentDataObjectFactory = $this->getMockBuilder(PaymentDataObjectFactory::class)
254264
->disableOriginalConstructor()
255265
->getMock();
256266

0 commit comments

Comments
 (0)