/**
* @test
*/
public function shouldCaptureWithObtainedCreditCard()
{
$gatewayMock = $this->createGatewayMock();
$gatewayMock->expects($this->once())->method('execute')->with($this->isInstanceOf('Payum\\Core\\Request\\ObtainCreditCard'))->will($this->returnCallback(function (ObtainCreditCard $request) {
$card = new CreditCard();
$card->setNumber('1234567812345678');
$card->setExpireAt(new \DateTime('2014-10-01'));
$card->setHolder('John Doe');
$card->setSecurityCode('123');
$request->set($card);
}));
$result = array('FOO' => 'FOOVAL', 'BAR' => 'BARVAL');
$apiMock = $this->createApiMock();
$apiMock->expects($this->once())->method('doSale')->will($this->returnValue($result));
$action = new CaptureAction();
$action->setApi($apiMock);
$action->setGateway($gatewayMock);
$request = new Capture(array('AMOUNT' => 10));
//guard
$this->assertTrue($action->supports($request));
$action->execute($request);
$model = iterator_to_array($request->getModel());
$this->assertArrayHasKey('AMOUNT', $model);
$this->assertEquals(10, $model['AMOUNT']);
$this->assertArrayHasKey('FOO', $model);
$this->assertEquals('FOOVAL', $model['FOO']);
}