Skip to content

Commit 3b30f5c

Browse files
no message
1 parent 7ba442d commit 3b30f5c

File tree

2 files changed

+44
-10
lines changed

2 files changed

+44
-10
lines changed

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

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,33 +17,40 @@ protected function getStringFunctions(): array
1717
}
1818

1919
#[Test]
20-
public function jsonb_each(): void
20+
public function extracts_key_value_pairs_from_standard_json_object(): void
2121
{
2222
$dql = 'SELECT JSONB_EACH(t.object1) as result
2323
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t
2424
WHERE t.id = 1';
2525
$result = $this->executeDqlQuery($dql);
2626
$this->assertCount(4, $result);
27+
28+
$extractedKeys = [];
2729
foreach ($result as $row) {
2830
$this->assertIsArray($row);
2931
$this->assertArrayHasKey('result', $row);
3032
$this->assertIsString($row['result']);
33+
3134
$decoded = \json_decode($row['result'], true);
3235
if (\is_array($decoded) && isset($decoded['key'], $decoded['value'])) {
3336
$key = $decoded['key'];
34-
$value = $decoded['value'];
3537
} else {
3638
$parts = \explode(':', \trim($row['result'], '{}"'));
3739
$key = $parts[0] ?? null;
38-
$value = $parts[1] ?? null;
3940
}
4041

4142
$this->assertNotNull($key);
43+
$extractedKeys[] = $key;
44+
}
45+
46+
$expectedKeys = ['name', 'age', 'address', 'tags'];
47+
foreach ($expectedKeys as $expectedKey) {
48+
$this->assertContains($expectedKey, $extractedKeys, \sprintf("Expected key '%s' should be extracted", $expectedKey));
4249
}
4350
}
4451

4552
#[Test]
46-
public function jsonb_each_with_empty_object(): void
53+
public function returns_empty_result_for_empty_object(): void
4754
{
4855
$dql = 'SELECT JSONB_EACH(t.object1) as result
4956
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t
@@ -53,32 +60,59 @@ public function jsonb_each_with_empty_object(): void
5360
}
5461

5562
#[Test]
56-
public function jsonb_each_with_different_object(): void
63+
public function extracts_key_value_pairs_from_alternative_json_object(): void
5764
{
5865
$dql = 'SELECT JSONB_EACH(t.object1) as result
5966
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t
6067
WHERE t.id = 2';
6168
$result = $this->executeDqlQuery($dql);
6269
$this->assertCount(4, $result);
70+
71+
foreach ($result as $row) {
72+
$this->assertIsArray($row);
73+
$this->assertArrayHasKey('result', $row);
74+
$this->assertIsString($row['result']);
75+
76+
$decoded = \json_decode($row['result'], true);
77+
$this->assertNotNull($decoded, 'Result should be valid JSON');
78+
}
6379
}
6480

6581
#[Test]
66-
public function jsonb_each_with_nulls(): void
82+
public function extracts_key_value_pairs_when_json_contains_null_values(): void
6783
{
6884
$dql = 'SELECT JSONB_EACH(t.object1) as result
6985
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t
7086
WHERE t.id = 5';
7187
$result = $this->executeDqlQuery($dql);
7288
$this->assertCount(4, $result);
89+
90+
foreach ($result as $row) {
91+
$this->assertIsArray($row);
92+
$this->assertArrayHasKey('result', $row);
93+
$this->assertIsString($row['result']);
94+
95+
$decoded = \json_decode($row['result'], true);
96+
$this->assertNotNull($decoded, 'Result should be valid JSON even with null values');
97+
}
7398
}
7499

75100
#[Test]
76-
public function jsonb_each_with_empty_tags_array(): void
101+
public function extracts_key_value_pairs_when_json_contains_empty_array(): void
77102
{
78103
$dql = 'SELECT JSONB_EACH(t.object1) as result
79104
FROM Fixtures\MartinGeorgiev\Doctrine\Entity\ContainsJsons t
80105
WHERE t.id = 3';
81106
$result = $this->executeDqlQuery($dql);
82107
$this->assertCount(4, $result);
108+
109+
foreach ($result as $row) {
110+
$this->assertIsArray($row);
111+
$this->assertArrayHasKey('result', $row);
112+
$this->assertIsString($row['result']);
113+
114+
$decoded = \json_decode($row['result'], true);
115+
$this->assertNotNull($decoded, 'Result should be valid JSON even with empty arrays');
116+
}
83117
}
84118
}

tests/Integration/MartinGeorgiev/Doctrine/ORM/Query/AST/Functions/JsonbObjectKeysTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@ public function extracts_object_keys_from_jsonb(): void
2424
WHERE t.id = 1';
2525
$result = $this->executeDqlQuery($dql);
2626
$this->assertIsString($result[0]['result']);
27-
27+
2828
$keys = $this->transformPostgresArray($result[0]['result']);
2929
$this->assertIsArray($keys);
3030
$this->assertCount(4, $keys);
31-
31+
3232
$expectedKeys = ['name', 'age', 'address', 'tags'];
3333
foreach ($expectedKeys as $expectedKey) {
34-
$this->assertContains($expectedKey, $keys, "Expected key '{$expectedKey}' should be present in the extracted keys");
34+
$this->assertContains($expectedKey, $keys, \sprintf("Expected key '%s' should be present in the extracted keys", $expectedKey));
3535
}
3636
}
3737
}

0 commit comments

Comments
 (0)