Skip to content

Commit b112585

Browse files
chore: improve tests by adding more SQL scenarios and adding descriptions to the tested query variations
1 parent 37be684 commit b112585

File tree

14 files changed

+64
-57
lines changed

14 files changed

+64
-57
lines changed

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/ArrayToJsonTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ protected function getStringFunctions(): array
1919
protected function getExpectedSqlStatements(): array
2020
{
2121
return [
22-
'SELECT array_to_json(c0_.array1) AS sclr_0 FROM ContainsArrays c0_',
22+
'converts simple array to json' => 'SELECT array_to_json(c0_.array1) AS sclr_0 FROM ContainsArrays c0_',
2323
];
2424
}
2525

2626
protected function getDqlStatements(): array
2727
{
2828
return [
29-
\sprintf('SELECT ARRAY_TO_JSON(e.array1) FROM %s e', ContainsArrays::class),
29+
'converts simple array to json' => \sprintf('SELECT ARRAY_TO_JSON(e.array1) FROM %s e', ContainsArrays::class),
3030
];
3131
}
3232
}

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ protected function getStringFunctions(): array
1919
protected function getExpectedSqlStatements(): array
2020
{
2121
return [
22-
'SELECT json_each(c0_.object1) AS sclr_0 FROM ContainsJsons c0_',
22+
'expands json object into key-value pairs' => 'SELECT json_each(c0_.object1) AS sclr_0 FROM ContainsJsons c0_',
2323
];
2424
}
2525

2626
protected function getDqlStatements(): array
2727
{
2828
return [
29-
\sprintf('SELECT JSON_EACH(e.object1) FROM %s e', ContainsJsons::class),
29+
'expands json object into key-value pairs' => \sprintf('SELECT JSON_EACH(e.object1) FROM %s e', ContainsJsons::class),
3030
];
3131
}
3232
}

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonEachTextTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ protected function getStringFunctions(): array
1919
protected function getExpectedSqlStatements(): array
2020
{
2121
return [
22-
'SELECT json_each_text(c0_.object1) AS sclr_0 FROM ContainsJsons c0_',
22+
'expands json object into text key-value pairs' => 'SELECT json_each_text(c0_.object1) AS sclr_0 FROM ContainsJsons c0_',
2323
];
2424
}
2525

2626
protected function getDqlStatements(): array
2727
{
2828
return [
29-
\sprintf('SELECT JSON_EACH_TEXT(e.object1) FROM %s e', ContainsJsons::class),
29+
'expands json object into text key-value pairs' => \sprintf('SELECT JSON_EACH_TEXT(e.object1) FROM %s e', ContainsJsons::class),
3030
];
3131
}
3232
}

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonExistsTest.php

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,20 @@ protected function getStringFunctions(): array
1919
protected function getExpectedSqlStatements(): array
2020
{
2121
return [
22-
// Basic usage
23-
"SELECT json_exists(c0_.object1, '$.name') AS sclr_0 FROM ContainsJsons c0_",
24-
// Nested path
25-
"SELECT json_exists(c0_.object1, '$.address.city') AS sclr_0 FROM ContainsJsons c0_",
26-
// Array element
27-
"SELECT json_exists(c0_.object1, '$.items[0]') AS sclr_0 FROM ContainsJsons c0_",
22+
'checks if simple path exists' => "SELECT json_exists(c0_.object1, '$.name') AS sclr_0 FROM ContainsJsons c0_",
23+
'checks if nested path exists' => "SELECT json_exists(c0_.object1, '$.address.city') AS sclr_0 FROM ContainsJsons c0_",
24+
'checks if array element exists' => "SELECT json_exists(c0_.object1, '$.items[0]') AS sclr_0 FROM ContainsJsons c0_",
25+
'checks if deeply nested array element exists' => "SELECT json_exists(c0_.object1, '$.users[0].addresses[0].street') AS sclr_0 FROM ContainsJsons c0_",
2826
];
2927
}
3028

3129
protected function getDqlStatements(): array
3230
{
3331
return [
34-
\sprintf("SELECT JSON_EXISTS(e.object1, '$.name') FROM %s e", ContainsJsons::class),
35-
\sprintf("SELECT JSON_EXISTS(e.object1, '$.address.city') FROM %s e", ContainsJsons::class),
36-
\sprintf("SELECT JSON_EXISTS(e.object1, '$.items[0]') FROM %s e", ContainsJsons::class),
32+
'checks if simple path exists' => \sprintf("SELECT JSON_EXISTS(e.object1, '$.name') FROM %s e", ContainsJsons::class),
33+
'checks if nested path exists' => \sprintf("SELECT JSON_EXISTS(e.object1, '$.address.city') FROM %s e", ContainsJsons::class),
34+
'checks if array element exists' => \sprintf("SELECT JSON_EXISTS(e.object1, '$.items[0]') FROM %s e", ContainsJsons::class),
35+
'checks if deeply nested array element exists' => \sprintf("SELECT JSON_EXISTS(e.object1, '$.users[0].addresses[0].street') FROM %s e", ContainsJsons::class),
3736
];
3837
}
3938
}

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonQueryTest.php

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,30 @@ protected function getStringFunctions(): array
1919
protected function getExpectedSqlStatements(): array
2020
{
2121
return [
22-
"SELECT json_query(c0_.object1, '$.items[*]') AS sclr_0 FROM ContainsJsons c0_",
23-
"SELECT json_query(c0_.object1, '$.address') AS sclr_0 FROM ContainsJsons c0_",
24-
// Additional test cases for important scenarios
25-
"SELECT json_query(c0_.object1, '$.store.book[*].author') AS sclr_0 FROM ContainsJsons c0_",
26-
"SELECT json_query(c0_.object1, '$.store.book[0 to 2]') AS sclr_0 FROM ContainsJsons c0_",
27-
"SELECT json_query(c0_.object1, '$.store.book[*]?(@.price > 10)') AS sclr_0 FROM ContainsJsons c0_",
22+
'extracts all array items' => "SELECT json_query(c0_.object1, '$.items[*]') AS sclr_0 FROM ContainsJsons c0_",
23+
'extracts nested object' => "SELECT json_query(c0_.object1, '$.address') AS sclr_0 FROM ContainsJsons c0_",
24+
'extracts all authors from books array' => "SELECT json_query(c0_.object1, '$.store.book[*].author') AS sclr_0 FROM ContainsJsons c0_",
25+
'extracts specific range of books' => "SELECT json_query(c0_.object1, '$.store.book[0 to 2]') AS sclr_0 FROM ContainsJsons c0_",
26+
'filters books by price condition' => "SELECT json_query(c0_.object1, '$.store.book[*]?(@.price > 10)') AS sclr_0 FROM ContainsJsons c0_",
27+
// Additional scenarios based on PostgreSQL's json_query capabilities
28+
'extracts last array element' => "SELECT json_query(c0_.object1, '$.items[last]') AS sclr_0 FROM ContainsJsons c0_",
29+
'extracts specific keys from objects in array' => "SELECT json_query(c0_.object1, '$.users[*]?(@.active == true).name') AS sclr_0 FROM ContainsJsons c0_",
30+
'extracts nested array with multiple conditions' => "SELECT json_query(c0_.object1, '$.store.book[*]?(@.price < 30 && @.category == \"fiction\")') AS sclr_0 FROM ContainsJsons c0_",
2831
];
2932
}
3033

3134
protected function getDqlStatements(): array
3235
{
3336
return [
34-
\sprintf("SELECT JSON_QUERY(e.object1, '$.items[*]') FROM %s e", ContainsJsons::class),
35-
\sprintf("SELECT JSON_QUERY(e.object1, '$.address') FROM %s e", ContainsJsons::class),
36-
// Additional test cases matching the SQL statements above
37-
\sprintf("SELECT JSON_QUERY(e.object1, '$.store.book[*].author') FROM %s e", ContainsJsons::class),
38-
\sprintf("SELECT JSON_QUERY(e.object1, '$.store.book[0 to 2]') FROM %s e", ContainsJsons::class),
39-
\sprintf("SELECT JSON_QUERY(e.object1, '$.store.book[*]?(@.price > 10)') FROM %s e", ContainsJsons::class),
37+
'extracts all array items' => \sprintf("SELECT JSON_QUERY(e.object1, '$.items[*]') FROM %s e", ContainsJsons::class),
38+
'extracts nested object' => \sprintf("SELECT JSON_QUERY(e.object1, '$.address') FROM %s e", ContainsJsons::class),
39+
'extracts all authors from books array' => \sprintf("SELECT JSON_QUERY(e.object1, '$.store.book[*].author') FROM %s e", ContainsJsons::class),
40+
'extracts specific range of books' => \sprintf("SELECT JSON_QUERY(e.object1, '$.store.book[0 to 2]') FROM %s e", ContainsJsons::class),
41+
'filters books by price condition' => \sprintf("SELECT JSON_QUERY(e.object1, '$.store.book[*]?(@.price > 10)') FROM %s e", ContainsJsons::class),
42+
// Additional scenarios based on PostgreSQL's json_query capabilities
43+
'extracts last array element' => \sprintf("SELECT JSON_QUERY(e.object1, '$.items[last]') FROM %s e", ContainsJsons::class),
44+
'extracts specific keys from objects in array' => \sprintf("SELECT JSON_QUERY(e.object1, '$.users[*]?(@.active == true).name') FROM %s e", ContainsJsons::class),
45+
'extracts nested array with multiple conditions' => \sprintf("SELECT JSON_QUERY(e.object1, '$.store.book[*]?(@.price < 30 && @.category == \"fiction\")') FROM %s e", ContainsJsons::class),
4046
];
4147
}
4248
}

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonTypeofTest.php

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,16 @@ protected function getStringFunctions(): array
1919
protected function getExpectedSqlStatements(): array
2020
{
2121
return [
22-
'SELECT json_typeof(c0_.object1) AS sclr_0 FROM ContainsJsons c0_',
22+
'determines type of json document' => 'SELECT json_typeof(c0_.object1) AS sclr_0 FROM ContainsJsons c0_',
23+
'determines type of literal value' => "SELECT json_typeof('42') AS sclr_0 FROM ContainsJsons c0_",
2324
];
2425
}
2526

2627
protected function getDqlStatements(): array
2728
{
2829
return [
29-
\sprintf('SELECT JSON_TYPEOF(e.object1) FROM %s e', ContainsJsons::class),
30+
'determines type of json document' => \sprintf('SELECT JSON_TYPEOF(e.object1) FROM %s e', ContainsJsons::class),
31+
'determines type of literal value' => \sprintf("SELECT JSON_TYPEOF('42') FROM %s e", ContainsJsons::class),
3032
];
3133
}
3234
}

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbArrayElementsTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ protected function getStringFunctions(): array
1919
protected function getExpectedSqlStatements(): array
2020
{
2121
return [
22-
'SELECT jsonb_array_elements(c0_.object1) AS sclr_0 FROM ContainsJsons c0_',
22+
'expands jsonb array into separate rows' => 'SELECT jsonb_array_elements(c0_.object1) AS sclr_0 FROM ContainsJsons c0_',
2323
];
2424
}
2525

2626
protected function getDqlStatements(): array
2727
{
2828
return [
29-
\sprintf('SELECT JSONB_ARRAY_ELEMENTS(e.object1) FROM %s e', ContainsJsons::class),
29+
'expands jsonb array into separate rows' => \sprintf('SELECT JSONB_ARRAY_ELEMENTS(e.object1) FROM %s e', ContainsJsons::class),
3030
];
3131
}
3232
}

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbEachTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ protected function getStringFunctions(): array
1919
protected function getExpectedSqlStatements(): array
2020
{
2121
return [
22-
'SELECT jsonb_each(c0_.object1) AS sclr_0 FROM ContainsJsons c0_',
22+
'expands jsonb object into key-value pairs' => 'SELECT jsonb_each(c0_.object1) AS sclr_0 FROM ContainsJsons c0_',
2323
];
2424
}
2525

2626
protected function getDqlStatements(): array
2727
{
2828
return [
29-
\sprintf('SELECT JSONB_EACH(e.object1) FROM %s e', ContainsJsons::class),
29+
'expands jsonb object into key-value pairs' => \sprintf('SELECT JSONB_EACH(e.object1) FROM %s e', ContainsJsons::class),
3030
];
3131
}
3232
}

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbExistsTest.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ protected function getStringFunctions(): array
1919
protected function getExpectedSqlStatements(): array
2020
{
2121
return [
22-
"SELECT jsonb_exists(c0_.object1, 'country') AS sclr_0 FROM ContainsJsons c0_",
22+
'checks if top-level key exists' => "SELECT jsonb_exists(c0_.object1, 'country') AS sclr_0 FROM ContainsJsons c0_",
2323
];
2424
}
2525

2626
protected function getDqlStatements(): array
2727
{
2828
return [
29-
\sprintf("SELECT JSONB_EXISTS(e.object1, 'country') FROM %s e", ContainsJsons::class),
29+
'checks if top-level key exists' => \sprintf("SELECT JSONB_EXISTS(e.object1, 'country') FROM %s e", ContainsJsons::class),
3030
];
3131
}
3232
}

tests/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbPrettyTest.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@ protected function getStringFunctions(): array
1919
protected function getExpectedSqlStatements(): array
2020
{
2121
return [
22-
'SELECT jsonb_pretty(c0_.object1) AS sclr_0 FROM ContainsJsons c0_',
23-
"SELECT jsonb_pretty('{\"iso_3166_a3_code\":\"BGR\"}') AS sclr_0 FROM ContainsJsons c0_",
22+
'formats jsonb document with proper indentation' => 'SELECT jsonb_pretty(c0_.object1) AS sclr_0 FROM ContainsJsons c0_',
23+
'formats literal jsonb value' => "SELECT jsonb_pretty('{\"iso_3166_a3_code\":\"BGR\"}') AS sclr_0 FROM ContainsJsons c0_",
2424
];
2525
}
2626

2727
protected function getDqlStatements(): array
2828
{
2929
return [
30-
\sprintf('SELECT JSONB_PRETTY(e.object1) FROM %s e', ContainsJsons::class),
31-
\sprintf("SELECT JSONB_PRETTY('{\"iso_3166_a3_code\":\"BGR\"}') FROM %s e", ContainsJsons::class),
30+
'formats jsonb document with proper indentation' => \sprintf('SELECT JSONB_PRETTY(e.object1) FROM %s e', ContainsJsons::class),
31+
'formats literal jsonb value' => \sprintf("SELECT JSONB_PRETTY('{\"iso_3166_a3_code\":\"BGR\"}') FROM %s e", ContainsJsons::class),
3232
];
3333
}
3434
}

0 commit comments

Comments
 (0)