diff --git a/cdisc_rules_engine/operations/codelist_extensible.py b/cdisc_rules_engine/operations/codelist_extensible.py index 1e7d91af3..62cd7b56f 100644 --- a/cdisc_rules_engine/operations/codelist_extensible.py +++ b/cdisc_rules_engine/operations/codelist_extensible.py @@ -26,6 +26,12 @@ def _handle_multiple_versions(self) -> pd.Series: self.params.ct_package_type, unique_ct_versions ) ct_df = self.evaluation_dataset.__class__.from_dict(ct_data) + ct_df = ct_df.astype( + { + "version": "string", + "codelist_code": "string", + } + ) if self.params.codelist_code in self.evaluation_dataset.columns: is_extensible = self.evaluation_dataset.merge( ct_df.data, diff --git a/cdisc_rules_engine/operations/codelist_terms.py b/cdisc_rules_engine/operations/codelist_terms.py index 39707c3da..90a0a6d18 100644 --- a/cdisc_rules_engine/operations/codelist_terms.py +++ b/cdisc_rules_engine/operations/codelist_terms.py @@ -58,6 +58,12 @@ def _handle_multiple_versions(self) -> pd.Series: self.params.ct_package_type, unique_ct_versions ) ct_df = self.evaluation_dataset.__class__.from_dict(ct_data) + ct_df = ct_df.astype( + { + "version": "string", + "codelist_code": "string", + } + ) if self.params.codelist_code in self.evaluation_dataset.columns: result = self.evaluation_dataset.merge( ct_df.data, diff --git a/tests/unit/test_operations/test_codelist_extensible.py b/tests/unit/test_operations/test_codelist_extensible.py index 38739ea8d..425a00d76 100644 --- a/tests/unit/test_operations/test_codelist_extensible.py +++ b/tests/unit/test_operations/test_codelist_extensible.py @@ -124,32 +124,44 @@ def test_empty_metadata(operation_params): @mark.parametrize( - "package_type, codelist_code, expected", + "package_type, codelist_code, versions, codelist_codes, expected", [ ( "mock_package", "codelist_code", + ["v1", "v2", "v3"], + ["C1", "C2", "C3"], [True, False, None], ), ( "mock_package", "C1", + ["v1", "v2", "v3"], + ["C1", "C2", "C3"], [True, True, True], ), ( "missing_package", "codelist_code", + ["v1", "v2", "v3"], + ["C1", "C2", "C3"], [None, None, None], ), + ("mock_package", "codelist_code", [], [], []), ], ) def test_multiple_versions( - operation_params, mock_metadata, package_type, codelist_code, expected + operation_params, + mock_metadata, + package_type, + codelist_code, + versions, + codelist_codes, + expected, ): operation_params.ct_package_type = package_type operation_params.ct_version = "version" operation_params.codelist_code = codelist_code - versions = ["v1", "v2", "v3"] library_metadata = LibraryMetadataContainer() for version in versions: @@ -157,7 +169,7 @@ def test_multiple_versions( library_metadata._ct_package_metadata = mock_metadata evaluation_dataset = PandasDataset.from_dict( - {"version": versions, "codelist_code": ["C1", "C2", "C3"]} + {"version": versions, "codelist_code": codelist_codes} ) operation = CodelistExtensible( diff --git a/tests/unit/test_operations/test_codelist_terms.py b/tests/unit/test_operations/test_codelist_terms.py index cf27e7f14..d0fb1811c 100644 --- a/tests/unit/test_operations/test_codelist_terms.py +++ b/tests/unit/test_operations/test_codelist_terms.py @@ -323,3 +323,39 @@ def test_multiple_versions( except RuleExecutionError: result = pd.Series(RuleExecutionError) assert result.equals(pd.Series(expected)) + + +def test_empty_dataset_multiple_versions( + operation_params, + mock_metadata, +): + operation_params.ct_package_type = "mock_package" + operation_params.ct_version = "version" + operation_params.codelist_code = "codelist_code" + operation_params.term_code = "t_code" + operation_params.term_value = None + operation_params.term_pref_term = None + operation_params.returntype = None + + library_metadata = LibraryMetadataContainer() + library_metadata._ct_package_metadata = mock_metadata + + evaluation_dataset = PandasDataset.from_dict( + { + "version": [], + "codelist_code": [], + "t_code": [], + "t_value": [], + "t_pref_term": [], + } + ) + + operation = CodelistTerms( + operation_params, + evaluation_dataset, + MagicMock(), + MagicMock(), + library_metadata, + ) + result = operation._execute_operation() + assert result.tolist() == []