Skip to content

Commit

Permalink
Improve PayPalIPN unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
mattwire committed Jul 23, 2018
1 parent b392485 commit 9f68fe6
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 22 deletions.
1 change: 0 additions & 1 deletion CRM/Core/Payment/PayPalIPN.php
Expand Up @@ -226,7 +226,6 @@ public function recur(&$input, &$ids, &$objects, $first) {
// In future moving to create pending & then complete, but this OK for now.
// Also consider accepting 'Failed' like other processors.
$input['contribution_status_id'] = $contributionStatuses['Completed'];
$input['invoice_id'] = md5(uniqid(rand(), TRUE));
$input['original_contribution_id'] = $ids['contribution'];
$input['contribution_recur_id'] = $ids['contributionRecur'];

Expand Down
29 changes: 21 additions & 8 deletions tests/phpunit/CRM/Core/Payment/PayPalIPNTest.php
Expand Up @@ -121,24 +121,37 @@ public function testInvoiceSentOnIPNPaymentSuccess() {
* The second will create a new contribution.
*/
public function testIPNPaymentRecurSuccess() {
$this->setupRecurringPaymentProcessorTransaction();
$this->setupRecurringPaymentProcessorTransaction([], ['total_amount' => '15.00']);
$paypalIPN = new CRM_Core_Payment_PayPalIPN($this->getPaypalRecurTransaction());
$paypalIPN->main();
$contribution = $this->callAPISuccess('contribution', 'getsingle', array('id' => $this->_contributionID));
$this->assertEquals(1, $contribution['contribution_status_id']);
$this->assertEquals('8XA571746W2698126', $contribution['trxn_id']);
$contribution1 = $this->callAPISuccess('contribution', 'getsingle', array('id' => $this->_contributionID));
$this->assertEquals(1, $contribution1['contribution_status_id']);
$this->assertEquals('8XA571746W2698126', $contribution1['trxn_id']);
// source gets set by processor
$this->assertTrue(substr($contribution['contribution_source'], 0, 20) == "Online Contribution:");
$this->assertTrue(substr($contribution1['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_PayPalIPN($this->getPaypalRecurSubsequentTransaction());
$paypalIPN->main();
$contribution = $this->callAPISuccess('contribution', 'get', array(
$contributions = $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->assertEquals(2, $contributions['count']);
$contribution2 = $contributions['values'][1];
$this->assertEquals('secondone', $contribution2['trxn_id']);
$paramsThatShouldMatch = [
'total_amount',
'net_amount',
'fee_amount',
'payment_instrument',
'payment_instrument_id',
'financial_type',
'financial_type_id',
];
foreach ($paramsThatShouldMatch as $match) {
$this->assertEquals($contribution1[$match], $contribution2[$match]);
}
}

/**
Expand Down
32 changes: 19 additions & 13 deletions tests/phpunit/CiviTest/CiviUnitTestCase.php
Expand Up @@ -2775,8 +2775,24 @@ public function paymentProcessorCreate($params = array()) {

/**
* Set up initial recurring payment allowing subsequent IPN payments.
*
* @param array $recurParams (Optional)
* @param array $contributionParams (Optional)
*/
public function setupRecurringPaymentProcessorTransaction($params = array()) {
public function setupRecurringPaymentProcessorTransaction($recurParams = [], $contributionParams = []) {
$contributionParams = array_merge([
'total_amount' => '200',
'invoice_id' => $this->_invoiceID,
'financial_type_id' => 'Donation',
'contribution_status_id' => 'Pending',
'contact_id' => $this->_contactID,
'contribution_page_id' => $this->_contributionPageID,
'payment_processor_id' => $this->_paymentProcessorID,
'is_test' => 0,
'skipCleanMoney' => TRUE,
],
$contributionParams
);
$contributionRecur = $this->callAPISuccess('contribution_recur', 'create', array_merge(array(
'contact_id' => $this->_contactID,
'amount' => 1000,
Expand All @@ -2789,18 +2805,8 @@ public function setupRecurringPaymentProcessorTransaction($params = array()) {
'payment_processor_id' => $this->_paymentProcessorID,
// processor provided ID - use contact ID as proxy.
'processor_id' => $this->_contactID,
'api.contribution.create' => array(
'total_amount' => '200',
'invoice_id' => $this->_invoiceID,
'financial_type_id' => 1,
'contribution_status_id' => 'Pending',
'contact_id' => $this->_contactID,
'contribution_page_id' => $this->_contributionPageID,
'payment_processor_id' => $this->_paymentProcessorID,
'is_test' => 0,
'skipCleanMoney' => TRUE,
),
), $params));
'api.contribution.create' => $contributionParams,
), $recurParams));
$this->_contributionRecurID = $contributionRecur['id'];
$this->_contributionID = $contributionRecur['values']['0']['api.contribution.create']['id'];
}
Expand Down

0 comments on commit 9f68fe6

Please sign in to comment.