diff options
Diffstat (limited to 'tests/PHPUnit/Integration/SegmentTest.php')
-rw-r--r-- | tests/PHPUnit/Integration/SegmentTest.php | 97 |
1 files changed, 95 insertions, 2 deletions
diff --git a/tests/PHPUnit/Integration/SegmentTest.php b/tests/PHPUnit/Integration/SegmentTest.php index 20b23065db..0558d6a381 100644 --- a/tests/PHPUnit/Integration/SegmentTest.php +++ b/tests/PHPUnit/Integration/SegmentTest.php @@ -512,7 +512,7 @@ class SegmentTest extends IntegrationTestCase $this->assertEquals($this->removeExtraWhiteSpaces($expected), $this->removeExtraWhiteSpaces($query)); } - public function test_getSelectQuery_whenJoinLogLinkVisitActionOnActionOnVisit_WithSameTableAliasButDifferentJoin() + public function test_getSelectQuery_whenJoinLogLinkVisitActionOnActionOnVisit_WithNoTableAliasButDifferentJoin() { $actionType = 3; $idSite = 1; @@ -549,7 +549,7 @@ class SegmentTest extends IntegrationTestCase LEFT JOIN $logVisitTable AS log_visit ON log_visit.idvisit = log_link_visit_action.idvisit LEFT JOIN $logActionTable AS log_action - ON (log_link_visit_action.idaction_name = log_action.idaction AND log_link_visit_action.idaction_url = log_action.idaction) + ON log_link_visit_action.idaction_name = log_action.idaction WHERE ( log_link_visit_action.server_time >= ? AND log_link_visit_action.server_time <= ? AND log_link_visit_action.idsite = ? ) @@ -929,6 +929,99 @@ class SegmentTest extends IntegrationTestCase $this->assertEquals($this->removeExtraWhiteSpaces($expected), $this->removeExtraWhiteSpaces($query)); } + public function test_getSelectQuery_whenLimit_withCustomJoinsAndSameColumns() + { + $select = "log_action_visit_entry_idaction_name.name AS 'EntryPageTitle', log_action_idaction_event_action.name AS 'EventAction', count(distinct log_visit.idvisit) AS 'nb_uniq_visits', count(distinct log_visit.idvisitor) AS 'nb_uniq_visitors', sum(case log_visit.visit_total_actions when 1 then 1 when 0 then 1 else 0 end) AS 'bounce_count', sum(log_visit.visit_total_actions) AS 'sum_actions', sum(log_visit.visit_goal_converted) AS 'sum_visit_goal_converted'"; + $from = array('log_visit', array('table' => 'log_action', 'tableAlias' => 'log_action_visit_entry_idaction_name', 'joinOn' => 'log_visit.visit_entry_idaction_name = log_action_visit_entry_idaction_name.idaction'), 'log_link_visit_action', array('table' => 'log_action', 'tableAlias' => 'log_action_idaction_event_action', 'joinOn' => 'log_link_visit_action.idaction_event_action = log_action_idaction_event_action.idaction')); + $where = ''; + $bind = array(1); + + $segment = ''; + $segment = new Segment($segment, $idSites = array()); + + $orderBy = 'nb_uniq_visits, log_action_idaction_event_action.name'; + $groupBy = 'log_action_visit_entry_idaction_name.name, log_action_idaction_event_action.name'; + $limit = 33; + + $query = $segment->getSelectQuery($select, $from, $where, $bind, $orderBy, $groupBy, $limit); + + $expected = array( + "sql" => " + SELECT log_inner.name AS 'EntryPageTitle', log_inner.name02fd90a35677a359ea5611a4bc456a6f AS 'EventAction', count(distinct log_inner.idvisit) AS 'nb_uniq_visits', count(distinct log_inner.idvisitor) AS 'nb_uniq_visitors', sum(case log_inner.visit_total_actions when 1 then 1 when 0 then 1 else 0 end) AS 'bounce_count', sum(log_inner.visit_total_actions) AS 'sum_actions', sum(log_inner.visit_goal_converted) AS 'sum_visit_goal_converted' + FROM ( + SELECT log_action_visit_entry_idaction_name.name, log_action_idaction_event_action.name as name02fd90a35677a359ea5611a4bc456a6f, log_visit.idvisit, log_visit.idvisitor, log_visit.visit_total_actions, log_visit.visit_goal_converted + FROM log_visit AS log_visit + LEFT JOIN log_action AS log_action_visit_entry_idaction_name ON log_visit.visit_entry_idaction_name = log_action_visit_entry_idaction_name.idaction + LEFT JOIN log_link_visit_action AS log_link_visit_action ON log_link_visit_action.idvisit = log_visit.idvisit + LEFT JOIN log_action AS log_action_idaction_event_action ON log_link_visit_action.idaction_event_action = log_action_idaction_event_action.idaction + ORDER BY nb_uniq_visits, log_action_idaction_event_action.name LIMIT 0, 33 ) + AS log_inner + GROUP BY log_inner.name, log_inner.name02fd90a35677a359ea5611a4bc456a6f + ORDER BY nb_uniq_visits, log_inner.name02fd90a35677a359ea5611a4bc456a6f", + "bind" => array(1)); + + $this->assertEquals($this->removeExtraWhiteSpaces($expected), $this->removeExtraWhiteSpaces($query)); + } + + public function test_getSelectQuery_whenLimit_withCustomJoinsAndSameColumnsAndSimilarColumns() + { + $select = 'log_link_visit_action.idvisit, + log_visit.idvisit, + count(log_visit.idvisit) as numvisits, + count(distinct log_visit.idvisit ) as numvisitors, + log_visit.idvisitor, + log_action.name as url, + sum(log_link_visit_action.time_spent) as `13`, + sum(case log_visit.visit_total_actions when 1 then 1 when 0 then 1 else 0 end) as `6`'; + $from = array('log_visit', 'log_link_visit_action'); + $where = ''; + $bind = array(1); + + $segment = ''; + $segment = new Segment($segment, $idSites = array()); + + $orderBy = 'url, log_visit.idvisit'; + $groupBy = 'log_visit.idvisit, log_visit.idvisit , log_visit.idvisitor, log_visit.idvisitor , log_link_visit_action.idvisit'; + $limit = 33; + + $query = $segment->getSelectQuery($select, $from, $where, $bind, $orderBy, $groupBy, $limit); + + // should have replaced some idvisit columns but not idvisitor column + $expected = array( + "sql" => " + SELECT + log_inner.idvisit, + log_inner.idvisit5d489886e80b4258a9407b219a4e2811, + count(log_inner.idvisit5d489886e80b4258a9407b219a4e2811) as numvisits, + count(distinct log_inner.idvisit5d489886e80b4258a9407b219a4e2811 ) as numvisitors, + log_inner.idvisitor, + log_inner.name as url, + sum(log_inner.time_spent) as `13`, + sum(case log_inner.visit_total_actions when 1 then 1 when 0 then 1 else 0 end) as `6` + FROM + + ( + + SELECT + log_link_visit_action.idvisit, +log_visit.idvisit as idvisit5d489886e80b4258a9407b219a4e2811, +log_visit.idvisitor, +log_action.name, +log_link_visit_action.time_spent, +log_visit.visit_total_actions + FROM + log_visit AS log_visit LEFT JOIN log_link_visit_action AS log_link_visit_action ON log_link_visit_action.idvisit = log_visit.idvisit + ORDER BY + url, log_visit.idvisit LIMIT 0, 33 + ) AS log_inner + GROUP BY + log_inner.idvisit5d489886e80b4258a9407b219a4e2811, log_inner.idvisit5d489886e80b4258a9407b219a4e2811 , log_inner.idvisitor, log_inner.idvisitor , log_inner.idvisit + ORDER BY + url, log_inner.idvisit5d489886e80b4258a9407b219a4e2811", + "bind" => array(1)); + + $this->assertEquals($this->removeExtraWhiteSpaces($expected), $this->removeExtraWhiteSpaces($query)); + } public function test_getSelectQuery_whenLimitAndOffset_outerQueryShouldNotHaveOffset() { |