public function testSetGetResponseCode()
 {
     $transaction = new FinancialTransaction();
     $this->assertNull($transaction->getResponseCode());
     $transaction->setResponseCode('foo');
     $this->assertEquals('foo', $transaction->getResponseCode());
 }
 public function testDeposit()
 {
     $controller = $this->getController(array(), false);
     $controller->addPlugin($plugin = $this->getPlugin());
     $plugin->expects($this->once())->method('deposit');
     $controller->expects($this->once())->method('buildFinancialTransaction')->will($this->returnCallback(function () {
         $transaction = new FinancialTransaction();
         $transaction->setProcessedAmount(123.45);
         $transaction->setResponseCode(PluginInterface::RESPONSE_CODE_SUCCESS);
         $transaction->setReasonCode(PluginInterface::REASON_CODE_SUCCESS);
         return $transaction;
     }));
     $payment = $this->getPayment();
     $payment->setState(PaymentInterface::STATE_APPROVED);
     $payment->setApprovedAmount(123.45);
     $instruction = $payment->getPaymentInstruction();
     $instruction->setState(PaymentInstructionInterface::STATE_VALID);
     $instruction->setApprovedAmount(10);
     $result = $this->callDeposit($controller, array($payment, 123.45));
     $this->assertEquals(Result::STATUS_SUCCESS, $result->getStatus(), 'Result status is not success: ' . $result->getReasonCode());
     $this->assertEquals(123.45, $payment->getDepositedAmount());
     $this->assertEquals(123.45, $instruction->getDepositedAmount());
     $this->assertEquals(PaymentInterface::STATE_DEPOSITED, $payment->getState());
     $this->assertEquals(0, $payment->getDepositingAmount());
     $this->assertEquals(0, $instruction->getDepositingAmount());
 }
 public function testDispatchesEvents()
 {
     $controller = $this->getController(array(), false, true);
     $payment = $this->getPayment();
     $instruction = $payment->getPaymentInstruction();
     $instruction->setState(PaymentInstructionInterface::STATE_VALID);
     $plugin = $this->getPlugin();
     $plugin->expects($this->once())->method('approve');
     $controller->addPlugin($plugin);
     $transaction = new FinancialTransaction();
     $transaction->setResponseCode(PluginInterface::RESPONSE_CODE_SUCCESS);
     $transaction->setProcessedAmount(50.12);
     $controller->expects($this->once())->method('buildFinancialTransaction')->will($this->returnValue($transaction));
     $this->dispatcher->expects($this->at(0))->method('dispatch')->with('payment.state_change', new PaymentStateChangeEvent($payment, PaymentInterface::STATE_NEW));
     $this->dispatcher->expects($this->at(1))->method('dispatch')->with('payment.state_change', new PaymentStateChangeEvent($payment, PaymentInterface::STATE_APPROVING));
     $this->dispatcher->expects($this->at(2))->method('dispatch')->with('payment_instruction.state_change', new PaymentInstructionStateChangeEvent($instruction, PaymentInstructionInterface::STATE_VALID));
     $this->callApprove($controller, array($payment, 100));
     $controller->closePaymentInstruction($instruction);
 }