@@ -142,4 +142,117 @@ def test_rec_to_table(self, mock_pt_cls):
142142 ]
143143 mock_table .add_row .assert_has_calls (expected_calls , any_order = True )
144144
145+ class CombineRecsTests (unittest .TestCase ):
146+
147+
148+ def _validate_rec (self , rec , key , value ):
149+ self .assertEqual (rec [key ], value )
150+
151+ def test_combine_two_recs (self ):
152+ recs = [
153+ {
154+ 'name' :'rec1' ,
155+ 'valuea' : '10' ,
156+ 'valueb' : '11' ,
157+ 'valuec' : '12' ,
158+ },
159+ {
160+ 'name' : 'rec1' ,
161+ 'valued' : '5' ,
162+ 'valuee' : '8' ,
163+ },
164+ ]
165+
166+ combined_recs = inspector .combine_recs (recs , 'name' )
167+ self .assertEqual (len (combined_recs ), 1 )
168+ rec = combined_recs [0 ]
169+ self ._validate_rec (rec , 'valuea' , '10' )
170+ self ._validate_rec (rec , 'valueb' , '11' )
171+ self ._validate_rec (rec , 'valuec' , '12' )
172+ self ._validate_rec (rec , 'valued' , '5' )
173+ self ._validate_rec (rec , 'valuee' , '8' )
174+
175+ def test_combine_three_recs (self ):
176+ recs = [
177+ {
178+ 'name' :'rec1' ,
179+ 'valuea' : '10' ,
180+ 'valueb' : '11' ,
181+ 'valuec' : '12' ,
182+ },
183+ {
184+ 'name' : 'rec1' ,
185+ 'valued' : '5' ,
186+ 'valuee' : '8' ,
187+ },
188+ {
189+ 'name' : 'rec1' ,
190+ 'valuef' : '1' ,
191+ 'valueg' : '2' ,
192+ },
193+ ]
194+
195+ combined_recs = inspector .combine_recs (recs , 'name' )
196+ self .assertEqual (len (combined_recs ), 1 )
197+ rec = combined_recs [0 ]
198+ self ._validate_rec (rec , 'valuea' , '10' )
199+ self ._validate_rec (rec , 'valueb' , '11' )
200+ self ._validate_rec (rec , 'valuec' , '12' )
201+ self ._validate_rec (rec , 'valued' , '5' )
202+ self ._validate_rec (rec , 'valuee' , '8' )
203+ self ._validate_rec (rec , 'valuef' , '1' )
204+ self ._validate_rec (rec , 'valueg' , '2' )
205+
206+ def test_combine_three_recs_to_two (self ):
207+ recs = [
208+ {
209+ 'name' :'rec1' ,
210+ 'valuea' : '10' ,
211+ 'valueb' : '11' ,
212+ 'valuec' : '12' ,
213+ },
214+ {
215+ 'name' : 'rec2' ,
216+ 'valued' : '5' ,
217+ 'valuee' : '8' ,
218+ },
219+ {
220+ 'name' : 'rec1' ,
221+ 'valuef' : '1' ,
222+ 'valueg' : '2' ,
223+ },
224+ ]
225+
226+ combined_recs = inspector .combine_recs (recs , 'name' )
227+ self .assertEqual (len (combined_recs ), 2 )
228+ for rec in combined_recs :
229+ if rec ['name' ] == 'rec1' :
230+ self ._validate_rec (rec , 'valuea' , '10' )
231+ self ._validate_rec (rec , 'valueb' , '11' )
232+ self ._validate_rec (rec , 'valuec' , '12' )
233+ self ._validate_rec (rec , 'valuef' , '1' )
234+ self ._validate_rec (rec , 'valueg' , '2' )
235+ elif rec ['name' ] == 'rec2' :
236+ self ._validate_rec (rec , 'valued' , '5' )
237+ self ._validate_rec (rec , 'valuee' , '8' )
238+ else :
239+ raise Exception ("Unexpected rec: %s" % rec )
240+
241+ def test_colliding_values (self ):
242+ recs = [
243+ {
244+ 'name' :'rec1' ,
245+ 'valuea' : '10' ,
246+ 'valueb' : '11' ,
247+ 'valuec' : '12' ,
248+ },
249+ {
250+ 'name' : 'rec1' ,
251+ 'valuea' : '5' ,
252+ 'valuee' : '8' ,
253+ },
254+ ]
255+ with self .assertRaises (Exception ) as context :
256+ combined_recs = inspector .combine_recs (recs , 'name' )
257+ self .assertEqual (context .exception .message , "Mis-match for key 'valuea'" )
145258
0 commit comments