diff options
author | Thomas Steur <tsteur@users.noreply.github.com> | 2017-05-14 21:55:44 +0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-14 21:55:44 +0300 |
commit | a49768f28be5e560cb7873ff9e9b89e6d068cdc7 (patch) | |
tree | c02c0ea8022488d109f63611370a2c3fe61a9aed /tests | |
parent | ca35a8a0814c24263094e116b95df650b70d09bb (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.php | 51 |
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( |