@@ -185,6 +185,84 @@ def test_get_edge_detail_no_side_effect(self):
185185 self .assertEqual (orig_first , after_first , "first_peak_mz was mutated by get_edge_detail" )
186186 self .assertEqual (orig_second , after_second , "second_peak_mz was mutated by get_edge_detail" )
187187
188+ def test_get_result_returns_valid_dicts (self ):
189+ """get_result() should return (peaksObj, fragmentsObj) with correct keys and types."""
190+ peaksObj , fragmentsObj = self .mf .get_result ()
191+
192+ # peaksObj should be a dict with the expected keys
193+ self .assertIsInstance (peaksObj , dict )
194+ expected_peaks_keys = [
195+ "main_compound_peaks" , "mod_compound_peaks" , "matched_peaks" ,
196+ "main_precursor_mz" , "mod_precursor_mz" ,
197+ ]
198+ for key in expected_peaks_keys :
199+ self .assertIn (key , peaksObj , f"peaksObj missing key: { key } " )
200+
201+ # fragmentsObj should be a dict with the expected keys
202+ self .assertIsInstance (fragmentsObj , dict )
203+ expected_frags_keys = ["frags_map" , "structure" , "peaks" , "Precursor_MZ" ]
204+ for key in expected_frags_keys :
205+ self .assertIn (key , fragmentsObj , f"fragmentsObj missing key: { key } " )
206+
207+ def test_get_result_peaks_content (self ):
208+ """get_result() peaks lists should be non-empty tuples of length 2."""
209+ peaksObj , _ = self .mf .get_result ()
210+
211+ self .assertGreater (len (peaksObj ["main_compound_peaks" ]), 0 )
212+ self .assertGreater (len (peaksObj ["mod_compound_peaks" ]), 0 )
213+
214+ # Each peak should be a (mz, intensity) pair
215+ for peak in peaksObj ["main_compound_peaks" ]:
216+ self .assertEqual (len (peak ), 2 )
217+ for peak in peaksObj ["mod_compound_peaks" ]:
218+ self .assertEqual (len (peak ), 2 )
219+
220+ def test_get_result_precursor_mz (self ):
221+ """get_result() precursor_mz values should match the compounds."""
222+ peaksObj , fragmentsObj = self .mf .get_result ()
223+
224+ self .assertAlmostEqual (peaksObj ["main_precursor_mz" ],
225+ self .known .spectrum .precursor_mz )
226+ self .assertAlmostEqual (peaksObj ["mod_precursor_mz" ],
227+ self .unknown .spectrum .precursor_mz )
228+ self .assertAlmostEqual (fragmentsObj ["Precursor_MZ" ],
229+ self .known .spectrum .precursor_mz )
230+
231+ def test_get_result_fragments_structure (self ):
232+ """fragmentsObj structure and peaks should reference the known compound."""
233+ from rdkit import Chem
234+ peaksObj , fragmentsObj = self .mf .get_result ()
235+
236+ # Compare by SMILES since RDKit Mol objects may be copied internally
237+ self .assertEqual (
238+ Chem .MolToSmiles (fragmentsObj ["structure" ]),
239+ Chem .MolToSmiles (self .known .structure ),
240+ )
241+ self .assertEqual (fragmentsObj ["peaks" ], peaksObj ["main_compound_peaks" ])
242+
243+ def test_get_result_matched_peaks (self ):
244+ """get_result() matched_peaks should contain expected pairs (unknown_mz, known_mz)."""
245+ peaksObj , _ = self .mf .get_result ()
246+ matched = peaksObj ["matched_peaks" ]
247+
248+ self .assertIsInstance (matched , list )
249+ self .assertEqual (len (matched ), 9 )
250+
251+ expected_matched_peaks = [
252+ (409304992 , 313139007 ),
253+ (308160003 , 308160003 ),
254+ (209190002 , 113023002 ),
255+ (310273986 , 214106994 ),
256+ (102091003 , 102091003 ),
257+ (84081001 , 84080001 ),
258+ (390165008 , 390165985 ),
259+ (201123001 , 201123001 ),
260+ (165102005 , 165102005 ),
261+ ]
262+
263+ self .assertEqual (matched , expected_matched_peaks ,
264+ "matched_peaks do not match expected values" )
265+
188266
189267if __name__ == "__main__" :
190268 unittest .main ()
0 commit comments