/** * @test */ public function shouldCaptureWithObtainedCreditCard() { $paymentMock = $this->createPaymentMock(); $paymentMock ->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); })) ; $apiResponse = new JsonResponse(); $apiResponse->setContent(json_encode(array( 'FOO' => 'FOOVAL', 'BAR' => 'BARVAL', ))); $apiMock = $this->createApiMock(); $apiMock ->expects($this->once()) ->method('payment') ->will($this->returnValue($apiResponse)) ; $action = new CaptureAction(); $action->setApi($apiMock); $action->setPayment($paymentMock); $request = new Capture(array( 'AMOUNT' => 10, 'CLIENTUSERAGENT' => 'anAgent', 'CLIENTIP' => '127.0.0.1', )); //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']); }