Skip to content

Commit 4d59f32

Browse files
no message
1 parent 3f8bd08 commit 4d59f32

File tree

2 files changed

+43
-9
lines changed

2 files changed

+43
-9
lines changed

tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonBuildObjectTest.php

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ protected function getExpectedSqlStatements(): array
3030
'builds JSON object with field value' => "SELECT json_build_object('key1', c0_.object1) AS sclr_0 FROM ContainsJsons c0_",
3131
'builds JSON object with function result and literal' => "SELECT json_build_object('key1', UPPER('value1'), 'key2', 'value2') AS sclr_0 FROM ContainsJsons c0_",
3232
'builds JSON object with multiple field values' => "SELECT json_build_object('key1', c0_.object1, 'key2', c0_.object2) AS sclr_0 FROM ContainsJsons c0_",
33+
'builds JSON object with many key-value pairs' => "SELECT json_build_object('k1', 'v1', 'k2', 'v2', 'k3', 'v3', 'k4', 'v4') AS sclr_0 FROM ContainsJsons c0_",
34+
'builds JSON object with numeric and boolean values' => "SELECT json_build_object('numeric_key', '123', 'boolean_key', 'true') AS sclr_0 FROM ContainsJsons c0_",
35+
'builds JSON object with mixed field and literal values' => "SELECT json_build_object('field_key', c0_.object1, 'literal_key', 'literal_value') AS sclr_0 FROM ContainsJsons c0_",
3336
];
3437
}
3538

@@ -39,15 +42,29 @@ protected function getDqlStatements(): array
3942
'builds JSON object with field value' => \sprintf("SELECT JSON_BUILD_OBJECT('key1', e.object1) FROM %s e", ContainsJsons::class),
4043
'builds JSON object with function result and literal' => \sprintf("SELECT JSON_BUILD_OBJECT('key1', UPPER('value1'), 'key2', 'value2') FROM %s e", ContainsJsons::class),
4144
'builds JSON object with multiple field values' => \sprintf("SELECT JSON_BUILD_OBJECT('key1', e.object1, 'key2', e.object2) FROM %s e", ContainsJsons::class),
45+
'builds JSON object with many key-value pairs' => \sprintf("SELECT JSON_BUILD_OBJECT('k1', 'v1', 'k2', 'v2', 'k3', 'v3', 'k4', 'v4') FROM %s e", ContainsJsons::class),
46+
'builds JSON object with numeric and boolean values' => \sprintf("SELECT JSON_BUILD_OBJECT('numeric_key', '123', 'boolean_key', 'true') FROM %s e", ContainsJsons::class),
47+
'builds JSON object with mixed field and literal values' => \sprintf("SELECT JSON_BUILD_OBJECT('field_key', e.object1, 'literal_key', 'literal_value') FROM %s e", ContainsJsons::class),
4248
];
4349
}
4450

4551
#[Test]
4652
public function throws_exception_for_odd_number_of_arguments(): void
4753
{
4854
$this->expectException(InvalidArgumentForVariadicFunctionException::class);
55+
$this->expectExceptionMessage('json_build_object() requires an even number of arguments');
4956

50-
$dql = \sprintf("SELECT JSON_BUILD_OBJECT('key1', e.value1, 'key2') FROM %s e", ContainsJsons::class);
51-
$this->assertSqlFromDql('', $dql);
57+
$dql = \sprintf("SELECT JSON_BUILD_OBJECT('key1', e.object1, 'key2') FROM %s e", ContainsJsons::class);
58+
$this->buildEntityManager()->createQuery($dql)->getSQL();
59+
}
60+
61+
#[Test]
62+
public function throws_exception_for_single_argument(): void
63+
{
64+
$this->expectException(InvalidArgumentForVariadicFunctionException::class);
65+
$this->expectExceptionMessage('json_build_object() requires at least 2 arguments');
66+
67+
$dql = \sprintf("SELECT JSON_BUILD_OBJECT('key1') FROM %s e", ContainsJsons::class);
68+
$this->buildEntityManager()->createQuery($dql)->getSQL();
5269
}
5370
}

tests/Unit/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbBuildObjectTest.php

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,27 +27,44 @@ protected function getStringFunctions(): array
2727
protected function getExpectedSqlStatements(): array
2828
{
2929
return [
30-
"SELECT jsonb_build_object('key1', c0_.object1) AS sclr_0 FROM ContainsJsons c0_",
31-
"SELECT jsonb_build_object('key1', UPPER('value1'), 'key2', 'value2') AS sclr_0 FROM ContainsJsons c0_",
32-
"SELECT jsonb_build_object('key1', c0_.object1, 'key2', c0_.object2) AS sclr_0 FROM ContainsJsons c0_",
30+
'builds JSONB object with field value' => "SELECT jsonb_build_object('key1', c0_.object1) AS sclr_0 FROM ContainsJsons c0_",
31+
'builds JSONB object with function result and literal' => "SELECT jsonb_build_object('key1', UPPER('value1'), 'key2', 'value2') AS sclr_0 FROM ContainsJsons c0_",
32+
'builds JSONB object with multiple field values' => "SELECT jsonb_build_object('key1', c0_.object1, 'key2', c0_.object2) AS sclr_0 FROM ContainsJsons c0_",
33+
'builds JSONB object with many key-value pairs' => "SELECT jsonb_build_object('k1', 'v1', 'k2', 'v2', 'k3', 'v3', 'k4', 'v4') AS sclr_0 FROM ContainsJsons c0_",
34+
'builds JSONB object with numeric and boolean values' => "SELECT jsonb_build_object('numeric_key', '123', 'boolean_key', 'true') AS sclr_0 FROM ContainsJsons c0_",
35+
'builds JSONB object with mixed field and literal values' => "SELECT jsonb_build_object('field_key', c0_.object1, 'literal_key', 'literal_value') AS sclr_0 FROM ContainsJsons c0_",
3336
];
3437
}
3538

3639
protected function getDqlStatements(): array
3740
{
3841
return [
39-
\sprintf("SELECT JSONB_BUILD_OBJECT('key1', e.object1) FROM %s e", ContainsJsons::class),
40-
\sprintf("SELECT JSONB_BUILD_OBJECT('key1', UPPER('value1'), 'key2', 'value2') FROM %s e", ContainsJsons::class),
41-
\sprintf("SELECT JSONB_BUILD_OBJECT('key1', e.object1, 'key2', e.object2) FROM %s e", ContainsJsons::class),
42+
'builds JSONB object with field value' => \sprintf("SELECT JSONB_BUILD_OBJECT('key1', e.object1) FROM %s e", ContainsJsons::class),
43+
'builds JSONB object with function result and literal' => \sprintf("SELECT JSONB_BUILD_OBJECT('key1', UPPER('value1'), 'key2', 'value2') FROM %s e", ContainsJsons::class),
44+
'builds JSONB object with multiple field values' => \sprintf("SELECT JSONB_BUILD_OBJECT('key1', e.object1, 'key2', e.object2) FROM %s e", ContainsJsons::class),
45+
'builds JSONB object with many key-value pairs' => \sprintf("SELECT JSONB_BUILD_OBJECT('k1', 'v1', 'k2', 'v2', 'k3', 'v3', 'k4', 'v4') FROM %s e", ContainsJsons::class),
46+
'builds JSONB object with numeric and boolean values' => \sprintf("SELECT JSONB_BUILD_OBJECT('numeric_key', '123', 'boolean_key', 'true') FROM %s e", ContainsJsons::class),
47+
'builds JSONB object with mixed field and literal values' => \sprintf("SELECT JSONB_BUILD_OBJECT('field_key', e.object1, 'literal_key', 'literal_value') FROM %s e", ContainsJsons::class),
4248
];
4349
}
4450

4551
#[Test]
4652
public function throws_exception_for_odd_number_of_arguments(): void
4753
{
4854
$this->expectException(InvalidArgumentForVariadicFunctionException::class);
55+
$this->expectExceptionMessage('jsonb_build_object() requires an even number of arguments');
4956

5057
$dql = \sprintf("SELECT JSONB_BUILD_OBJECT('key1', e.object1, 'key2') FROM %s e", ContainsJsons::class);
51-
$this->assertSqlFromDql('', $dql);
58+
$this->buildEntityManager()->createQuery($dql)->getSQL();
59+
}
60+
61+
#[Test]
62+
public function throws_exception_for_single_argument(): void
63+
{
64+
$this->expectException(InvalidArgumentForVariadicFunctionException::class);
65+
$this->expectExceptionMessage('jsonb_build_object() requires at least 2 arguments');
66+
67+
$dql = \sprintf("SELECT JSONB_BUILD_OBJECT('key1') FROM %s e", ContainsJsons::class);
68+
$this->buildEntityManager()->createQuery($dql)->getSQL();
5269
}
5370
}

0 commit comments

Comments
 (0)