// The membershipType create breaks transactions so this extra cleanup is needed.
$this->membershipTypeDelete(['id' => $this->membershipTypeID]);
$this->cleanUpSetUpIDs();
+ $this->quickCleanUpFinancialEntities();
$this->quickCleanup(['civicrm_contact', 'civicrm_address', 'civicrm_email', 'civicrm_website', 'civicrm_phone'], TRUE);
parent::tearDown();
}
$this->assertEquals(0, $successfulCronCount);
}
+ /**
+ * Deleted events should not send reminders to additional contacts.
+ *
+ * @throws \CRM_Core_Exception
+ */
+ public function testDeletedEventRemindAddlContacts() {
+ $contactId = $this->individualCreate();
+ $groupId = $this->groupCreate(['name' => 'Additional Contacts', 'title' => 'Additional Contacts']);
+ $this->callAPISuccess('GroupContact', 'create', [
+ 'contact_id' => $contactId,
+ 'group_id' => $groupId,
+ ]);
+ $event = $this->eventCreate(['title' => 'delete this event']);
+ $eventId = $event['id'];
+
+ $this->callAPISuccess('action_schedule', 'create', [
+ 'title' => 'Do not send me',
+ 'subject' => 'I am a reminder attached to a (soon to be) deleted event.',
+ 'entity_value' => $eventId,
+ 'mapping_id' => CRM_Event_ActionMapping::EVENT_NAME_MAPPING_ID,
+ 'start_action_date' => 'start_date',
+ 'start_action_offset' => 1,
+ 'start_action_condition' => 'before',
+ 'start_action_unit' => 'day',
+ 'group_id' => $groupId,
+ 'limit_to' => FALSE,
+ 'mode' => 'Email',
+ ]);
+ $this->callAPISuccess('event', 'delete', ['id' => $eventId]);
+
+ $this->callAPISuccess('job', 'send_reminder', []);
+ $successfulCronCount = CRM_Core_DAO::singleValueQuery('SELECT count(*) FROM civicrm_action_log');
+ $this->assertEquals(0, $successfulCronCount);
+ }
+
/**
* Test scheduled reminders respect limit to (since above identified addition_to handling issue).
*
$this->entityTagAdd(['contact_id' => $contact2ID, 'tag_id' => 'Short']);
$this->entityTagAdd(['contact_id' => $contact2ID, 'tag_id' => 'Tall']);
$result = $this->callAPISuccess('Job', 'process_batch_merge', ['mode' => 'safe']);
- $this->assertEquals(0, count($result['values']['skipped']));
- $this->assertEquals(1, count($result['values']['merged']));
+ $this->assertCount(0, $result['values']['skipped']);
+ $this->assertCount(1, $result['values']['merged']);
$this->callAPISuccessGetCount('Contribution', ['contact_id' => $contactID], 2);
$this->callAPISuccessGetCount('Contribution', ['contact_id' => $contact2ID], 0);
$this->callAPISuccessGetCount('FinancialItem', ['contact_id' => $contactID], 2);
$this->callAPISuccessGetCount('ActivityContact', ['contact_id' => $contact2ID], 2);
}
+ /**
+ * Test that non-contact entity tags are untouched in merge.
+ *
+ * @throws \CRM_Core_Exception
+ */
+ public function testContributionEntityTag() {
+ $this->callAPISuccess('OptionValue', 'create', ['option_group_id' => 'tag_used_for', 'value' => 'civicrm_contribution', 'label' => 'Contribution']);
+ $tagID = $this->tagCreate(['name' => 'Big', 'used_for' => 'civicrm_contribution'])['id'];
+ $contact1 = (int) $this->individualCreate();
+ $contact2 = (int) $this->individualCreate();
+ $contributionID = NULL;
+ while ($contributionID !== $contact2) {
+ $contributionID = (int) $this->callAPISuccess('Contribution', 'create', ['contact_id' => $contact1, 'total_amount' => 5, 'financial_type_id' => 'Donation'])['id'];
+ }
+ $entityTagParams = ['entity_id' => $contributionID, 'entity_table' => 'civicrm_contribution', 'tag_id' => $tagID];
+ $this->callAPISuccess('EntityTag', 'create', $entityTagParams);
+ $this->callAPISuccessGetSingle('EntityTag', $entityTagParams);
+ $this->callAPISuccess('Job', 'process_batch_merge', ['mode' => 'safe']);
+ $this->callAPISuccessGetSingle('EntityTag', $entityTagParams);
+ }
+
/**
* Check that the merge carries across various related entities.
*