Skip to content

Commit

Permalink
Issue civicrm#1640 including a test
Browse files Browse the repository at this point in the history
  • Loading branch information
jaapjansma committed Mar 21, 2020
1 parent 4fefe75 commit d50df89
Show file tree
Hide file tree
Showing 3 changed files with 67 additions and 2 deletions.
3 changes: 3 additions & 0 deletions CRM/Contribute/Form/Task/Status.php
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,8 @@ public function buildQuickForm() {
$status,
TRUE
);
$this->add('checkbox', 'is_email_receipt', ts('Send e-mail receipt'));
$this->setDefaults(['is_email_receipt' => 1]);

$contribIDs = implode(',', $this->_contributionIds);
$query = "
Expand Down Expand Up @@ -278,6 +280,7 @@ public static function processForm($form, $params) {
$input['trxn_id'] = $contribution->invoice_id;
}
$input['trxn_date'] = $params["trxn_date_{$row['contribution_id']}"] . ' ' . date('H:i:s');
$input['is_email_receipt'] = !empty($params['is_email_receipt']);

// @todo calling baseIPN like this is a pattern in it's last gasps. Call contribute.completetransaction api.
$baseIPN->completeTransaction($input, $ids, $objects, $transaction, FALSE);
Expand Down
5 changes: 5 additions & 0 deletions templates/CRM/Contribute/Form/Task/Status.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,11 @@
<table class="form-layout-compressed">
<tr class="crm-contribution-form-block-contribution_status_id"><td class="label">{$form.contribution_status_id.label}</td><td class="html-adjust">{$form.contribution_status_id.html}<br />
<span class="description">{ts}Assign the selected status to all contributions listed below.{/ts}</td></tr>
<tr class="crm-contribution-form-block-is_email_receipt"><td class="label">{$form.is_email_receipt.label}</td>
<td class="html-adjust">{$form.is_email_receipt.html}<br />
<span class="description">{ts}When checked CiviCRM will send an e-mail receipt to the donor. Leave unchecked when you don't want to send an e-mail.{/ts}
</td>
</tr>
</table>
<table>
<tr class="columnheader">
Expand Down
61 changes: 59 additions & 2 deletions tests/phpunit/CRM/Contribute/Form/Task/StatusTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,65 @@ public function tearDown() {
}

/**
* Test update pending contribution
* Test update pending contribution with sending a confirmation mail.
*/
public function testUpdatePendingContribution() {
public function testUpdatePendingContributionWithSendingEmail() {
$this->_individualId = $this->individualCreate();
$form = new CRM_Contribute_Form_Task_Status();

$mut = new CiviMailUtils($this, TRUE);
$mut->clearMessages();
$mut->assertMailLogEmpty();

// create a pending contribution
$contributionParams = [
'contact_id' => $this->_individualId,
'total_amount' => 100,
'financial_type_id' => 'Donation',
'contribution_status_id' => 2,
];
$contribution = $this->callAPISuccess('Contribution', 'create', $contributionParams);
$contributionId = $contribution['id'];
$form->setContributionIds([$contributionId]);

$form->buildQuickForm();

$params = [
"is_email_receipt" => '1',
"contribution_status_id" => 1,
"trxn_id_{$contributionId}" => NULL,
"check_number_{$contributionId}" => NULL,
"fee_amount_{$contributionId}" => 0,
"trxn_date_{$contributionId}" => date('m/d/Y'),
"payment_instrument_id_{$contributionId}" => 4,
];

CRM_Contribute_Form_Task_Status::processForm($form, $params);

$contribution = $this->callAPISuccess('Contribution', 'get', ['id' => $contributionId]);
$updatedContribution = $contribution['values'][1];

$this->assertEquals('', $updatedContribution['contribution_source']);
$this->assertEquals(date("Y-m-d"), date("Y-m-d", strtotime($updatedContribution['receive_date'])));
$this->assertNotEquals("00:00:00", date("H:i:s", strtotime($updatedContribution['receive_date'])));
$this->assertEquals('Completed', $updatedContribution['contribution_status']);

$msg = $mut->getMostRecentEmail();
$this->assertNotEmpty($msg);
$mut->stop();
}

/**
* Test update pending contribution without sending a confirmation mail.
*/
public function testUpdatePendingContributionWithoutSendingEmail() {
$this->_individualId = $this->individualCreate();
$form = new CRM_Contribute_Form_Task_Status();

$mut = new CiviMailUtils($this, TRUE);
$mut->clearMessages();
$mut->assertMailLogEmpty();

// create a pending contribution
$contributionParams = [
'contact_id' => $this->_individualId,
Expand All @@ -45,6 +98,7 @@ public function testUpdatePendingContribution() {
$form->buildQuickForm();

$params = [
"is_email_receipt" => '0',
"contribution_status_id" => 1,
"trxn_id_{$contributionId}" => NULL,
"check_number_{$contributionId}" => NULL,
Expand All @@ -62,6 +116,9 @@ public function testUpdatePendingContribution() {
$this->assertEquals(date("Y-m-d"), date("Y-m-d", strtotime($updatedContribution['receive_date'])));
$this->assertNotEquals("00:00:00", date("H:i:s", strtotime($updatedContribution['receive_date'])));
$this->assertEquals('Completed', $updatedContribution['contribution_status']);

$mut->assertMailLogEmpty();
$mut->stop();
}

}

0 comments on commit d50df89

Please sign in to comment.