diff options
author | Vitor Mattos <vitor@php.rio> | 2022-01-05 12:00:16 -0300 |
---|---|---|
committer | Joas Schilling <coding@schilljs.com> | 2022-01-07 09:54:41 +0100 |
commit | f732cf1b040f39bb2922004e80972314cf2a28e2 (patch) | |
tree | 0c000f3bc2a061809c4ab5ebfc3531fda7d9631d /tests | |
parent | 814924a7872a68ee265bce5e4946f72925417f00 (diff) | |
download | nextcloud-server-f732cf1b040f39bb2922004e80972314cf2a28e2.tar.gz nextcloud-server-f732cf1b040f39bb2922004e80972314cf2a28e2.zip |
Unit tests
Signed-off-by: Vitor Mattos <vitor@php.rio>
Diffstat (limited to 'tests')
-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 { |