From a888d68b39c44e8a5208e36db3c2bee8d9abb865 Mon Sep 17 00:00:00 2001 From: Lou DeGenaro Date: Fri, 3 Jan 2025 09:10:21 -0500 Subject: [PATCH] simplify & improve test coverage Signed-off-by: Lou DeGenaro --- ...M_Db2_11_Benchmark_v1.1.0.snippet_merge.xlsx | Bin 0 -> 27520 bytes .../trestle/tasks/cis_xlsx_to_oscal_cd_test.py | 11 +++++++++++ trestle/tasks/cis_xlsx_to_oscal_cd.py | 9 +++------ 3 files changed, 14 insertions(+), 6 deletions(-) create mode 100644 tests/data/tasks/cis-xlsx-to-oscal-cd/CIS_IBM_Db2_11_Benchmark_v1.1.0.snippet_merge.xlsx diff --git a/tests/data/tasks/cis-xlsx-to-oscal-cd/CIS_IBM_Db2_11_Benchmark_v1.1.0.snippet_merge.xlsx b/tests/data/tasks/cis-xlsx-to-oscal-cd/CIS_IBM_Db2_11_Benchmark_v1.1.0.snippet_merge.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..3201c276831cc93b7855468e15ee1d6f1da0cbfd GIT binary patch literal 27520 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 UAtB$sHU|7-3?GIVcDK3z1!Y7|2mk;8 literal 0 HcmV?d00001 diff --git a/tests/trestle/tasks/cis_xlsx_to_oscal_cd_test.py b/tests/trestle/tasks/cis_xlsx_to_oscal_cd_test.py index 495f644fd..31debbf3e 100644 --- a/tests/trestle/tasks/cis_xlsx_to_oscal_cd_test.py +++ b/tests/trestle/tasks/cis_xlsx_to_oscal_cd_test.py @@ -83,6 +83,17 @@ def test_cis_xlsx_to_oscal_cd_execute_bad_overwrite(tmp_path: pathlib.Path): assert retval == TaskOutcome.FAILURE +def test_cis_xlsx_to_oscal_cd_execute_merge(tmp_path: pathlib.Path): + """Test execute call - merge.""" + section = _get_section(tmp_path, db2_config) + section['benchmark-file' + ] = 'tests/data/tasks/cis-xlsx-to-oscal-cd/CIS_IBM_Db2_11_Benchmark_v1.1.0.snippet_merge.xlsx' + tgt = cis_xlsx_to_oscal_cd.CisXlsxToOscalCd(section) + retval = tgt.execute() + assert retval == TaskOutcome.SUCCESS + _validate_db2(tmp_path) + + def _validate_db2(tmp_path: pathlib.Path): """Validate produced OSCAL for db2 cd.""" # read catalog diff --git a/trestle/tasks/cis_xlsx_to_oscal_cd.py b/trestle/tasks/cis_xlsx_to_oscal_cd.py index 8f584de76..ef189dc13 100644 --- a/trestle/tasks/cis_xlsx_to_oscal_cd.py +++ b/trestle/tasks/cis_xlsx_to_oscal_cd.py @@ -804,15 +804,12 @@ def heading_row_2(self) -> None: def _get_ctl_list(self, prev_row: int, curr_row: int) -> List[str]: """Get_ctl_list.""" + ctl_list = [] # if merged row, list is empty - if self.merge_row(prev_row, curr_row): - ctl_list = [] - else: + if not self.merge_row(prev_row, curr_row): # if non-rule row, list is empty rec_no = self.get(curr_row, head_recommendation_no) - if rec_no is None: - ctl_list = [] - else: + if rec_no is not None: # get list cis_controls = self.get(curr_row, 'CIS Controls') cis_control_helper = CisControlsHelper(cis_controls)