diff --git a/tests/phpunit/api/v3/MailingTest.php b/tests/phpunit/api/v3/MailingTest.php index 5859825af84a..24a54a7ba3ff 100644 --- a/tests/phpunit/api/v3/MailingTest.php +++ b/tests/phpunit/api/v3/MailingTest.php @@ -53,8 +53,8 @@ public function setUp() { $this->_email = 'test@test.test'; $this->_params = array( 'subject' => 'Hello {contact.display_name}', - 'body_text' => "This is {contact.display_name}.\n{domain.address}{action.optOutUrl}", - 'body_html' => "

This is {contact.display_name}.

{domain.address}{action.optOutUrl}

", + 'body_text' => "This is {contact.display_name}.\nhttps://civicrm.org\n{domain.address}{action.optOutUrl}", + 'body_html' => "

This is {contact.display_name}.

CiviCRM.org

{domain.address}{action.optOutUrl}

", 'name' => 'mailing name', 'created_id' => $this->_contactID, 'header_id' => '', @@ -658,6 +658,35 @@ public function createDraftMailing($params = array()) { return $createResult['id']; } - //----------- civicrm_mailing_create ---------- + /** + * Test to make sure that if the event queue hashes have been archived, + * we can still have working click-trough URLs working (CRM-17959). + */ + public function testUrlWithMissingTrackingHash() { + $mail = $this->callAPIAndDocument('mailing', 'create', $this->_params + array('scheduled_date' => 'now'), __FUNCTION__, __FILE__); + $jobs = $this->callAPISuccess('mailing_job', 'get', array('mailing_id' => $mail['id'])); + $this->assertEquals(1, $jobs['count']); + + $params = array('mailing_id' => $mail['id'], 'test_email' => 'alice@example.org', 'test_group' => NULL); + $deliveredInfo = $this->callAPISuccess($this->_entity, 'send_test', $params); + + $sql = "SELECT turl.id as url_id, turl.url, q.id as queue_id + FROM civicrm_mailing_trackable_url as turl + INNER JOIN civicrm_mailing_job as j ON turl.mailing_id = j.mailing_id + INNER JOIN civicrm_mailing_event_queue q ON j.id = q.job_id + ORDER BY turl.id DESC LIMIT 1"; + + $dao = CRM_Core_DAO::executeQuery($sql); + $this->assertTrue($dao->fetch()); + + $url = CRM_Mailing_Event_BAO_TrackableURLOpen::track($dao->queue_id, $dao->url_id); + $this->assertContains('https://civicrm.org', $url); + + // Now delete the event queue hashes and see if the tracking still works. + CRM_Core_DAO::executeQuery('DELETE FROM civicrm_mailing_event_queue'); + + $url = CRM_Mailing_Event_BAO_TrackableURLOpen::track($dao->queue_id, $dao->url_id); + $this->assertContains('https://civicrm.org', $url); + } }