CRM-15227 tests to demonstrate bug in recurring membership transaction IPN
authorEileen McNaughton <eileen@fuzion.co.nz>
Mon, 27 Oct 2014 02:33:22 +0000 (15:33 +1300)
committerEileen McNaughton <eileen@fuzion.co.nz>
Mon, 27 Oct 2014 02:33:22 +0000 (15:33 +1300)
tests/phpunit/CRM/Core/Payment/AuthorizeNetIPNTest.php
tests/phpunit/CRM/Core/Payment/PayPalProIPNTest.php

index 8269f138b72abb763dcf07267a754f6d480ca7e3..eac0b7e8192f0406ed183c65c67e0468d876e287 100644 (file)
@@ -65,6 +65,29 @@ class CRM_Core_Payment_AuthorizeNetIPNTest extends CiviUnitTestCase {
     $this->assertEquals('second_one', $contribution['values'][1]['trxn_id']);
   }
 
+  /**
+   * test IPN response updates contribution_recur & contribution for first & second contribution
+   */
+  function testIPNPaymentMembershipRecurSuccess() {
+    $this->setupMembershipRecurringPaymentProcessorTransaction();
+    $paypalIPN = new CRM_Core_Payment_AuthorizeNetIPN($this->getRecurTransaction());
+    $paypalIPN->main();
+    $contribution = $this->callAPISuccess('contribution', 'getsingle', array('id' => $this->_contributionID));
+    $this->assertEquals(1, $contribution['contribution_status_id']);
+    $this->assertEquals('6511143069', $contribution['trxn_id']);
+    // source gets set by processor
+    $this->assertTrue(substr($contribution['contribution_source'], 0, 20) == "Online Contribution:");
+    $contributionRecur = $this->callAPISuccess('contribution_recur', 'getsingle', array('id' => $this->_contributionRecurID));
+    $this->assertEquals(5, $contributionRecur['contribution_status_id']);
+    $paypalIPN = new CRM_Core_Payment_AuthorizeNetIPN($this->getRecurSubsequentTransaction());
+    $paypalIPN->main();
+    $contribution = $this->callAPISuccess('contribution', 'get', array('contribution_recur_id' => $this->_contributionRecurID, 'sequential' => 1));
+    $this->assertEquals(2, $contribution['count']);
+    $this->assertEquals('second_one', $contribution['values'][1]['trxn_id']);
+    $this->callAPISuccessGetSingle('membership_payment', array('contribution_id' => $contribution['values'][1]['id'],));
+    $this->callAPISuccessGetSingle('line_item', array('contribution_id' => $contribution['values'][1]['id'], 'entity_table' => 'civicrm_membership'));
+  }
+
   /**
    *
    */
index d6240aa6547edb7f01c5f86ef78113ac126830c1..ddfeef5082295bd556f4028c60ac922ac95aada2 100644 (file)
@@ -89,6 +89,30 @@ class CRM_Core_Payment_PayPalProIPNTest extends CiviUnitTestCase {
     $this->assertEquals('secondone', $contribution['values'][1]['trxn_id']);
   }
 
+  /**
+   * test IPN response updates contribution_recur & contribution for first & second contribution
+   */
+  function testIPNPaymentMembershipRecurSuccess() {
+    $this->setupMembershipRecurringPaymentProcessorTransaction();
+    $paypalIPN = new CRM_Core_Payment_PayPalProIPN($this->getPaypalProRecurTransaction());
+    $paypalIPN->main();
+    $contribution = $this->callAPISuccess('contribution', 'getsingle', array('id' => $this->_contributionID));
+    $membershipEndDate = $this->callAPISuccessGetValue('membership', array('return' => 'end_date'));
+    $this->assertEquals(1, $contribution['contribution_status_id']);
+    $this->assertEquals('8XA571746W2698126', $contribution['trxn_id']);
+    // source gets set by processor
+    $this->assertTrue(substr($contribution['contribution_source'], 0, 20) == "Online Contribution:");
+    $contributionRecur = $this->callAPISuccess('contribution_recur', 'getsingle', array('id' => $this->_contributionRecurID));
+    $this->assertEquals(5, $contributionRecur['contribution_status_id']);
+    $paypalIPN = new CRM_Core_Payment_PaypalProIPN($this->getPaypalProRecurSubsequentTransaction());
+    $paypalIPN->main();
+    $this->assertEquals(strtotime('+ 1 year', strtotime($membershipEndDate)), strtotime($this->callAPISuccessGetValue('membership', array('return' => 'end_date'))));
+    $contribution = $this->callAPISuccess('contribution', 'get', array('contribution_recur_id' => $this->_contributionRecurID, 'sequential' => 1));
+    $this->assertEquals(2, $contribution['count']);
+    $this->assertEquals('secondone', $contribution['values'][1]['trxn_id']);
+    $this->callAPISuccessGetSingle('membership_payment', array('contribution_id' => $contribution['values'][1]['id'],));
+    $this->callAPISuccessGetSingle('line_item', array('contribution_id' => $contribution['values'][1]['id'], 'entity_table' => 'civicrm_membership'));
+  }
   /**
    * CRM-13743 test IPN edge case where the first transaction fails and the second succeeds
    * We are checking that the created contribution has the same date as IPN says it should