@@ -69,3 +69,68 @@ def test_list_field(self):
6969 self .assertEqual (value_map [2 ], "69cd51ddf1a98c14c906c51e" ) # ObjectId string
7070 for item in result ["value" ]:
7171 self .assertIs (item ["is_json" ], False )
72+
73+ def test_list_of_embedded_dicts (self ):
74+ tags = [
75+ {"name" : "cool_tag" , "number" : 42 },
76+ {"name" : "other_tag" , "number" : 7 },
77+ ]
78+ result = self .form ._format_cell_value (tags )
79+ self .assertEqual (result ["type" ], "list" )
80+ self .assertIs (result ["is_json" ], False )
81+ for item in result ["value" ]:
82+ self .assertEqual (item ["type" ], "dict" )
83+ self .assertIs (item ["is_json" ], False )
84+ inner_map = {inner ["key" ]: inner ["value" ] for inner in item ["value" ]}
85+ self .assertIn ("name" , inner_map )
86+ self .assertIn ("number" , inner_map )
87+
88+ def test_dict_with_nested_list_of_dicts (self ):
89+ address = {
90+ "street" : "123 Main St" ,
91+ "tags" : [
92+ {"name" : "cool_tag" , "number" : 42 },
93+ ],
94+ }
95+ result = self .form ._format_cell_value (address )
96+ self .assertEqual (result ["type" ], "dict" )
97+ self .assertIs (result ["is_json" ], False )
98+ items_by_key = {item ["key" ]: item for item in result ["value" ]}
99+ self .assertEqual (items_by_key ["street" ]["value" ], "123 Main St" )
100+ tags_item = items_by_key ["tags" ]
101+ self .assertEqual (tags_item ["type" ], "list" )
102+ self .assertIs (tags_item ["is_json" ], False )
103+ first_tag = tags_item ["value" ][0 ]
104+ self .assertEqual (first_tag ["type" ], "dict" )
105+ inner_map = {inner ["key" ]: inner ["value" ] for inner in first_tag ["value" ]}
106+ self .assertEqual (inner_map ["name" ], "cool_tag" )
107+ self .assertEqual (inner_map ["number" ], "42" )
108+
109+ def test_deeply_nested_embedded_document (self ):
110+ address = {
111+ "street" : "123 Main St" ,
112+ "tags" : [
113+ {
114+ "name" : "cool_tag" ,
115+ "number" : 42 ,
116+ "person" : {"name" : "Alice" },
117+ }
118+ ],
119+ }
120+ result = self .form ._format_cell_value (address )
121+ self .assertEqual (result ["type" ], "dict" )
122+ address_by_key = {item ["key" ]: item for item in result ["value" ]}
123+ tags_item = address_by_key ["tags" ]
124+ self .assertEqual (tags_item ["type" ], "list" )
125+ self .assertIs (tags_item ["is_json" ], False )
126+ first_tag = tags_item ["value" ][0 ]
127+ self .assertEqual (first_tag ["type" ], "dict" )
128+ self .assertIs (first_tag ["is_json" ], False )
129+ tag_by_key = {inner ["key" ]: inner for inner in first_tag ["value" ]}
130+ self .assertEqual (tag_by_key ["name" ]["value" ], "cool_tag" )
131+ self .assertEqual (tag_by_key ["number" ]["value" ], "42" )
132+ person_item = tag_by_key ["person" ]
133+ self .assertEqual (person_item ["type" ], "dict" )
134+ self .assertIs (person_item ["is_json" ], False )
135+ person_map = {inner ["key" ]: inner ["value" ] for inner in person_item ["value" ]}
136+ self .assertEqual (person_map ["name" ], "Alice" )
0 commit comments