public function testCheck()
 {
     $input = $this->doPrepareCheckInput();
     // check
     $processor = $this->makeProcessor($input, 'check');
     $processor->response();
     $paymentCheck = $processor->item();
     $this->assertEquals(Status::ENABLED, $paymentCheck->status);
     $this->assertEmpty($paymentCheck->code);
     // pay
     $processor = $this->makeProcessor($input, 'pay');
     $processor->response();
     $paymentPay = $processor->item();
     $this->assertNotEmpty($paymentPay->code);
     // 'check' changed to 'pay'
     $paymentCheck = Payment::find($paymentCheck->id);
     $this->assertEquals(Status::PAY, $paymentCheck->status);
     // status
     $input = array('term' => $paymentPay->term, 'code' => $paymentPay->code, 'to' => $paymentPay->to, 'time' => Time::ts());
     Secure::sign($input, 'status', 'secret');
     $processor = $this->makeProcessor($input, 'status');
     $processor->response();
     $paymentStatus = $processor->item();
     // 'status' == data from 'pay'
     $this->assertEquals($paymentPay->id, $paymentStatus->id);
     $this->assertEquals(Status::PROCESSED, $paymentStatus->status);
     // cancel
     $processor = $this->makeProcessor($input, 'cancel');
     $response = $processor->response();
     $this->assertEmpty($response->error());
 }
 /**
  * Approve one payment
  */
 public function approve()
 {
     $id = Input::get('id');
     $terminal = Terminal::whereUserId($this->userId())->first();
     $payment = Payment::find($id);
     if ($payment->term == $terminal->id) {
         $status = $payment->getPossibleStatus();
         if ($status) {
             $payment->status = $status;
             $payment->save();
             if ($payment->getPossibleStatus()) {
                 return array('next' => true, 'value' => 'Move to [' . $payment->getPossibleStatus() . ']', 'status' => $payment->status);
             }
         }
     }
     return array('next' => false, 'status' => $payment ? $payment->status : null);
 }