diff options
author | diosmosis <diosmosis@users.noreply.github.com> | 2018-12-03 09:42:18 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-03 09:42:18 +0300 |
commit | ed877857e59ec5434153e7142b75f67208ef428e (patch) | |
tree | 8f5cd55a4434b9a07642ff56762c715fa68cd62c /tests | |
parent | 8ccbd91c8e177357d04309410d5bd689f7208132 (diff) |
Fix build and make join table sort stable by using DFS (#13634)
* Try to fix php 7 tests.
* Make join table sort stable.
* Fix a test and try to debug php 7 build.
* Try to fix two other tests.
* Another build fix attempt.
* try another attempt at a stable sort
* debug travis build.
* debug travis build.
* debug travis build.
* debug travis build.
* anything?
* See if using a DFS fixes the test.
* Fix some tests and restore old travis.yml.
* Handle string tables with implicit dependencies in join DFS.
* Fix more tests.
* Fix test that fails on mysqli.
* Use is_numeric instead of regex.
* Better original format Site fix.
* Remove TODO and add Note.
* Cannot use is_numeric.
* Clean table sorting code.
* remove unneeded file
* Fix test and only convert site properties based on property list.
* Fixing some more tests.
Diffstat (limited to 'tests')
5 files changed, 275 insertions, 669 deletions
diff --git a/tests/PHPUnit/Framework/TestCase/SystemTestCase.php b/tests/PHPUnit/Framework/TestCase/SystemTestCase.php index 9db84bc1a6..c270310257 100644 --- a/tests/PHPUnit/Framework/TestCase/SystemTestCase.php +++ b/tests/PHPUnit/Framework/TestCase/SystemTestCase.php @@ -754,7 +754,8 @@ abstract class SystemTestCase extends PHPUnit_Framework_TestCase if (is_null($value)) { $values[] = 'NULL'; } else { - $isNumeric = preg_match('/^[1-9][0-9]*$/', $value); + // is_numeric cannot be used here since some strings will look like floating point numbers (eg 3e456) + $isNumeric = preg_match('/^\d+(\.\d+)?$/', $value); if ($isNumeric) { $values[] = $value; } else if (!ctype_print($value)) { diff --git a/tests/PHPUnit/Integration/SegmentTest.php b/tests/PHPUnit/Integration/SegmentTest.php index f2771a2e10..abb368c5c2 100644 --- a/tests/PHPUnit/Integration/SegmentTest.php +++ b/tests/PHPUnit/Integration/SegmentTest.php @@ -436,6 +436,7 @@ class SegmentTest extends IntegrationTestCase $this->assertEquals($this->removeExtraWhiteSpaces($expected), $this->removeExtraWhiteSpaces($query)); } + public function test_getSelectQuery_whenJoiningManyCustomTablesItShouldKeepTheOrderAsDefined() { $actionType = 3; @@ -496,24 +497,24 @@ class SegmentTest extends IntegrationTestCase $logVisitTable = Common::prefixTable('log_visit'); $expected = array( - "sql" => " - SELECT log_link_visit_action.custom_dimension_1, - 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 $logLinkVisitActionTable AS log_link_visit_action - LEFT JOIN $logActionTable AS log_action ON log_link_visit_action.idaction_url = log_action.idaction - LEFT JOIN $logVisitTable AS log_visit ON log_visit.idvisit = log_link_visit_action.idvisit - LEFT JOIN $logLinkVisitActionTable AS log_link_visit_action_foo ON log_link_visit_action.idvisit = log_link_visit_action_foo.idvisit - LEFT JOIN $logActionTable AS log_action_foo ON log_link_visit_action_foo.idaction_url = log_action_foo.idaction - LEFT JOIN $logLinkVisitActionTable AS log_link_visit_action_bar ON log_link_visit_action.idvisit = log_link_visit_action_bar.idvisit - LEFT JOIN $logActionTable AS log_action_bar ON log_link_visit_action_bar.idaction_url = log_action_bar.idaction - LEFT JOIN $logLinkVisitActionTable AS log_link_visit_action_baz ON log_link_visit_action.idvisit = log_link_visit_action_baz.idvisit - LEFT JOIN $logActionTable AS log_action_baz ON log_link_visit_action_baz.idaction_url = log_action_baz.idaction - WHERE ( log_link_visit_action.server_time >= ? - AND log_link_visit_action.server_time <= ? - AND log_link_visit_action.idsite = ? ) - AND ( log_action.type = ? )", + "sql" => " + SELECT log_link_visit_action.custom_dimension_1, + 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 log_link_visit_action AS log_link_visit_action + LEFT JOIN $logActionTable AS log_action ON log_link_visit_action.idaction_url = log_action.idaction + LEFT JOIN $logVisitTable AS log_visit ON log_visit.idvisit = log_link_visit_action.idvisit + LEFT JOIN $logLinkVisitActionTable AS log_link_visit_action_foo ON log_link_visit_action.idvisit = log_link_visit_action_foo.idvisit + LEFT JOIN $logActionTable AS log_action_foo ON log_link_visit_action_foo.idaction_url = log_action_foo.idaction + LEFT JOIN $logLinkVisitActionTable AS log_link_visit_action_bar ON log_link_visit_action.idvisit = log_link_visit_action_bar.idvisit + LEFT JOIN $logActionTable AS log_action_bar ON log_link_visit_action_bar.idaction_url = log_action_bar.idaction + LEFT JOIN $logLinkVisitActionTable AS log_link_visit_action_baz ON log_link_visit_action.idvisit = log_link_visit_action_baz.idvisit + LEFT JOIN $logActionTable AS log_action_baz ON log_link_visit_action_baz.idaction_url = log_action_baz.idaction + WHERE ( log_link_visit_action.server_time >= ? + AND log_link_visit_action.server_time <= ? + AND log_link_visit_action.idsite = ? ) + AND ( log_action.type = ? )", "bind" => array('2015-11-30 11:00:00', '2015-12-01 10:59:59', $idSite, $actionType)); $this->assertEquals($this->removeExtraWhiteSpaces($expected), $this->removeExtraWhiteSpaces($query)); @@ -618,8 +619,7 @@ class SegmentTest extends IntegrationTestCase "sql" => " SELECT log_inner.* - FROM - ( + FROM ( SELECT log_visit.* FROM @@ -627,15 +627,15 @@ class SegmentTest extends IntegrationTestCase LEFT JOIN " . Common::prefixTable('log_link_visit_action') . " AS log_link_visit_action ON log_link_visit_action.idvisit = log_visit.idvisit LEFT JOIN " . Common::prefixTable('log_conversion') . " AS log_conversion ON log_conversion.idvisit = log_visit.idvisit WHERE - log_conversion.idgoal = ? AND HOUR(log_visit.visit_last_action_time) = ? AND log_link_visit_action.custom_var_k1 = ? - AND ( - log_link_visit_action.idaction_url IS NOT NULL - AND log_link_visit_action.idaction_url <> '' - AND log_link_visit_action.idaction_url <> '0' - ) + log_conversion.idgoal = ? AND HOUR(log_visit.visit_last_action_time) = ? AND log_link_visit_action.custom_var_k1 = ? + AND ( + log_link_visit_action.idaction_url IS NOT NULL + AND log_link_visit_action.idaction_url <> '' + AND log_link_visit_action.idaction_url <> '0' + ) GROUP BY log_visit.idvisit ORDER BY NULL - ) AS log_inner", + ) AS log_inner", "bind" => array(1, 12, 'Test')); $this->assertEquals($this->removeExtraWhiteSpaces($expected), $this->removeExtraWhiteSpaces($query)); @@ -716,14 +716,15 @@ class SegmentTest extends IntegrationTestCase actionAlias.name as url, sum(log_link_visit_action.time_spent) as `13`, sum(case visitAlias.visit_total_actions when 1 then 1 when 0 then 1 else 0 end) as `6` - FROM $logLinkVisitActionTable AS log_link_visit_action - LEFT JOIN $logActionTable AS log_action ON log_link_visit_action.idaction_url = log_action.idaction - LEFT JOIN $logVisitTable AS visitAlias ON visitAlias.idvisit = log_link_visit_action.idvisit + FROM $logLinkVisitActionTable AS log_link_visit_action + LEFT JOIN $logVisitTable AS visitAlias ON visitAlias.idvisit = log_link_visit_action.idvisit LEFT JOIN $logActionTable AS actionAlias ON log_link_visit_action.idaction_url = actionAlias.idaction + LEFT JOIN $logActionTable AS log_action ON log_link_visit_action.idaction_url = log_action.idaction WHERE ( log_link_visit_action.server_time >= ? AND log_link_visit_action.server_time <= ? AND log_link_visit_action.idsite = ? ) AND ( log_action.type = ? )", + "bind" => array('2015-11-30 11:00:00', '2015-12-01 10:59:59', $idSite, $actionType)); $this->assertEquals($this->removeExtraWhiteSpaces($expected), $this->removeExtraWhiteSpaces($query)); @@ -964,16 +965,16 @@ class SegmentTest extends IntegrationTestCase $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 $logVisitTable AS log_visit - LEFT JOIN $logLinkVisitActionTable AS log_link_visit_action ON log_link_visit_action.idvisit = log_visit.idvisit - LEFT JOIN $logActionTable AS log_action_visit_entry_idaction_name ON log_visit.visit_entry_idaction_name = log_action_visit_entry_idaction_name.idaction + 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 $logVisitTable AS log_visit + LEFT JOIN $logActionTable AS log_action_visit_entry_idaction_name ON log_visit.visit_entry_idaction_name = log_action_visit_entry_idaction_name.idaction + LEFT JOIN $logLinkVisitActionTable AS log_link_visit_action ON log_link_visit_action.idvisit = log_visit.idvisit LEFT JOIN $logActionTable 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_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)); @@ -1501,7 +1502,7 @@ log_visit.visit_total_actions AND ( ( log_link_visit_action.idaction_url IN (SELECT idaction FROM log_action WHERE ( name LIKE CONCAT('%', ?, '%') AND type = 1 )) ) ) GROUP BY CONCAT(log_conversion.idvisit, '_' , log_conversion.idgoal, '_', log_conversion.buster) ORDER BY NULL ) - AS log_inner GROUP BY log_inner.idgoal", + AS log_inner GROUP BY log_inner.idgoal", "bind" => $expectedBind); $this->assertEquals($this->removeExtraWhiteSpaces($expected), $this->removeExtraWhiteSpaces($query)); @@ -1591,19 +1592,17 @@ log_visit.visit_total_actions SELECT log_inner.idgoal AS `idgoal`, count(*) AS `1`, count(distinct log_inner.idvisit) AS `3`, ROUND(SUM(log_inner.revenue),2) AS `2` FROM ( SELECT log_conversion.idgoal, log_conversion.idvisit, log_conversion.revenue - FROM $logConversionTable AS log_conversion + FROM log_conversion AS log_conversion LEFT JOIN $logLinkVisitActionTable AS log_link_visit_action ON log_link_visit_action.idvisit = log_conversion.idvisit LEFT JOIN $logVisitTable AS log_visit ON log_visit.idvisit = log_conversion.idvisit WHERE ( log_conversion.server_time >= ? AND log_conversion.server_time <= ? AND log_conversion.idsite IN (?) ) - AND ( (log_visit.visitor_returning = ? - OR log_visit.visitor_returning = ?) + AND ( (log_visit.visitor_returning = ? OR log_visit.visitor_returning = ?) AND ( log_link_visit_action.idaction_url IN (SELECT idaction FROM log_action WHERE ( name LIKE CONCAT('%', ?, '%') AND type = 1 )) ) ) GROUP BY CONCAT(log_conversion.idvisit, '_' , log_conversion.idgoal, '_', log_conversion.buster) - ORDER BY NULL ) - AS log_inner - GROUP BY log_inner.idgoal", + ORDER BY NULL ) AS log_inner + GROUP BY log_inner.idgoal", "bind" => $expectedBind); $this->assertEquals($this->removeExtraWhiteSpaces($expected), $this->removeExtraWhiteSpaces($query)); diff --git a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php index 4e211147a3..1012e58ec3 100644 --- a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php +++ b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php @@ -97,8 +97,8 @@ class JoinGeneratorTest extends \PHPUnit_Framework_TestCase )); $expected = 'log_link_visit_action AS log_link_visit_action '; - $expected .= 'LEFT JOIN log_action AS log_action ON (log_link_visit_action.idaction_name = log_action.idaction AND log_link_visit_action.idaction_url = log_action.idaction) '; - $expected .= 'LEFT JOIN log_visit AS log_visit ON log_visit.idvisit = log_link_visit_action.idvisit'; + $expected .= 'LEFT JOIN log_visit AS log_visit ON log_visit.idvisit = log_link_visit_action.idvisit '; + $expected .= 'LEFT JOIN log_action AS log_action ON (log_link_visit_action.idaction_name = log_action.idaction AND log_link_visit_action.idaction_url = log_action.idaction)'; $this->assertEquals($expected, $generator->getJoinString()); } @@ -125,8 +125,8 @@ class JoinGeneratorTest extends \PHPUnit_Framework_TestCase )); $expected = 'log_visit AS log_visit '; - $expected .= 'LEFT JOIN log_link_visit_action AS log_link_visit_action ON log_link_visit_action.idvisit = log_visit.idvisit '; - $expected .= 'LEFT JOIN log_conversion AS log_conversion ON log_visit.idvisit2 = log_conversion.idvisit2'; + $expected .= 'LEFT JOIN log_conversion AS log_conversion ON log_visit.idvisit2 = log_conversion.idvisit2 '; + $expected .= 'LEFT JOIN log_link_visit_action AS log_link_visit_action ON log_link_visit_action.idvisit = log_visit.idvisit'; $this->assertEquals($expected, $generator->getJoinString()); } @@ -163,8 +163,8 @@ class JoinGeneratorTest extends \PHPUnit_Framework_TestCase )); $expected = 'log_link_visit_action AS log_link_visit_action '; - $expected .= 'LEFT JOIN log_action AS log_action ON (log_link_visit_action.idaction_name = log_action.idaction AND log_link_visit_action.idaction_url = log_action.idaction) '; - $expected .= 'LEFT JOIN log_visit AS log_visit ON log_visit.idvisit = log_link_visit_action.idvisit'; + $expected .= 'LEFT JOIN log_visit AS log_visit ON log_visit.idvisit = log_link_visit_action.idvisit '; + $expected .= 'LEFT JOIN log_action AS log_action ON (log_link_visit_action.idaction_name = log_action.idaction AND log_link_visit_action.idaction_url = log_action.idaction)'; $this->assertEquals($expected, $generator->getJoinString()); } @@ -210,9 +210,9 @@ class JoinGeneratorTest extends \PHPUnit_Framework_TestCase )); $expected = 'log_link_visit_action AS log_link_visit_action '; - $expected .= 'LEFT JOIN log_action AS log_action ON log_link_visit_action.idaction_url = log_action.idaction '; $expected .= 'RIGHT JOIN log_visit AS log_visit ON log_visit.idvisit = log_link_visit_action.idvisit '; - $expected .= 'RIGHT JOIN log_action AS log_action_r ON log_link_visit_action.idaction_test = log_action_r.idaction'; + $expected .= 'RIGHT JOIN log_action AS log_action_r ON log_link_visit_action.idaction_test = log_action_r.idaction '; + $expected .= 'LEFT JOIN log_action AS log_action ON log_link_visit_action.idaction_url = log_action.idaction'; $this->assertEquals($expected, $generator->getJoinString()); } @@ -234,228 +234,6 @@ class JoinGeneratorTest extends \PHPUnit_Framework_TestCase $this->assertEquals($expected, $generator->getJoinString()); } - public function test_sortTablesForJoin_shouldSortTablesAsSpecified() - { - $tables = array( - 'log_action', - array('table' => 'log_conversion', 'joinOn' => 'log_conversion.idvisit = log_visit.idvisit'), - 'log_conversion_item', - 'log_link_visit_action', - 'log_conversion', - 'log_visit', - ); - - $generator = $this->makeGenerator($tables); - $tables[] = 'log_foo_bar'; - usort($tables, array($generator, 'sortTablesForJoin')); - - $expected = array( - 'log_link_visit_action', - 'log_action', - 'log_visit', - 'log_conversion', - 'log_conversion_item', - 'log_foo_bar', - array('table' => 'log_conversion', 'joinOn' => 'log_conversion.idvisit = log_visit.idvisit'), - ); - - $this->assertEquals($expected, $tables); - } - - public function test_sortTablesForJoin_anotherTestMakingSureWorksOhPhp5_5() - { - $tables = array ( - 1 => 'log_link_visit_action', - 2 => - array ( - 'table' => 'log_action', - 'tableAlias' => 'log_action_idaction_name', - 'joinOn' => 'log_link_visit_action.idaction_name = log_action_idaction_name.idaction', - ), - 3 => - array ( - 'table' => 'log_action', - 'tableAlias' => 'log_action_visit_exit_idaction_name', - 'joinOn' => 'log_visit.visit_exit_idaction_name = log_action_visit_exit_idaction_name.idaction', - ), - ) - ; - - $generator = $this->makeGenerator($tables); - usort($tables, array($generator, 'sortTablesForJoin')); - - $expected = array( - 'log_link_visit_action', - array ( - 'table' => 'log_action', - 'tableAlias' => 'log_action_visit_exit_idaction_name', - 'joinOn' => 'log_visit.visit_exit_idaction_name = log_action_visit_exit_idaction_name.idaction', - ), - array ( - 'table' => 'log_action', - 'tableAlias' => 'log_action_idaction_name', - 'joinOn' => 'log_link_visit_action.idaction_name = log_action_idaction_name.idaction', - ), - ); - - $this->assertEquals($expected, $tables); - } - - public function test_sortTablesForJoin_anotherTest2MakingSureWorksOhPhp5_5() - { - $tables = array ( - 1 => 'log_link_visit_action', - 3 => - array ( - 'table' => 'log_action', - 'tableAlias' => 'log_action_visit_exit_idaction_name', - 'joinOn' => 'log_visit.visit_exit_idaction_name = log_action_visit_exit_idaction_name.idaction', - ), - 2 => - array ( - 'table' => 'log_action', - 'tableAlias' => 'log_action_idaction_name', - 'joinOn' => 'log_link_visit_action.idaction_name = log_action_idaction_name.idaction', - ), - ) - ; - - $generator = $this->makeGenerator($tables); - usort($tables, array($generator, 'sortTablesForJoin')); - - $expected = array( - 'log_link_visit_action', - array ( - 'table' => 'log_action', - 'tableAlias' => 'log_action_idaction_name', - 'joinOn' => 'log_link_visit_action.idaction_name = log_action_idaction_name.idaction', - ), - array ( - 'table' => 'log_action', - 'tableAlias' => 'log_action_visit_exit_idaction_name', - 'joinOn' => 'log_visit.visit_exit_idaction_name = log_action_visit_exit_idaction_name.idaction', - ), - ); - - $this->assertEquals($expected, $tables); - } - - public function test_sortTablesForJoin_shouldSortTablesWithCustomJoinRequiringEachOther1() - { - $tables = array( - 'log_link_visit_action', - 'log_action', - array( - 'table' => 'log_link_visit_action', - 'tableAlias' => 'log_link_visit_action_foo', - 'joinOn' => "log_link_visit_action.idvisit = log_link_visit_action_foo.idvisit" - ), - array( - 'table' => 'log_action', - 'tableAlias' => 'log_action_foo', - 'joinOn' => "log_link_visit_action_foo.idaction_url = log_action_foo.idaction" - ) - ); - - $generator = $this->makeGenerator($tables); - usort($tables, array($generator, 'sortTablesForJoin')); - - $expected = array( - 'log_link_visit_action', - 'log_action', - array ( - 'table' => 'log_link_visit_action', - 'tableAlias' => 'log_link_visit_action_foo', - 'joinOn' => 'log_link_visit_action.idvisit = log_link_visit_action_foo.idvisit', - ), - array ( - 'table' => 'log_action', - 'tableAlias' => 'log_action_foo', - 'joinOn' => 'log_link_visit_action_foo.idaction_url = log_action_foo.idaction', - ), - ); - - $this->assertEquals($expected, $tables); - - // should still be the same if inverted - $tables = array( - 'log_link_visit_action', - 'log_action', - array( - 'table' => 'log_action', - 'tableAlias' => 'log_action_foo', - 'joinOn' => "log_link_visit_action_foo.idaction_url = log_action_foo.idaction" - ), - array( - 'table' => 'log_link_visit_action', - 'tableAlias' => 'log_link_visit_action_foo', - 'joinOn' => "log_link_visit_action.idvisit = log_link_visit_action_foo.idvisit" - ), - ); - - $generator = $this->makeGenerator($tables); - usort($tables, array($generator, 'sortTablesForJoin')); - - $this->assertEquals($expected, $tables); - - // should still be the same if inverted - $tables = array( - 'log_link_visit_action', - array( - 'table' => 'log_action', - 'tableAlias' => 'log_action_foo', - 'joinOn' => "log_link_visit_action_foo.idaction_url = log_action_foo.idaction" - ), - 'log_action', - array( - 'table' => 'log_link_visit_action', - 'tableAlias' => 'log_link_visit_action_foo', - 'joinOn' => "log_link_visit_action.idvisit = log_link_visit_action_foo.idvisit" - ), - ); - - $generator = $this->makeGenerator($tables); - usort($tables, array($generator, 'sortTablesForJoin')); - - $this->assertEquals($expected, $tables); - } - - public function test_sortTablesForJoin_shouldSortTablesWithCustomJoinRequiringEachOther2() - { - $tables = array( - 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" - ) - ); - - $generator = $this->makeGenerator($tables); - usort($tables, array($generator, 'sortTablesForJoin')); - - $expected = array( - '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" - ), - 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" - ) - ); - - $this->assertEquals($expected, $tables); - } - private function generate($tables) { $generator = $this->makeGenerator($tables); diff --git a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinTablesTest.php b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinTablesTest.php index ec1f7b49eb..33f5c4cdd0 100644 --- a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinTablesTest.php +++ b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinTablesTest.php @@ -141,23 +141,232 @@ class JoinTablesTest extends \PHPUnit_Framework_TestCase public function test_sort_shouldNeverSortFirstEntry_AndNotMaintainKeys() { - $tables = $this->makeTables(array('log_conversion', 'log_visit', 'log_action', 'log_conversion_item')); - $tables->sort(function($a, $b) { - return strcmp($a, $b); - }); + $tables = $this->makeTables(array('log_action', 'log_conversion', 'log_visit', 'log_conversion_item')); + $tables->sort(); - $expected = array('log_conversion', 'log_action', 'log_conversion_item', 'log_visit'); + $expected = array('log_action', 'log_visit', 'log_conversion', 'log_conversion_item'); $this->assertEquals($expected, $tables->getTables()); } - public function test_sort_ifAllReturn0_ThenSortByGivenOrder() + public function test_sortTablesForJoin_shouldSortTablesAsSpecified() { - $tables = $this->makeTables(array('log_conversion', 'log_visit', 'log_action', 'log_conversion_item')); - $tables->sort(function($a, $b) { - return 0; - }); + $tables = array( + 'log_link_visit_action', + 'log_action', + array('table' => 'log_conversion', 'joinOn' => 'log_conversion.idvisit = log_visit.idvisit'), + 'log_conversion_item', + 'log_conversion', + 'log_visit', + array('table' => 'log_foo_bar'), + ); + + $tables = $this->makeTables($tables); + $tables->sort(); + + $expected = array( + 'log_link_visit_action', + 'log_visit', + array('table' => 'log_conversion', 'joinOn' => 'log_conversion.idvisit = log_visit.idvisit'), + 'log_conversion_item', + 'log_action', + 'log_conversion', + array('table' => 'log_foo_bar'), + ); + + $this->assertEquals($expected, $tables->getTables()); + } + + public function test_sortTablesForJoin_anotherTestMakingSureWorksOhPhp5_5() + { + $tables = array ( + 1 => 'log_link_visit_action', + 2 => + array ( + 'table' => 'log_action', + 'tableAlias' => 'log_action_idaction_name', + 'joinOn' => 'log_link_visit_action.idaction_name = log_action_idaction_name.idaction', + ), + 3 => + array ( + 'table' => 'log_action', + 'tableAlias' => 'log_action_visit_exit_idaction_name', + 'joinOn' => 'log_visit.visit_exit_idaction_name = log_action_visit_exit_idaction_name.idaction', + ), + ) + ; + + $tables = $this->makeTables($tables); + $tables->sort(); + + $expected = array( + 'log_link_visit_action', + array ( + 'table' => 'log_action', + 'tableAlias' => 'log_action_idaction_name', + 'joinOn' => 'log_link_visit_action.idaction_name = log_action_idaction_name.idaction', + ), + array ( + 'table' => 'log_action', + 'tableAlias' => 'log_action_visit_exit_idaction_name', + 'joinOn' => 'log_visit.visit_exit_idaction_name = log_action_visit_exit_idaction_name.idaction', + ), + ); + + $this->assertEquals($expected, $tables->getTables()); + } + + public function test_sortTablesForJoin_anotherTest2MakingSureWorksOhPhp5_5() + { + $tables = array ( + 1 => 'log_link_visit_action', + 3 => + array ( + 'table' => 'log_action', + 'tableAlias' => 'log_action_visit_exit_idaction_name', + 'joinOn' => 'log_visit.visit_exit_idaction_name = log_action_visit_exit_idaction_name.idaction', + ), + 2 => + array ( + 'table' => 'log_action', + 'tableAlias' => 'log_action_idaction_name', + 'joinOn' => 'log_link_visit_action.idaction_name = log_action_idaction_name.idaction', + ), + ) + ; + + $tables = $this->makeTables($tables); + $tables->sort(); + + $expected = array( + 'log_link_visit_action', + array ( + 'table' => 'log_action', + 'tableAlias' => 'log_action_visit_exit_idaction_name', + 'joinOn' => 'log_visit.visit_exit_idaction_name = log_action_visit_exit_idaction_name.idaction', + ), + array ( + 'table' => 'log_action', + 'tableAlias' => 'log_action_idaction_name', + 'joinOn' => 'log_link_visit_action.idaction_name = log_action_idaction_name.idaction', + ), + ); + + $this->assertEquals($expected, $tables->getTables()); + } + + public function test_sortTablesForJoin_shouldSortTablesWithCustomJoinRequiringEachOther1() + { + $tables = array( + 'log_link_visit_action', + 'log_action', + array( + 'table' => 'log_link_visit_action', + 'tableAlias' => 'log_link_visit_action_foo', + 'joinOn' => "log_link_visit_action.idvisit = log_link_visit_action_foo.idvisit" + ), + array( + 'table' => 'log_action', + 'tableAlias' => 'log_action_foo', + 'joinOn' => "log_link_visit_action_foo.idaction_url = log_action_foo.idaction" + ) + ); + + $tables = $this->makeTables($tables); + $tables->sort(); + + $expected = array( + 'log_link_visit_action', + 'log_action', + array ( + 'table' => 'log_link_visit_action', + 'tableAlias' => 'log_link_visit_action_foo', + 'joinOn' => 'log_link_visit_action.idvisit = log_link_visit_action_foo.idvisit', + ), + array ( + 'table' => 'log_action', + 'tableAlias' => 'log_action_foo', + 'joinOn' => 'log_link_visit_action_foo.idaction_url = log_action_foo.idaction', + ), + ); + + $this->assertEquals($expected, $tables->getTables()); + + // should still be the same if inverted + $tables = array( + 'log_link_visit_action', + 'log_action', + array( + 'table' => 'log_action', + 'tableAlias' => 'log_action_foo', + 'joinOn' => "log_link_visit_action_foo.idaction_url = log_action_foo.idaction" + ), + array( + 'table' => 'log_link_visit_action', + 'tableAlias' => 'log_link_visit_action_foo', + 'joinOn' => "log_link_visit_action.idvisit = log_link_visit_action_foo.idvisit" + ), + ); + + $tables = $this->makeTables($tables); + $tables->sort(); + + $this->assertEquals($expected, $tables->getTables()); + + // should still be the same if inverted + $tables = array( + 'log_link_visit_action', + 'log_action', + array( + 'table' => 'log_link_visit_action', + 'tableAlias' => 'log_link_visit_action_foo', + 'joinOn' => "log_link_visit_action.idvisit = log_link_visit_action_foo.idvisit" + ), + array( + 'table' => 'log_action', + 'tableAlias' => 'log_action_foo', + 'joinOn' => "log_link_visit_action_foo.idaction_url = log_action_foo.idaction" + ), + ); + + $tables = $this->makeTables($tables); + $tables->sort(); + + $this->assertEquals($expected, $tables->getTables()); + } + + public function test_sortTablesForJoin_shouldSortTablesWithCustomJoinRequiringEachOther2() + { + $tables = array( + '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" + ), + 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" + ), + ); + + $tables = $this->makeTables($tables); + $tables->sort(); + + $expected = array( + '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" + ), + 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" + ) + ); - $expected = array('log_conversion', 'log_visit', 'log_action', 'log_conversion_item'); $this->assertEquals($expected, $tables->getTables()); } diff --git a/tests/UI/screenshot-diffs/missing-expected.list b/tests/UI/screenshot-diffs/missing-expected.list deleted file mode 100644 index e91347ca22..0000000000 --- a/tests/UI/screenshot-diffs/missing-expected.list +++ /dev/null @@ -1,381 +0,0 @@ -TagManagerTeaser_superuser_page.png -TagManagerTeaser_super_user_activate_plgin.png -TagManagerTeaser_admin_page.png -TagManagerTeaser_admin_page_disable.png -TagManagerTeaser_superuser_page.png -TagManagerTeaser_superuser_page.png -TagManagerTeaser_super_user_activate_plgin.png -TagManagerTeaser_admin_page.png -TagManagerTeaser_admin_page_disable.png -TagManagerTeaser_superuser_page.png -TagManagerTeaser_super_user_activate_plgin.png -TagManagerTeaser_admin_page.png -TagManagerTeaser_admin_page_disable.png -TagManagerTeaser_super_user_activate_plugin.png -TagManagerTeaser_super_user_activate_plugin.png -TagManagerTeaser_super_user_activate_plugin.png -TagManagerTeaser_admin_page.png -TagManagerTeaser_admin_page_disable.png -TagManagerTeaser_admin_page_disable.png -TagManagerTeaser_admin_page_disable.png -Login_bruteforcelog_withentries.png -Login_bruteforcelog_blockedapi.png -Login_bruteforcelog_noentries.png -Login_bruteforcelog_noentries.png -Login_bruteforcelog_blockedlogin.png -Login_bruteforcelog_noentries.png -Login_bruteforcelog_noentries.png -IntranetMeasurable_add_new_dialog.png -IntranetMeasurable_intranet_create.png -IntranetMeasurable_intranet_created.png -IntranetMeasurable_intranet_create.png -IntranetMeasurable_intranet_created.png -TrackingFailures_widget_with_failures.png -TrackingFailures_manage_no_failures.png -TrackingFailures_manage_with_failures.png -TrackingFailures_manage_with_failures_delete_one_ask_confirmation.png -TrackingFailures_manage_with_failures_delete_one_confirmed.png -TrackingFailures_manage_with_failures_delete_all_ask_confirmation.png -TrackingFailures_manage_with_failures_delete_one_confirmed.png -TrackingFailures_widget_no_failures.png -TrackingFailures_widget_with_failures.png -TrackingFailures_manage_no_failures.png -TrackingFailures_manage_with_failures.png -TrackingFailures_manage_with_failures_delete_one_ask_confirmation.png -TrackingFailures_manage_with_failures_delete_one_confirmed.png -TrackingFailures_manage_with_failures_delete_all_ask_confirmation.png -TrackingFailures_manage_with_failures_delete_one_confirmed.png -TrackingFailures_widget_no_failures.png -TrackingFailures_widget_with_failures.png -TrackingFailures_manage_no_failures.png -TrackingFailures_manage_with_failures.png -TrackingFailures_manage_with_failures_delete_one_ask_confirmation.png -TrackingFailures_manage_with_failures_delete_one_confirmed.png -TrackingFailures_manage_with_failures_delete_all_ask_confirmation.png -TrackingFailures_manage_with_failures_delete_one_confirmed.png -TrackingFailures_widget_with_failures.png -TrackingFailures_manage_no_failures.png -TrackingFailures_manage_with_failures.png -TrackingFailures_manage_with_failures_delete_one_ask_confirmation.png -TrackingFailures_manage_with_failures_delete_one_confirmed.png -TrackingFailures_manage_with_failures_delete_all_ask_confirmation.png -TrackingFailures_manage_with_failures_delete_one_confirmed.png -TrackingFailures_manage_no_failures.png -TrackingFailures_manage_with_failures.png -TrackingFailures_manage_with_failures_delete_one_ask_confirmation.png -TrackingFailures_manage_with_failures_delete_one_confirmed.png -TrackingFailures_manage_with_failures_delete_all_ask_confirmation.png -TrackingFailures_manage_with_failures_delete_all_confirmed.png -TrackingFailures_manage_with_failures_delete_one_ask_confirmation.png -TrackingFailures_manage_with_failures_delete_one_confirmed.png -TrackingFailures_manage_with_failures_delete_all_ask_confirmation.png -TrackingFailures_manage_with_failures_delete_all_confirmed.png -CampaignBuilder_loaded.png -CampaignBuilder_loaded.png -CampaignBuilder_generate_url_nokeyword.png -CampaignBuilder_generate_url_reset.png -CampaignBuilder_generate_url_withkeyword.png -TwoFactorAuth_usersettings_twofa_enabled.png -TwoFactorAuth_show_recovery_codes.png -TwoFactorAuth_usersettings_twofa_enabled_required.png -TwoFactorAuth_usersettings_twofa_disabled.png -TwoFactorAuth_usersettings_twofa_disable_step1.png -TwoFactorAuth_usersettings_twofa_enabled.png -TwoFactorAuth_show_recovery_codes.png -TwoFactorAuth_usersettings_twofa_enabled_required.png -TwoFactorAuth_usersettings_twofa_disabled.png -TwoFactorAuth_usersettings_twofa_disable_step1.png -TwoFactorAuth_logme_not_verified.png -TwoFactorAuth_logme_verified.png -TwoFactorAuth_usersettings_twofa_enabled.png -TwoFactorAuth_show_recovery_codes.png -TwoFactorAuth_usersettings_twofa_enabled_required.png -TwoFactorAuth_usersettings_twofa_disable_step1.png -TwoFactorAuth_usersettings_twofa_disable_step2_confirm_password.png -TwoFactorAuth_usersettings_twofa_disabled.png -TwoFactorAuth_usersettings_twofa_setup.png -TwoFactorAuth_logme_not_verified.png -TwoFactorAuth_logme_not_verified_wrong_code.png -TwoFactorAuth_logme_verified.png -TwoFactorAuth_usersettings_twofa_enabled.png -TwoFactorAuth_show_recovery_codes.png -TwoFactorAuth_usersettings_twofa_enabled_required.png -TwoFactorAuth_usersettings_twofa_disable_step1.png -TwoFactorAuth_usersettings_twofa_disable_step2_confirm_password.png -TwoFactorAuth_usersettings_twofa_disabled.png -TwoFactorAuth_usersettings_twofa_setup.png -TwoFactorAuth_logme_not_verified.png -TwoFactorAuth_logme_not_verified_wrong_code.png -TwoFactorAuth_logme_verified.png -TwoFactorAuth_usersettings_twofa_enabled.png -TwoFactorAuth_show_recovery_codes.png -TwoFactorAuth_usersettings_twofa_enabled_required.png -TwoFactorAuth_usersettings_twofa_disable_step1.png -TwoFactorAuth_usersettings_twofa_disable_step2_confirm_password.png -TwoFactorAuth_usersettings_twofa_disabled.png -TwoFactorAuth_twofa_setup_step1.png -TwoFactorAuth_twofa_setup_step2.png -TwoFactorAuth_twofa_setup_step3.png -TwoFactorAuth_twofa_forced_step1.png -TwoFactorAuth_twofa_forced_step2.png -TwoFactorAuth_twofa_forced_step3.png -TwoFactorAuth_logme_not_verified.png -TwoFactorAuth_logme_not_verified_wrong_code.png -TwoFactorAuth_logme_verified.png -TwoFactorAuth_logme_not_verified.png -TwoFactorAuth_logme_not_verified_wrong_code.png -TwoFactorAuth_logme_verified.png -TwoFactorAuth_usersettings_twofa_enabled.png -TwoFactorAuth_show_recovery_codes.png -TwoFactorAuth_usersettings_twofa_enabled_required.png -TwoFactorAuth_usersettings_twofa_disable_step1.png -TwoFactorAuth_usersettings_twofa_disable_step2_confirm_password.png -TwoFactorAuth_usersettings_twofa_disabled.png -TwoFactorAuth_twofa_setup_step1.png -TwoFactorAuth_twofa_setup_step2.png -TwoFactorAuth_twofa_setup_step3.png -TwoFactorAuth_twofa_setup_step3.png -TwoFactorAuth_twofa_forced_step1.png -TwoFactorAuth_twofa_forced_step2.png -TwoFactorAuth_twofa_forced_step3.png -TwoFactorAuth_twofa_forced_step3.png -TwoFactorAuth_usersettings_twofa_enabled.png -TwoFactorAuth_show_recovery_codes_step1.png -TwoFactorAuth_usersettings_twofa_disable_step1.png -TwoFactorAuth_usersettings_twofa_disable_step2.png -TwoFactorAuth_usersettings_twofa_disable_step4.png -TwoFactorAuth_twofa_setup_step1.png -TwoFactorAuth_twofa_setup_step2.png -TwoFactorAuth_twofa_setup_step3.png -TwoFactorAuth_twofa_setup_step4.png -TwoFactorAuth_twofa_forced_step4.png -TwoFactorAuth_show_recovery_codes_step1.png -TwoFactorAuth_show_recovery_codes_step2.png -TwoFactorAuth_show_recovery_codes_step1.png -TwoFactorAuth_show_recovery_codes_step2.png -TwoFactorAuth_usersettings_twofa_disable_step2.png -TwoFactorAuth_usersettings_twofa_disable_step3.png -TwoFactorAuth_usersettings_twofa_disable_step4.png -TwoFactorAuth_twofa_setup_step1.png -TwoFactorAuth_twofa_setup_step2.png -TwoFactorAuth_twofa_setup_step3.png -TwoFactorAuth_twofa_setup_step4.png -TwoFactorAuth_twofa_forced_step4.png -TwoFactorAuth_show_recovery_codes_step1.png -TwoFactorAuth_show_recovery_codes_step2.png -TwoFactorAuth_usersettings_twofa_disable_step2.png -TwoFactorAuth_usersettings_twofa_disable_step3.png -TwoFactorAuth_usersettings_twofa_disable_step4.png -TwoFactorAuth_twofa_setup_step1.png -TwoFactorAuth_twofa_setup_step2.png -TwoFactorAuth_twofa_setup_step3.png -TwoFactorAuth_twofa_setup_step4.png -TwoFactorAuth_twofa_forced_step4.png -TwoFactorAuth_show_recovery_codes_step1.png -TwoFactorAuth_show_recovery_codes_step2.png -TwoFactorAuth_usersettings_twofa_disable_step2.png -TwoFactorAuth_usersettings_twofa_disable_step3.png -TwoFactorAuth_usersettings_twofa_disable_step4.png -TwoFactorAuth_usersettings_twofa_disable_step2.png -TwoFactorAuth_usersettings_twofa_disable_step3.png -TwoFactorAuth_usersettings_twofa_disable_step4.png -TwoFactorAuth_usersettings_twofa_disable_step2.png -TwoFactorAuth_usersettings_twofa_disable_step3.png -TwoFactorAuth_usersettings_twofa_disable_step4.png -TwoFactorAuth_twofa_setup_step1.png -TwoFactorAuth_twofa_setup_step2.png -TwoFactorAuth_twofa_setup_step3.png -TwoFactorAuth_twofa_setup_step4.png -TwoFactorAuth_twofa_forced_step4.png -TwoFactorAuth_usersettings_twofa_disable_step3.png -TwoFactorAuth_usersettings_twofa_disable_step4.png -TwoFactorAuth_usersettings_twofa_disable_step3.png -TwoFactorAuth_usersettings_twofa_disable_step4.png -TwoFactorAuth_twofa_setup_step4.png -TwoFactorAuth_twofa_forced_step4.png -TwoFactorAuthUsersManager_list.png -TwoFactorAuthUsersManager_edit_with_2fa.png -TwoFactorAuthUsersManager_edit_with_2fa_tab.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png -TwoFactorAuthUsersManager_edit_with_2fa.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png -TwoFactorAuthUsersManager_edit_with_2fa.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png -TwoFactorAuthUsersManager_edit_with_2fa.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png -TwoFactorAuthUsersManager_edit_with_2fa.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png -TwoFactorAuthUsersManager_edit_with_2fa.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png -TwoFactorAuthUsersManager_edit_with_2fa.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirm.png -TwoFactorAuthUsersManager_edit_with_2fa_reset_confirmed.png -TwoFactorAuth_twofa_setup_step4.png -TwoFactorAuth_twofa_forced_step4.png -TwoFactorAuth_widgetized_no_verify.png -TwoFactorAuth_widgetized_no_verify.png -TwoFactorAuth_widgetized_no_verify.png -TwoFactorAuth_widgetized_no_verify.png -TwoFactorAuth_twofa_setup_step4.png -TwoFactorAuth_twofa_forced_step4.png -CustomTranslationReporting_simplePage.png -CustomTranslationManage_loaded.png -CustomTranslationManage_values_entered.png -CustomTranslationManage_values_saved.png -CustomTranslationManage_values_saved_verify.png -CustomTranslationManage_loaded.png -CustomTranslationManage_values_entered.png -CustomTranslationManage_values_saved.png -CustomTranslationManage_values_saved_verify.png -CustomTranslationManage_loaded.png -CustomTranslationManage_values_entered.png -CustomTranslationManage_values_saved.png -CustomTranslationManage_values_saved_verify.png -CustomTranslationReporting_menu_loaded_dashboards.png -CustomTranslationReporting_menu_loaded_visitors.png -CustomTranslationReporting_menu_loaded_behaviour.png -CustomTranslationReporting_menu_loaded_customreports.png -CustomTranslationReporting_dashboard_rename.png -CustomTranslationReporting_report_eventActionName.png -CustomTranslationReporting_report_eventCategoryAction.png -CustomTranslationReporting_report_visitDimension1.png -CustomTranslationReporting_report_actionDimension3.png -CustomTranslationReporting_report_customReports1.png -CustomTranslationReporting_simplePagePartial.png -CustomTranslationReporting_menu_loaded_customreports.png -CustomTranslationReporting_dashboard_rename.png -CustomTranslationReporting_report_eventActionName.png -CustomTranslationReporting_report_eventActionName_row_evolution.png -CustomTranslationReporting_report_eventActionName_segmented_visitor_log.png -CustomTranslationReporting_report_eventActionName_search.png -CustomTranslationReporting_report_eventActionName_bar.png -CustomTranslationReporting_report_eventActionName_pie.png -CustomTranslationReporting_report_eventActionName_pivoted.png -CustomTranslationReporting_report_eventCategoryAction.png -CustomTranslationReporting_report_visitDimension1.png -CustomTranslationReporting_report_visitDimension1_row_evolution.png -CustomTranslationReporting_report_visitDimension1_segmented_visitor_log.png -CustomTranslationReporting_report_visitDimension1_search.png -CustomTranslationReporting_report_visitDimension1_bar.png -CustomTranslationReporting_report_visitDimension1_pie.png -CustomTranslationReporting_report_visitDimension2.png -CustomTranslationReporting_report_actionDimension3.png -CustomTranslationReporting_report_actionDimension3_row_evolution.png -CustomTranslationReporting_report_actionDimension3_segmented_visitor_log.png -CustomTranslationReporting_report_actionDimension3_search.png -CustomTranslationReporting_report_actionDimension3_bar.png -CustomTranslationReporting_report_actionDimension3_pie.png -CustomTranslationReporting_report_actionDimension4.png -CustomTranslationReporting_report_customReports1.png -CustomTranslationReporting_report_customReports1_row_evolution.png -CustomTranslationReporting_report_customReports1_segmented_visitor_log.png -CustomTranslationReporting_report_customReports1_search.png -CustomTranslationReporting_report_customReports1_bar.png -CustomTranslationReporting_report_customReports1_pie.png -CustomTranslationReporting_report_customReports2.png -CustomTranslationReporting_menu_loaded_customreports.png -CustomTranslationReporting_report_eventActionName.png -CustomTranslationReporting_report_eventActionName_row_evolution.png -CustomTranslationReporting_report_eventActionName_segmented_visitor_log.png -CustomTranslationReporting_report_eventActionName_search.png -CustomTranslationReporting_report_eventActionName_bar.png -CustomTranslationReporting_report_eventCategoryAction.png -CustomTranslationReporting_report_visitDimension1.png -CustomTranslationReporting_report_visitDimension1_row_evolution.png -CustomTranslationReporting_report_visitDimension1_segmented_visitor_log.png -CustomTranslationReporting_report_visitDimension1_search.png -CustomTranslationReporting_report_visitDimension1_bar.png -CustomTranslationReporting_report_visitDimension1_pie.png -CustomTranslationReporting_report_visitDimension2.png -CustomTranslationReporting_report_actionDimension3_row_evolution.png -CustomTranslationReporting_report_actionDimension3_segmented_visitor_log.png -CustomTranslationReporting_report_actionDimension3_search.png -CustomTranslationReporting_report_actionDimension4.png -CustomTranslationReporting_report_customReports1.png -CustomTranslationReporting_report_customReports1_row_evolution.png -CustomTranslationReporting_report_customReports1_segmented_visitor_log.png -CustomTranslationReporting_report_customReports1_search.png -CustomTranslationReporting_report_customReports1_bar.png -CustomTranslationReporting_report_customReports1_pie.png -CustomTranslationReporting_report_customReports2.png -CustomTranslationReporting_report_customReports3.png -CustomTranslationReporting_report_customReports4.png -CustomTranslationReporting_menu_loaded_customreports.png -CustomTranslationReporting_report_eventActionName.png -CustomTranslationReporting_report_eventActionName_row_evolution.png -CustomTranslationReporting_report_eventActionName_segmented_visitor_log.png -CustomTranslationReporting_report_eventActionName_search.png -CustomTranslationReporting_report_eventActionName_bar.png -CustomTranslationReporting_report_eventCategoryAction.png -CustomTranslationReporting_report_visitDimension1.png -CustomTranslationReporting_report_visitDimension1_row_evolution.png -CustomTranslationReporting_report_visitDimension1_segmented_visitor_log.png -CustomTranslationReporting_report_visitDimension1_search.png -CustomTranslationReporting_report_visitDimension1_bar.png -CustomTranslationReporting_menu_loaded_customreports.png -CustomTranslationReporting_report_eventActionName.png -CustomTranslationReporting_report_eventActionName_row_evolution.png -CustomTranslationReporting_report_eventActionName_segmented_visitor_log.png -CustomTranslationReporting_report_eventActionName_search.png -CustomTranslationReporting_report_eventActionName_bar.png -CustomTranslationReporting_report_eventCategoryAction.png -CustomTranslationReporting_report_visitDimension1.png -CustomTranslationReporting_report_visitDimension1_row_evolution.png -CustomTranslationReporting_report_visitDimension1_segmented_visitor_log.png -CustomTranslationReporting_report_visitDimension1_search.png -CustomTranslationReporting_report_visitDimension1_bar.png -CustomTranslationReporting_report_visitDimension1_pie.png -CustomTranslationReporting_report_visitDimension2.png -CustomTranslationReporting_report_actionDimension3_row_evolution.png -CustomTranslationReporting_report_actionDimension3_segmented_visitor_log.png -CustomTranslationReporting_report_actionDimension4.png -CustomTranslationReporting_report_customReports1.png -CustomTranslationReporting_report_customReports2.png -CustomTranslationReporting_report_customReports3.png -CustomTranslationReporting_report_customReports3_row_evolution.png -CustomTranslationReporting_report_customReports3_segmented_visitor_log.png -CustomTranslationReporting_report_customReports3_search.png -CustomTranslationReporting_report_customReports3_bar.png -CustomTranslationReporting_report_customReports3_pie.png -CustomTranslationReporting_report_customReports3_flat.png -CustomTranslationReporting_report_customReports4.png -CustomTranslationReporting_menu_loaded_customreports.png -CustomTranslationReporting_report_eventActionName_row_evolution.png -CustomTranslationReporting_report_eventActionName_segmented_visitor_log.png -CustomTranslationReporting_report_eventActionName_search.png -CustomTranslationReporting_report_eventActionName_bar.png -CustomTranslationReporting_menu_loaded_dashboards.png -CustomTranslationReporting_report_eventActionName_row_evolution.png -CustomTranslationReporting_report_eventActionName_segmented_visitor_log.png -CustomTranslationReporting_report_eventActionName_search.png -CustomTranslationReporting_report_eventCategoryAction.png -CustomTranslationReporting_report_visitDimension1_row_evolution.png -CustomTranslationReporting_report_visitDimension1_segmented_visitor_log.png -CustomTranslationReporting_report_visitDimension2.png -CustomTranslationReporting_report_actionDimension3_row_evolution.png -CustomTranslationReporting_report_actionDimension3_segmented_visitor_log.png -CustomTranslationReporting_report_actionDimension4.png -CustomTranslationReporting_report_customReports3_row_evolution.png -CustomTranslationReporting_report_customReports3_segmented_visitor_log.png -CustomTranslationReporting_report_customReports3_flat.png -CustomTranslationReporting_report_customReports5.png -CustomTranslationReporting_report_customReports6.png -CustomTranslationReporting_report_customReports7.png -CustomTranslationReporting_menu_loaded_dashboards.png -CustomTranslationReporting_menu_loaded_dashboards.png -CustomTranslationReporting_menu_loaded_dashboards.png -CustomTranslationReporting_manage_custom_reports_admin.png -CustomTranslationReporting_menu_loaded_dashboards.png -CustomTranslationReporting_manage_custom_reports_admin.png -CustomTranslationReporting_manage_custom_reports_admin.png -CustomTranslationReporting_manage_custom_dimensions_admin.png |