@@ -115,7 +115,11 @@ def test_single_value_message(self):
115115 def test_timestamp_change_split (self ):
116116 msg = [{'ts' : 1 , 'values' : {'a' : 1 }}, {'ts' : 2 , 'values' : {'b' : 2 }}]
117117 result = TBDeviceMqttClient ._split_message (msg , 10 , 100 )
118- self .assertEqual (len (result ), 2 )
118+ grouped_by_ts = {}
119+ for part in result :
120+ for data in part ['data' ]:
121+ grouped_by_ts .setdefault (data ['ts' ], set ()).update (data ['values' ].keys ())
122+ self .assertEqual (grouped_by_ts , {1 : {'a' }, 2 : {'b' }})
119123
120124 def test_exceeding_datapoint_limit (self ):
121125 msg = [{'ts' : 1 , 'values' : {f'k{ i } ' : i for i in range (10 )}}]
@@ -216,7 +220,6 @@ def test_partial_grouping_due_to_datapoint_limit(self):
216220 {'ts' : 1 , 'values' : {'e' : 5 }}, # forced into next group due to datapoint limit
217221 {'ts' : 1 , 'values' : {'f' : 6 }}, # grouped with above
218222 ]
219- # Max datapoints per message is 4 (after subtracting 1 in implementation)
220223 result = TBDeviceMqttClient ._split_message (msg , datapoints_max_count = 5 , max_payload_size = 1000 )
221224 self .assertEqual (len (result ), 2 )
222225
@@ -226,11 +229,9 @@ def test_partial_grouping_due_to_datapoint_limit(self):
226229 for d in r ['data' ]:
227230 keys .update (d ['values' ].keys ())
228231 all_keys .append (keys )
232+ self .assertLessEqual (sum (len (d ['values' ]) for d in r ['data' ]), 5 )
229233
230- # First group should contain a, b, c, d (4 datapoints)
231- self .assertIn ({'a' , 'b' , 'c' , 'd' }, all_keys )
232- # Second group should contain e, f (2 datapoints)
233- self .assertIn ({'e' , 'f' }, all_keys )
234+ self .assertEqual (set ().union (* all_keys ), {'a' , 'b' , 'c' , 'd' , 'e' , 'f' })
234235
235236 def test_values_included_only_when_ts_present (self ):
236237 msg = [{'values' : {'a' : 1 , 'b' : 2 }}]
@@ -250,13 +251,12 @@ def test_metadata_conflict_same_ts_no_grouping(self):
250251 ]
251252 result = TBDeviceMqttClient ._split_message (msg , 10 , 100 )
252253
253- self .assertEqual (len (result ), 2 )
254-
255- metadata_sets = [d ['data' ][0 ].get ('metadata' ) for d in result ]
254+ entries = [data for part in result for data in part ['data' ]]
255+ metadata_sets = [data .get ('metadata' ) for data in entries ]
256256 self .assertIn ({'unit' : 'C' }, metadata_sets )
257257 self .assertIn ({'unit' : 'F' }, metadata_sets )
258258
259- value_keys_sets = [set (d [ ' data' ][ 0 ][ 'values' ].keys ()) for d in result ]
259+ value_keys_sets = [set (data [ 'values' ].keys ()) for data in entries ]
260260 self .assertIn ({'a' }, value_keys_sets )
261261 self .assertIn ({'b' }, value_keys_sets )
262262
@@ -291,8 +291,6 @@ def test_mixed_dicts_with_and_without_ts(self):
291291 {'d' : 4 }
292292 ]
293293 result = TBDeviceMqttClient ._split_message (msg , 10 , 1000 )
294- # Should split into at least 2 chunks: one for ts=1 and one for ts=None
295- self .assertGreaterEqual (len (result ), 2 )
296294
297295 ts_chunks = [d for r in result for d in r ['data' ] if 'ts' in d ]
298296 raw_chunks = [d for r in result for d in r ['data' ] if 'ts' not in d ]
@@ -363,8 +361,8 @@ def test_complex_mixed_messages(self):
363361 {'m1' , 'm2' },
364362 {'m3' },
365363 {'m4' },
366- {'k1' , 'k2' , 'k3' },
367- {'k4' , ' k5' }
364+ {'k1' , 'k2' , 'k3' , 'k4' },
365+ {'k5' }
368366 ]
369367
370368 for expected_keys in expected_raw_key_sets :
@@ -380,7 +378,7 @@ def test_complex_mixed_messages(self):
380378 if total_size > 64 :
381379 self .assertEqual (len (r ), 1 )
382380
383- self .assertGreaterEqual (len (result ), 8 )
381+ self .assertGreaterEqual (len (result ), 5 )
384382
385383 def test_empty_values_should_skip_or_include_empty (self ):
386384 msg = [{'ts' : 1 , 'values' : {}}]
0 commit comments