@@ -16,10 +16,8 @@ func randomExtraData(in interface{}) {
1616 }
1717 f := v .FieldByName ("ExtraData" )
1818 f .Set (reflect .ValueOf (map [string ]interface {}{
19- "extra_data" : map [string ]interface {}{
20- "mystring" : randomString (10 ),
21- "mybool" : rand .Float64 () < 0.5 ,
22- },
19+ "mystring" : randomString (10 ),
20+ "mybool" : rand .Float64 () < 0.5 ,
2321 "data" : "custom" ,
2422 "custom_data" : "really_custom" ,
2523 "extra" : map [string ]interface {}{
@@ -69,3 +67,65 @@ func TestJSON(t *testing.T) {
6967 var r , r2 Reaction
7068 testInvariantJSON (t , & r , & r2 )
7169}
70+
71+ // TestFlattenExtraData tests the flattenExtraData function directly
72+ func TestFlattenExtraData (t * testing.T ) {
73+ t .Run ("Flatten nested extra_data" , func (t * testing.T ) {
74+ m := map [string ]interface {}{
75+ "field1" : "value1" ,
76+ "extra_data" : map [string ]interface {}{
77+ "custom_field" : "custom_value" ,
78+ "another_field" : 123 ,
79+ },
80+ }
81+
82+ flattenExtraData (m )
83+
84+ // Fields should be flattened
85+ require .Equal (t , "custom_value" , m ["custom_field" ])
86+ require .Equal (t , 123 , m ["another_field" ])
87+ require .Equal (t , "value1" , m ["field1" ])
88+ // The nested "extra_data" key should not exist
89+ require .NotContains (t , m , "extra_data" )
90+ })
91+
92+ t .Run ("No extra_data key" , func (t * testing.T ) {
93+ m := map [string ]interface {}{
94+ "field1" : "value1" ,
95+ "field2" : 123 ,
96+ }
97+
98+ flattenExtraData (m )
99+
100+ // Map should be unchanged
101+ require .Equal (t , "value1" , m ["field1" ])
102+ require .Equal (t , 123 , m ["field2" ])
103+ require .Len (t , m , 2 )
104+ })
105+
106+ t .Run ("extra_data is not a map" , func (t * testing.T ) {
107+ m := map [string ]interface {}{
108+ "field1" : "value1" ,
109+ "extra_data" : "not_a_map" ,
110+ }
111+
112+ flattenExtraData (m )
113+
114+ // extra_data should remain unchanged if it's not a map
115+ require .Equal (t , "not_a_map" , m ["extra_data" ])
116+ require .Equal (t , "value1" , m ["field1" ])
117+ })
118+
119+ t .Run ("Empty extra_data map" , func (t * testing.T ) {
120+ m := map [string ]interface {}{
121+ "field1" : "value1" ,
122+ "extra_data" : map [string ]interface {}{},
123+ }
124+
125+ flattenExtraData (m )
126+
127+ // Empty extra_data should be removed
128+ require .NotContains (t , m , "extra_data" )
129+ require .Equal (t , "value1" , m ["field1" ])
130+ })
131+ }
0 commit comments