From 8c15aab268ad0167d39d2e56f70f35a8f4080c7e Mon Sep 17 00:00:00 2001 From: Eileen McNaughton Date: Mon, 27 Oct 2014 15:33:22 +1300 Subject: [PATCH] CRM-15227 tests to demonstrate bug in recurring membership transaction IPN --- .../CRM/Core/Payment/AuthorizeNetIPNTest.php | 23 ++++++++++++++++++ .../CRM/Core/Payment/PayPalProIPNTest.php | 24 +++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/tests/phpunit/CRM/Core/Payment/AuthorizeNetIPNTest.php b/tests/phpunit/CRM/Core/Payment/AuthorizeNetIPNTest.php index 8269f138b7..eac0b7e819 100644 --- a/tests/phpunit/CRM/Core/Payment/AuthorizeNetIPNTest.php +++ b/tests/phpunit/CRM/Core/Payment/AuthorizeNetIPNTest.php @@ -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')); + } + /** * */ diff --git a/tests/phpunit/CRM/Core/Payment/PayPalProIPNTest.php b/tests/phpunit/CRM/Core/Payment/PayPalProIPNTest.php index d6240aa654..ddfeef5082 100644 --- a/tests/phpunit/CRM/Core/Payment/PayPalProIPNTest.php +++ b/tests/phpunit/CRM/Core/Payment/PayPalProIPNTest.php @@ -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 -- 2.25.1