Skip to content

Commit 2ec52ff

Browse files
committed
refactor:CheckResultIDs
1 parent a5c6876 commit 2ec52ff

File tree

2 files changed

+41
-5
lines changed

2 files changed

+41
-5
lines changed

nisystemlink/clients/testmonitor/utilities/_dataframe_utilities.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ def convert_results_to_dataframe(
1212
1313
Args:
1414
results: The list of results to be included in the dataframe.
15-
set_id_as_index: If true, result id will be set as index for the dataframe.
16-
If false, index will not be set.
15+
set_id_as_index: If true, and each result has id, result id will be set
16+
as index for the dataframe.
17+
Else, index will not be set.
1718
Default value is false.
1819
1920
Returns:
@@ -24,13 +25,15 @@ def convert_results_to_dataframe(
2425
- status: Split into status.status_type and status.status_name columns.
2526
- Properties: All the properties will be split into separate columns. For example,
2627
properties.property1, properties.property2, etc.
28+
Result ID will be set as index for the dataframe is set_id_as_index is true and
29+
each result has an ID.
2730
"""
2831
results_dict = [result.dict(exclude_none=True) for result in results]
2932
normalized_dataframe = pd.json_normalize(results_dict, sep=".")
3033
normalized_dataframe = __format_results_columns(
3134
results_dataframe=normalized_dataframe
3235
)
33-
if set_id_as_index:
36+
if set_id_as_index and all([result.id for result in results]):
3437
normalized_dataframe = normalized_dataframe.set_index("id")
3538

3639
return normalized_dataframe

tests/testmonitor/test_testmonitor_dataframe_utilities.py

Lines changed: 35 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ def results() -> List[Result]:
6565
2018, 5, 7, 18, 58, 5, 219692, tzinfo=datetime.timezone.utc
6666
),
6767
program_name="My Program Name",
68-
id=uuid.uuid1().hex,
68+
# id=uuid.uuid1().hex,
6969
file_ids=[uuid.uuid1().hex],
7070
status_type_summary={StatusType.PASSED: 0, StatusType.FAILED: 1},
7171
workspace=uuid.uuid1().hex,
@@ -139,6 +139,7 @@ def test__convert_results_with_specific_fields_to_dataframe__returns_results_dat
139139
def test__convert_results_to_dataframe_with_id_index__returns_results_dataframe_with_id_index(
140140
self, results
141141
):
142+
results = results[:2]
142143
expected_results_dataframe = self.get_expected_results_dataframe(
143144
results=results
144145
)
@@ -152,7 +153,7 @@ def test__convert_results_to_dataframe_with_id_index__returns_results_dataframe_
152153

153154
assert not results_dataframe.empty
154155
assert isinstance(results_dataframe, pd.DataFrame)
155-
assert len(results_dataframe) == 3
156+
assert len(results_dataframe) == 2
156157
assert len(results_dataframe.columns.tolist()) == 19
157158
assert results_index == expected_result_index
158159
pd.testing.assert_frame_equal(
@@ -169,6 +170,38 @@ def test__convert_results_to_dataframe_with_id_index__returns_results_dataframe_
169170
assert results_dataframe["keywords"].dtype == "object"
170171
assert isinstance(results_dataframe["keywords"].iloc[0], List)
171172

173+
def test__convert_results_to_dataframe_with_id_index_without_id_value__returns_results_dataframe_default_index(
174+
self, results
175+
):
176+
expected_results_dataframe = self.get_expected_results_dataframe(
177+
results=results
178+
)
179+
expected_result_index = [0, 1, 2]
180+
181+
results_dataframe = convert_results_to_dataframe(
182+
results=results, set_id_as_index=True
183+
)
184+
results_index = results_dataframe.index.to_list()
185+
186+
assert not results_dataframe.empty
187+
assert isinstance(results_dataframe, pd.DataFrame)
188+
assert len(results_dataframe) == 3
189+
assert len(results_dataframe.columns.tolist()) == 20
190+
assert results_index == expected_result_index
191+
pd.testing.assert_frame_equal(
192+
results_dataframe, expected_results_dataframe, check_dtype=True
193+
)
194+
assert results_dataframe["status.status_type"].dtype == "object"
195+
assert isinstance(results_dataframe["status.status_type"].iloc[0], StatusType)
196+
assert results_dataframe["started_at"].dtype == "datetime64[ns, UTC]"
197+
assert results_dataframe["updated_at"].dtype == "datetime64[ns, UTC]"
198+
assert results_dataframe["file_ids"].dtype == "object"
199+
assert isinstance(results_dataframe["file_ids"].iloc[0], List)
200+
assert results_dataframe["data_table_ids"].dtype == "object"
201+
assert isinstance(results_dataframe["data_table_ids"].iloc[0], List)
202+
assert results_dataframe["keywords"].dtype == "object"
203+
assert isinstance(results_dataframe["keywords"].iloc[0], List)
204+
172205
def test__convert_results_to_dataframe_with_no_results__returns_empty_dataframe(
173206
self,
174207
):

0 commit comments

Comments
 (0)