diff options
Diffstat (limited to 'tests/lib/DB/QueryBuilder/FunctionBuilderTest.php')
-rw-r--r-- | tests/lib/DB/QueryBuilder/FunctionBuilderTest.php | 60 |
1 files changed, 54 insertions, 6 deletions
diff --git a/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php b/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php index 7ff26f7e144..3f4b8bb7524 100644 --- a/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php +++ b/tests/lib/DB/QueryBuilder/FunctionBuilderTest.php @@ -41,17 +41,62 @@ class FunctionBuilderTest extends TestCase { $this->connection = \OC::$server->getDatabaseConnection(); } - public function testConcat() { + /** + * @dataProvider providerTestConcatString + */ + public function testConcatString($closure) { $query = $this->connection->getQueryBuilder(); + [$real, $arguments, $return] = $closure($query); + if ($real) { + $this->addDummyData(); + $query->where($query->expr()->eq('appid', $query->createNamedParameter('group_concat'))); + } - $query->select($query->func()->concat($query->createNamedParameter('foo'), new Literal("'bar'"))); + $query->select($query->func()->concat(...$arguments)); $query->from('appconfig') ->setMaxResults(1); $result = $query->execute(); $column = $result->fetchOne(); $result->closeCursor(); - $this->assertEquals('foobar', $column); + $this->assertEquals($return, $column); + } + + public function providerTestConcatString(): array { + return [ + '1 column: string param unicode' => + [function ($q) { + return [false, [$q->createNamedParameter('👍')], '👍']; + }], + '2 columns: string param and string param' => + [function ($q) { + return [false, [$q->createNamedParameter('foo'), $q->createNamedParameter('bar')], 'foobar']; + }], + '2 columns: string param and int literal' => + [function ($q) { + return [false, [$q->createNamedParameter('foo'), $q->expr()->literal(1)], 'foo1']; + }], + '2 columns: string param and string literal' => + [function ($q) { + return [false, [$q->createNamedParameter('foo'), $q->expr()->literal('bar')], 'foobar']; + }], + '2 columns: string real and int literal' => + [function ($q) { + return [true, ['configkey', $q->expr()->literal(2)], '12']; + }], + '4 columns: string literal' => + [function ($q) { + return [false, [$q->expr()->literal('foo'), $q->expr()->literal('bar'), $q->expr()->literal('foo'), $q->expr()->literal('bar')], 'foobarfoobar']; + }], + '4 columns: int literal' => + [function ($q) { + return [false, [$q->expr()->literal(1), $q->expr()->literal(2), $q->expr()->literal(3), $q->expr()->literal(4)], '1234']; + }], + '5 columns: string param with special chars used in the function' => + [function ($q) { + return [false, [$q->createNamedParameter("b"), $q->createNamedParameter("'"), $q->createNamedParameter('||'), $q->createNamedParameter(','), $q->createNamedParameter('a')], "b'||,a"]; + }], + ]; } protected function clearDummyData(): void { @@ -90,7 +135,6 @@ class FunctionBuilderTest extends TestCase { $result = $query->execute(); $column = $result->fetchOne(); $result->closeCursor(); - $this->assertEquals('1,2,3', $column); $this->assertStringContainsString(',', $column); $actual = explode(',', $column); $this->assertEqualsCanonicalizing([1,2,3], $actual); @@ -123,7 +167,9 @@ class FunctionBuilderTest extends TestCase { $result = $query->execute(); $column = $result->fetchOne(); $result->closeCursor(); - $this->assertEquals('1\'2\'3', $column); + $this->assertStringContainsString("'", $column); + $actual = explode("'", $column); + $this->assertEqualsCanonicalizing([1,2,3], $actual); } public function testGroupConcatWithDoubleQuoteSeparator(): void { @@ -137,7 +183,9 @@ class FunctionBuilderTest extends TestCase { $result = $query->execute(); $column = $result->fetchOne(); $result->closeCursor(); - $this->assertEquals('1"2"3', $column); + $this->assertStringContainsString('"', $column); + $actual = explode('"', $column); + $this->assertEqualsCanonicalizing([1,2,3], $actual); } protected function clearIntDummyData(): void { |