Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/matomo-org/matomo.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorThomas Steur <tsteur@users.noreply.github.com>2017-05-14 21:55:44 +0300
committerGitHub <noreply@github.com>2017-05-14 21:55:44 +0300
commita49768f28be5e560cb7873ff9e9b89e6d068cdc7 (patch)
treec02c0ea8022488d109f63611370a2c3fe61a9aed /tests
parentca35a8a0814c24263094e116b95df650b70d09bb (diff)
Fix a bug in the join generator when same table is present multiple times (#11690)
* fix a bug in the join generator * add another test case to make sure the outer table foreach still works when removing an item * throw exception if table cannot be joined automatically
Diffstat (limited to 'tests')
-rw-r--r--tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php
index 746f2e45ff..8e1ead3aec 100644
--- a/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php
+++ b/tests/PHPUnit/Unit/DataAccess/LogQueryBuilder/JoinGeneratorTest.php
@@ -102,6 +102,57 @@ class JoinGeneratorTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($expected, $generator->getJoinString());
}
+ public function test_generate_getJoinString_manuallyJoinedAlreadyWithCustomConditionInArray()
+ {
+ $generator = $this->generate(array(
+ 'log_visit',
+ array('table' => 'log_conversion', 'joinOn' => 'log_visit.idvisit2 = log_conversion.idvisit2'),
+ 'log_conversion'
+ ));
+
+ $expected = 'log_visit AS log_visit ';
+ $expected .= 'LEFT JOIN log_conversion AS log_conversion ON log_visit.idvisit2 = log_conversion.idvisit2';
+ $this->assertEquals($expected, $generator->getJoinString());
+ }
+
+ public function test_generate_getJoinString_manuallyJoinedAlreadyWithCustomConditionInArrayAndFurtherTablesAfterwards()
+ {
+ $generator = $this->generate(array(
+ 'log_visit',
+ array('table' => 'log_conversion', 'joinOn' => 'log_visit.idvisit2 = log_conversion.idvisit2'),
+ 'log_conversion',
+ 'log_link_visit_action'
+ ));
+
+ $expected = 'log_visit AS log_visit ';
+ $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());
+ }
+
+ /**
+ * @expectedException \Exception
+ * @expectedExceptionMessage Please reorganize the joined tables as the table log_conversion in {"0":"log_visit","1":"log_conversion","2":"log_link_visit_action","3":{"table":"log_conversion","joinOn":"log_link_visit_action.idvisit2 = log_conversion.idvisit2"}} cannot be joined correctly.
+ */
+ public function test_generate_getJoinString_manuallyJoinedAlreadyWithCustomConditionInArrayInverted()
+ {
+ $generator = $this->generate(array(
+ 'log_visit',
+ 'log_conversion',
+ 'log_link_visit_action',
+ array('table' => 'log_conversion', 'joinOn' => 'log_link_visit_action.idvisit2 = log_conversion.idvisit2'),
+ ));
+
+ $expected = 'log_visit AS log_visit ';
+ $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 ';
+ $expected .= 'LEFT JOIN log_conversion AS log_conversion ON log_conversion.idvisit = log_visit.idvisit ';
+
+ $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());
+ }
+
public function test_generate_getJoinString_manuallyJoinedAlreadyPlusCustomJoinButAlsoLeft()
{
$generator = $this->generate(array(