/**
  *@singleton method used to instantiate class object
  *@access public
  *@return EE_Payment_Processor instance
  */
 public static function instance()
 {
     // check if class object is instantiated
     if (!self::$_instance instanceof EE_Payment_Processor) {
         self::$_instance = new self();
     }
     return self::$_instance;
 }
 public static function check_for_payment_update_on_transaction($transaction)
 {
     if ($transaction instanceof EE_Transaction) {
         $last_payment = $transaction->last_payment();
         //if this payment is from Mijireh and so far unapproved
         if ($last_payment instanceof EE_Payment && $last_payment->payment_method() instanceof EE_Payment_Method && $last_payment->payment_method()->type_obj() instanceof EE_PMT_Mijireh && $last_payment->status() != EEM_Payment::status_id_approved) {
             add_action('AHEE__EE_Registration_Processor__trigger_registration_update_notifications', array('EED_Mijireh_Payment_Checker', 'send_notifications_after_mijireh_ipn'), 5, 2);
             EE_Payment_Processor::instance()->process_ipn(array(), $transaction, $last_payment->payment_method());
         }
     }
 }
 /**
  * @group 7201
  */
 public function test_process_ipn()
 {
     /** @type EE_Payment_Method $pm */
     $pm = $this->new_model_obj_with_dependencies('Payment_Method', array('PMD_type' => 'Mock_Offsite'));
     $this->assertTrue($pm->type_obj() instanceof EE_PMT_Mock_Offsite);
     $this->assertTrue($pm->type_obj()->get_gateway() instanceof EEG_Mock_Offsite);
     $txn = $this->new_typical_transaction();
     //we don't want to bother sending messages. We're not wanting ot test that right now
     remove_all_filters('AHEE__EE_Payment_Processor__update_txn_based_on_payment__successful');
     $payment = EE_Payment_Processor::instance()->process_payment($pm, $txn);
     $fake_req_data = array('gateway_txn_id' => $payment->txn_id_chq_nmbr(), 'status' => EEM_Payment::status_id_approved);
     $this->assertNotEmpty($payment->ID());
     $payment = EE_Payment_Processor::instance()->process_ipn($fake_req_data, $txn, $pm->slug());
     $this->assertTrue($payment instanceof EE_Payment);
     $this->assertEquals(EEM_Payment::status_id_approved, $payment->STS_ID());
     $this->assertEquals(EEM_Payment::status_id_approved, $this->_get_payment_status_in_db($payment));
 }