public function testSerializeAndUnserialize()
 {
     $payment = new Payment(array('customer' => new Customer(array('first_name' => 'Vasya', 'last_name' => 'Pupkin', 'email' => '*****@*****.**'))));
     $paymentTransaction = new PaymentTransaction(array('status' => PaymentTransaction::STATUS_APPROVED));
     $paymentTransaction->addError(new PaynetException('Test exception'));
     $payment->setStatus(Payment::STATUS_CAPTURE)->addPaymentTransaction($paymentTransaction)->addPaymentTransaction(new PaymentTransaction());
     $unserializedPayment = unserialize(serialize($payment));
     $paymentTransactions = $unserializedPayment->getPaymentTransactions();
     $unserializedTransaction = reset($paymentTransactions);
     $this->assertEquals(Payment::STATUS_CAPTURE, $unserializedPayment->getStatus());
     $this->assertEquals('*****@*****.**', $unserializedPayment->getCustomer()->getEmail());
     $this->assertCount(2, $paymentTransactions);
     $this->assertEquals(PaymentTransaction::STATUS_APPROVED, $unserializedTransaction->getStatus());
     $errors = $unserializedTransaction->getErrors();
     $this->assertTrue($unserializedTransaction->hasErrors());
     $this->assertEquals('Test exception', reset($errors)->getMessage());
 }
 /**
  * Updates Payment transaction by Callback data
  *
  * @param       PaymentTransaction      $paymentTransaction     Payment transaction for updating
  * @param       CallbackResponse        $response               Callback for payment transaction updating
  */
 protected function updatePaymentTransaction(PaymentTransaction $paymentTransaction, CallbackResponse $callbackResponse)
 {
     $paymentTransaction->setStatus($callbackResponse->getStatus());
     $paymentTransaction->getPayment()->setPaynetId($callbackResponse->getPaymentPaynetId());
     if ($callbackResponse->isError() || $callbackResponse->isDeclined()) {
         $paymentTransaction->addError($callbackResponse->getError());
     }
 }
 /**
  * Updates payment transaction by query response data
  * if payment transaction is not processing or approved
  *
  * @param       PaymentTransaction      $paymentTransaction     Payment transaction for updating
  * @param       Response                $response               Response for payment transaction updating
  */
 protected function updatePaymentTransactionOnError(PaymentTransaction $paymentTransaction, Response $response)
 {
     if ($response->isDeclined()) {
         $paymentTransaction->setStatus($response->getStatus());
     } else {
         $paymentTransaction->setStatus(PaymentTransaction::STATUS_ERROR);
     }
     $paymentTransaction->addError($response->getError());
     $this->setPaynetId($paymentTransaction, $response);
 }