Change getTemplateContribution to prefer is_template contrib
authorAidan Saunders <aidan.saunders@squiffle.uk>
Wed, 9 Oct 2019 08:49:13 +0000 (09:49 +0100)
committerAidan Saunders <aidan.saunders@squiffle.uk>
Wed, 9 Oct 2019 09:59:21 +0000 (10:59 +0100)
Add test

CRM/Contribute/BAO/ContributionRecur.php
tests/phpunit/CRM/Contribute/BAO/ContributionRecurTest.php

index f7532dca213fa6473590432c80174687fec7bb87..7f80887281a1fc7c6f98c613da1af6941a068cc7 100644 (file)
@@ -433,12 +433,23 @@ INNER JOIN civicrm_contribution       con ON ( con.id = mp.contribution_id )
       'return' => "is_test",
       'id' => $id,
     ]);
+    // First look for new-style template contribution with is_template=1
     $templateContributions = \Civi\Api4\Contribution::get()
       ->addWhere('contribution_recur_id', '=', $id)
+      ->addWhere('is_template', '=', 1)
       ->addWhere('is_test', '=', $is_test)
       ->addOrderBy('id', 'DESC')
       ->setLimit(1)
       ->execute();
+    if (!$templateContributions->count()) {
+      // Fall back to old style template contributions
+      $templateContributions = \Civi\Api4\Contribution::get()
+        ->addWhere('contribution_recur_id', '=', $id)
+        ->addWhere('is_test', '=', $is_test)
+        ->addOrderBy('id', 'DESC')
+        ->setLimit(1)
+        ->execute();
+    }
     if ($templateContributions->count()) {
       $templateContribution = $templateContributions->first();
       $result = array_merge($templateContribution, $overrides);
index dfc79ba856c485d4ba47ed847a42039294d07d38..bd8370cbceb1bee2e15e56189c0be0fe7e7bdb84 100644 (file)
@@ -200,4 +200,38 @@ class CRM_Contribute_BAO_ContributionRecurTest extends CiviUnitTestCase {
     $this->assertEquals($firstContrib['id'], $fetchedTemplate['id']);
   }
 
+  /**
+   * Test that is_template contribution is used where available
+   *
+   */
+  public function testGetTemplateContributionNewTemplate() {
+    $contributionRecur = $this->callAPISuccess('contribution_recur', 'create', $this->_params);
+    // Create the template
+    $templateContrib = $this->callAPISuccess('Contribution', 'create', [
+      'contribution_recur_id' => $contributionRecur['id'],
+      'total_amount' => '3.00',
+      'financial_type_id' => 1,
+      'payment_instrument_id' => 1,
+      'currency' => 'USD',
+      'contact_id' => $this->individualCreate(),
+      'contribution_status_id' => 1,
+      'receive_date' => 'yesterday',
+      'is_template' => 1,
+    ]);
+    // Create another normal contrib
+    $this->callAPISuccess('Contribution', 'create', [
+      'contribution_recur_id' => $contributionRecur['id'],
+      'total_amount' => '3.00',
+      'financial_type_id' => 1,
+      'payment_instrument_id' => 1,
+      'currency' => 'USD',
+      'contact_id' => $this->individualCreate(),
+      'contribution_status_id' => 1,
+      'receive_date' => 'yesterday',
+    ]);
+    $fetchedTemplate = CRM_Contribute_BAO_ContributionRecur::getTemplateContribution($contributionRecur['id']);
+    // Fetched template should be the is_template, not the latest contrib
+    $this->assertEquals($fetchedTemplate['id'], $templateContrib['id']);
+  }
+
 }