diff --git a/cognite/client/data_classes/simulators/routine_revisions.py b/cognite/client/data_classes/simulators/routine_revisions.py index 20e2c6c0e8..e7d62116e4 100644 --- a/cognite/client/data_classes/simulators/routine_revisions.py +++ b/cognite/client/data_classes/simulators/routine_revisions.py @@ -83,8 +83,13 @@ def _load( is_constant = resource.get("value") is_timeseries = resource.get("sourceExternalId") - type_ = "constant" if is_constant else "timeseries" if is_timeseries else None - if type_ is None: + if is_constant is not None and is_timeseries is not None: + raise ValueError("Invalid routine input, cannot contain both 'value' and 'sourceExternalId'") + elif is_constant is not None: + type_ = "constant" + elif is_timeseries is not None: + type_ = "timeseries" + else: return UnknownCogniteObject(resource) # type: ignore[return-value] input_class = _INPUT_CLASS_BY_TYPE.get(type_) if input_class is None: diff --git a/tests/tests_unit/test_data_classes/test_simulators.py b/tests/tests_unit/test_data_classes/test_simulators.py index 33c211680a..9b98789d09 100644 --- a/tests/tests_unit/test_data_classes/test_simulators.py +++ b/tests/tests_unit/test_data_classes/test_simulators.py @@ -11,6 +11,7 @@ from cognite.client.data_classes.simulators.routine_revisions import ( SimulationValueUnitInput, SimulatorRoutineConfiguration, + SimulatorRoutineInput, SimulatorRoutineInputConstant, SimulatorRoutineInputTimeseries, SimulatorRoutineOutput, @@ -489,3 +490,24 @@ def test_error_handling(self) -> None: SimulationRunWrite( routine_revision_external_id="routine_revision_external_id_1", ) + + +class TestSimulatorRoutineInput: + def test_load_zero_value(self) -> None: + routine_input = SimulatorRoutineInput._load( + {"name": "input", "referenceId": "input", "value": 0, "valueType": "DOUBLE"} + ) + assert isinstance(routine_input, SimulatorRoutineInputConstant) + assert routine_input.value == 0 + + def test_load_empty_string_source_external_id(self) -> None: + routine_input = SimulatorRoutineInput._load({"name": "input", "referenceId": "input", "sourceExternalId": ""}) + assert isinstance(routine_input, SimulatorRoutineInputTimeseries) + assert routine_input.source_external_id == "" + + def test_load_both_value_and_time_series(self) -> None: + with pytest.raises( + ValueError, + match="Invalid routine input, cannot contain both 'value' and 'sourceExternalId'", + ): + SimulatorRoutineInput._load({"name": "input", "referenceId": "input", "sourceExternalId": "", "value": 0})