Skip to content

Commit 0f23d2a

Browse files
committed
tests
1 parent fdd7d69 commit 0f23d2a

File tree

4 files changed

+128
-0
lines changed

4 files changed

+128
-0
lines changed

sdgym/result_explorer/result_handler.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,12 @@ def _load_yaml_file(self, folder_name, file_name):
4646
"""Load a YAML file from the results folder."""
4747
pass
4848

49+
def _validate_folder_name(self, folder_name):
50+
"""Validate that the provided folder name exists in the results directory."""
51+
all_folders = self.list()
52+
if folder_name not in all_folders:
53+
raise ValueError(f"Folder '{folder_name}' does not exist in the results directory.")
54+
4955
def _compute_wins(self, result):
5056
synthesizers = result['Synthesizer'].unique()
5157
datasets = result['Dataset'].unique()
@@ -171,6 +177,7 @@ def load_results(self, results_folder_name):
171177
pd.DataFrame:
172178
A DataFrame containing the results of the specified folder.
173179
"""
180+
self._validate_folder_name(results_folder_name)
174181
result_filenames = self._get_results_files(
175182
results_folder_name, prefix=RESULTS_FILE_PREFIX, suffix='.csv'
176183
)
@@ -191,6 +198,7 @@ def load_metainfo(self, results_folder_name):
191198
dict:
192199
A dictionary containing the metainfo of the specified folder.
193200
"""
201+
self._validate_folder_name(results_folder_name)
194202
yaml_files = self._get_results_files(
195203
results_folder_name, prefix=metainfo_PREFIX, suffix='.yaml'
196204
)

tests/integration/result_explorer/test_result_explorer.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ def test_end_to_end_local(tmp_path):
2121
# Run
2222
result_explorer = ResultsExplorer(output_destination)
2323
runs = result_explorer.list()
24+
results = result_explorer.load_results(runs[0])
25+
metainfo = result_explorer.load_metainfo(runs[0])
2426
synthetic_data = result_explorer.load_synthetic_data(
2527
results_folder_name=runs[0],
2628
dataset_name='expedia_hotel_logs',
@@ -39,6 +41,16 @@ def test_end_to_end_local(tmp_path):
3941
new_synthetic_data = synthesizer.sample(num_rows=10)
4042

4143
# Assert
44+
expected_results = pd.read_csv(f'{output_destination}/SDGym_results_{today}/results.csv')
45+
pd.testing.assert_frame_equal(results, expected_results)
46+
assert metainfo[f'run_{today}_0']['jobs'] == [
47+
['expedia_hotel_logs', 'GaussianCopulaSynthesizer'],
48+
['expedia_hotel_logs', 'TVAESynthesizer'],
49+
['expedia_hotel_logs', 'UniformSynthesizer'],
50+
['fake_companies', 'GaussianCopulaSynthesizer'],
51+
['fake_companies', 'TVAESynthesizer'],
52+
['fake_companies', 'UniformSynthesizer'],
53+
]
4254
expected_run = f'SDGym_results_{today}'
4355
assert runs == [expected_run]
4456
assert isinstance(synthetic_data, pd.DataFrame)

tests/unit/result_explorer/test_result_explorer.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -236,3 +236,41 @@ def test_summarize(self, tmp_path):
236236
# Assert
237237
result_explorer._handler.summarize.assert_called_once_with('SDGym_results_07_07_2025')
238238
pd.testing.assert_frame_equal(summary, results)
239+
240+
def test_load_results(self, tmp_path):
241+
"""Test the `load_results` method."""
242+
# Setup
243+
output_destination = str(tmp_path / 'benchmark_output')
244+
(tmp_path / 'benchmark_output' / 'SDGym_results_07_07_2025').mkdir(parents=True)
245+
result_explorer = ResultsExplorer(output_destination)
246+
result_explorer._handler = Mock()
247+
results = pd.DataFrame({
248+
'Dataset': ['A', 'B'],
249+
'Synthesizer': ['Synth1', 'Synth2'],
250+
'Metric1': [0.9, 0.8],
251+
})
252+
result_explorer._handler.load_results = Mock(return_value=results)
253+
254+
# Run
255+
loaded_results = result_explorer.load_results('SDGym_results_07_07_2025')
256+
257+
# Assert
258+
result_explorer._handler.load_results.assert_called_once_with('SDGym_results_07_07_2025')
259+
pd.testing.assert_frame_equal(loaded_results, results)
260+
261+
def test_load_metainfo(self, tmp_path):
262+
"""Test the `load_metainfo` method."""
263+
# Setup
264+
output_destination = str(tmp_path / 'benchmark_output')
265+
(tmp_path / 'benchmark_output' / 'SDGym_results_07_07_2025').mkdir(parents=True)
266+
result_explorer = ResultsExplorer(output_destination)
267+
result_explorer._handler = Mock()
268+
metainfo = {'synthesizer_versions': {'Synth1': '1.0.0', 'Synth2': '2.0.0'}}
269+
result_explorer._handler.load_metainfo = Mock(return_value=metainfo)
270+
271+
# Run
272+
loaded_metainfo = result_explorer.load_metainfo('SDGym_results_07_07_2025')
273+
274+
# Assert
275+
result_explorer._handler.load_metainfo.assert_called_once_with('SDGym_results_07_07_2025')
276+
assert loaded_metainfo == metainfo

tests/unit/result_explorer/test_result_handler.py

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,18 @@
1818
class TestResultsHandler:
1919
"""Unit tests for the ResultsHandler class."""
2020

21+
def test__validate_folder_name(self):
22+
"""Test the `_validate_folder_name` method."""
23+
# Setup
24+
handler = Mock()
25+
handler.list = Mock(return_value=['run1', 'run2'])
26+
expected_error = re.escape("Folder 'run3' does not exist in the results directory.")
27+
28+
# Run and Assert
29+
ResultsHandler._validate_folder_name(handler, 'run1')
30+
with pytest.raises(ValueError, match=expected_error):
31+
ResultsHandler._validate_folder_name(handler, 'run3')
32+
2133
def test__compute_wins(self):
2234
"""Test the `_compute_wins` method."""
2335
# Setup
@@ -184,6 +196,64 @@ def test_summarize(self):
184196
assert folder == folder_name
185197
pd.testing.assert_frame_equal(agg_result, aggregated_results)
186198

199+
def test_load_results(self):
200+
"""Test the `load_results` method."""
201+
# Setup
202+
folder_name = 'SDGym_results_07_15_2025'
203+
handler = Mock()
204+
handler._validate_folder_name = Mock()
205+
handler._get_results_files = Mock(return_value=['results.csv', 'results(1).csv'])
206+
result_1 = pd.DataFrame({
207+
'Dataset': ['A', 'B'],
208+
'Synthesizer': ['Synth1'] * 2,
209+
'Quality_Score': [0.5, 0.6],
210+
})
211+
result_2 = pd.DataFrame({
212+
'Dataset': ['A', 'B'],
213+
'Synthesizer': ['Synth2'] * 2,
214+
'Quality_Score': [0.7, 0.8],
215+
})
216+
result_list = [result_1, result_2]
217+
handler._get_results = Mock(return_value=result_list)
218+
219+
# Run
220+
results = ResultsHandler.load_results(handler, folder_name)
221+
222+
# Assert
223+
handler._validate_folder_name.assert_called_once_with(folder_name)
224+
expected_results = pd.concat(result_list, ignore_index=True)
225+
pd.testing.assert_frame_equal(results, expected_results)
226+
handler._get_results_files.assert_called_once_with(
227+
folder_name, prefix='results', suffix='.csv'
228+
)
229+
handler._get_results.assert_called_once_with(folder_name, ['results.csv', 'results(1).csv'])
230+
231+
def test_load_metainfo(self):
232+
"""Test the `load_metainfo` method."""
233+
# Setup
234+
folder_name = 'SDGym_results_07_15_2025'
235+
handler = Mock()
236+
handler._validate_folder_name = Mock()
237+
handler._get_results_files = Mock(return_value=['metainfo.yaml', 'metainfo(1).yaml'])
238+
yaml_content_1 = {'run_id': 'run_1', 'sdgym_version': '0.9.0'}
239+
yaml_content_2 = {'run_id': 'run_2', 'sdgym_version': '0.9.1'}
240+
handler._load_yaml_file = Mock(side_effect=[yaml_content_1, yaml_content_2])
241+
242+
# Run
243+
metainfo = ResultsHandler.load_metainfo(handler, folder_name)
244+
245+
# Assert
246+
handler._validate_folder_name.assert_called_once_with(folder_name)
247+
expected_metainfo = {
248+
'run_1': {'sdgym_version': '0.9.0'},
249+
'run_2': {'sdgym_version': '0.9.1'},
250+
}
251+
assert metainfo == expected_metainfo
252+
handler._get_results_files.assert_called_once_with(
253+
folder_name, prefix='metainfo', suffix='.yaml'
254+
)
255+
assert handler._load_yaml_file.call_count == 2
256+
187257

188258
class TestLocalResultsHandler:
189259
"""Unit tests for the LocalResultsHandler class."""

0 commit comments

Comments
 (0)