@@ -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}
0 commit comments