From 12c4780e2dd0216c3c36356188104b871b03cec4 Mon Sep 17 00:00:00 2001 From: Jamie McClelland Date: Mon, 18 Sep 2017 13:45:38 -0400 Subject: [PATCH] CRM-21194 - ensure distinct count of clickable URLs works. --- CRM/Mailing/Event/BAO/TrackableURLOpen.php | 25 ++++++++++++------- tests/phpunit/CRM/Mailing/BAO/QueryTest.php | 23 +++++++++++++++++ .../phpunit/CRM/Mailing/BAO/queryDataset.xml | 3 ++- 3 files changed, 41 insertions(+), 10 deletions(-) diff --git a/CRM/Mailing/Event/BAO/TrackableURLOpen.php b/CRM/Mailing/Event/BAO/TrackableURLOpen.php index b681113e5e..858c96aa91 100644 --- a/CRM/Mailing/Event/BAO/TrackableURLOpen.php +++ b/CRM/Mailing/Event/BAO/TrackableURLOpen.php @@ -144,8 +144,12 @@ class CRM_Mailing_Event_BAO_TrackableURLOpen extends CRM_Mailing_Event_DAO_Track $mailing = CRM_Mailing_BAO_Mailing::getTableName(); $job = CRM_Mailing_BAO_MailingJob::getTableName(); + $distinct = NULL; + if ($is_distinct) { + $distinct = 'DISTINCT '; + } $query = " - SELECT COUNT($click.id) as opened + SELECT COUNT($distinct $click.event_queue_id) as opened FROM $click INNER JOIN $queue ON $click.event_queue_id = $queue.id @@ -168,10 +172,6 @@ class CRM_Mailing_Event_BAO_TrackableURLOpen extends CRM_Mailing_Event_DAO_Track $query .= " AND $click.trackable_url_id = " . CRM_Utils_Type::escape($url_id, 'Integer'); } - if ($is_distinct) { - $query .= " GROUP BY $queue.id "; - } - // query was missing $dao->query($query); @@ -305,9 +305,16 @@ class CRM_Mailing_Event_BAO_TrackableURLOpen extends CRM_Mailing_Event_DAO_Track $query = " SELECT $contact.display_name as display_name, $contact.id as contact_id, - $email.email as email, - $click.time_stamp as date, - $url.url as url + $email.email as email,"; + + if ($is_distinct) { + $query .= "MIN($click.time_stamp) as date,"; + } + else { + $query .= "$click.time_stamp as date,"; + } + + $query .= "$url.url as url FROM $contact INNER JOIN $queue ON $queue.contact_id = $contact.id @@ -337,7 +344,7 @@ class CRM_Mailing_Event_BAO_TrackableURLOpen extends CRM_Mailing_Event_DAO_Track } if ($is_distinct) { - $query .= " GROUP BY $queue.id, $click.time_stamp, $url.url "; + $query .= " GROUP BY $queue.id, $url.url "; } $orderBy = "sort_name ASC, {$click}.time_stamp DESC"; diff --git a/tests/phpunit/CRM/Mailing/BAO/QueryTest.php b/tests/phpunit/CRM/Mailing/BAO/QueryTest.php index 020188337f..72d1edf654 100644 --- a/tests/phpunit/CRM/Mailing/BAO/QueryTest.php +++ b/tests/phpunit/CRM/Mailing/BAO/QueryTest.php @@ -89,4 +89,27 @@ class CRM_Mailing_BAO_QueryTest extends CiviUnitTestCase { $this->assertEquals(4, count($totalOpenedMail)); } + /** + * CRM-21194: Test accurate count for unique trackable URLs + */ + public function testTrackableUrlMailingQuery() { + $op = new PHPUnit_Extensions_Database_Operation_Insert(); + $op->execute($this->_dbconn, + $this->createFlatXMLDataSet( + dirname(__FILE__) . '/queryDataset.xml' + ) + ); + + // ensure that total unique clicked mail count is same while + // fetching rows and row count for mailing_id = 14 and + // trackable_url_id 12 + $totalDistinctTrackableUrlCount = CRM_Mailing_Event_BAO_TrackableURLOpen::getTotalCount(14, NULL, TRUE, 13); + $totalTrackableUrlCount = CRM_Mailing_Event_BAO_TrackableURLOpen::getTotalCount(14, NULL, FALSE, 13); + $totalTrackableUrlMail = CRM_Mailing_Event_BAO_TrackableURLOpen::getRows(14, NULL, TRUE, 13); + + $this->assertEquals(3, $totalDistinctTrackableUrlCount, "Accurately display distinct count of unique trackable URLs"); + $this->assertEquals(4, $totalTrackableUrlCount, "Accurately display count of unique trackable URLs"); + $this->assertEquals(3, count($totalTrackableUrlMail), "Accurately display list of unique trackable URLs and who clicked them."); + } + } diff --git a/tests/phpunit/CRM/Mailing/BAO/queryDataset.xml b/tests/phpunit/CRM/Mailing/BAO/queryDataset.xml index 99002f828a..c74ed0b08f 100644 --- a/tests/phpunit/CRM/Mailing/BAO/queryDataset.xml +++ b/tests/phpunit/CRM/Mailing/BAO/queryDataset.xml @@ -12,7 +12,7 @@ test05 109 n y n n test06 110 n y2 n y test07 111 n y y[dc] n - test08 112 n y y[c] y + test08 112 n y y[c2] y Mailing 15: Second Test Mailing Events, 2011-05-26 @@ -131,6 +131,7 @@ + -- 2.25.1