@@ -156,6 +156,29 @@ describe("flattenAttributes", () => {
156
156
157
157
expect ( flattenAttributes ( obj , "retry.byStatus" ) ) . toEqual ( expected ) ;
158
158
} ) ;
159
+
160
+ it ( "handles circular references correctly" , ( ) => {
161
+ const user = { name : "Alice" } ;
162
+ user [ "blogPosts" ] = [ { title : "Post 1" , author : user } ] ; // Circular reference
163
+
164
+ const result = flattenAttributes ( user ) ;
165
+ expect ( result ) . toEqual ( {
166
+ "name" : "Alice" ,
167
+ "blogPosts.[0].title" : "Post 1" ,
168
+ "blogPosts.[0].author" : "$@circular((" ,
169
+ } ) ;
170
+ } ) ;
171
+
172
+ it ( "handles nested circular references correctly" , ( ) => {
173
+ const user = { name : "Bob" } ;
174
+ user [ "friends" ] = [ user ] ; // Circular reference
175
+
176
+ const result = flattenAttributes ( user ) ;
177
+ expect ( result ) . toEqual ( {
178
+ "name" : "Bob" ,
179
+ "friends.[0]" : "$@circular((" ,
180
+ } ) ;
181
+ } ) ;
159
182
} ) ;
160
183
161
184
describe ( "unflattenAttributes" , ( ) => {
@@ -223,4 +246,18 @@ describe("unflattenAttributes", () => {
223
246
} ;
224
247
expect ( unflattenAttributes ( flattened ) ) . toEqual ( expected ) ;
225
248
} ) ;
249
+
250
+ it ( "rehydrates circular references correctly" , ( ) => {
251
+ const flattened = {
252
+ "name" : "Alice" ,
253
+ "blogPosts.[0].title" : "Post 1" ,
254
+ "blogPosts.[0].author" : "$@circular((" ,
255
+ } ;
256
+
257
+ const result = unflattenAttributes ( flattened ) ;
258
+ expect ( result ) . toEqual ( {
259
+ name : "Alice" ,
260
+ blogPosts : [ { title : "Post 1" , author : "[Circular Reference]" } ] ,
261
+ } ) ;
262
+ } ) ;
226
263
} ) ;
0 commit comments