From 287d10494e7e391b4ce5ea6c5c7c8250854eaeaf Mon Sep 17 00:00:00 2001 From: burnettk Date: Thu, 20 Oct 2022 07:14:30 -0400 Subject: [PATCH] only do startswith when it is a string --- .../services/service_task_service.py | 25 +++++++------ .../unit/test_service_task_delegate.py | 37 +++++++++++++++++++ 2 files changed, 50 insertions(+), 12 deletions(-) create mode 100644 tests/spiffworkflow_backend/unit/test_service_task_delegate.py diff --git a/src/spiffworkflow_backend/services/service_task_service.py b/src/spiffworkflow_backend/services/service_task_service.py index 7b712a17..1c30da99 100644 --- a/src/spiffworkflow_backend/services/service_task_service.py +++ b/src/spiffworkflow_backend/services/service_task_service.py @@ -27,19 +27,20 @@ class ServiceTaskDelegate: if isinstance(value, dict): value = json.dumps(value) - secret_prefix = "secret:" # noqa: S105 - if value.startswith(secret_prefix): - key = value.removeprefix(secret_prefix) - secret = SecretService().get_secret(key) - assert secret # noqa: S101 - return secret.value + if isinstance(value, str): + secret_prefix = "secret:" # noqa: S105 + if value.startswith(secret_prefix): + key = value.removeprefix(secret_prefix) + secret = SecretService().get_secret(key) + assert secret # noqa: S101 + return secret.value - file_prefix = "file:" - if value.startswith(file_prefix): - file_name = value.removeprefix(file_prefix) - full_path = FileSystemService.full_path_from_relative_path(file_name) - with open(full_path) as f: - return f.read() + file_prefix = "file:" + if value.startswith(file_prefix): + file_name = value.removeprefix(file_prefix) + full_path = FileSystemService.full_path_from_relative_path(file_name) + with open(full_path) as f: + return f.read() return value diff --git a/tests/spiffworkflow_backend/unit/test_service_task_delegate.py b/tests/spiffworkflow_backend/unit/test_service_task_delegate.py new file mode 100644 index 00000000..fd87982b --- /dev/null +++ b/tests/spiffworkflow_backend/unit/test_service_task_delegate.py @@ -0,0 +1,37 @@ +"""Test_various_bpmn_constructs.""" +from flask.app import Flask +from spiffworkflow_backend.services.secret_service import SecretService +from spiffworkflow_backend.services.service_task_service import ServiceTaskDelegate +from spiffworkflow_backend.services.user_service import UserService +from tests.spiffworkflow_backend.helpers.base_test import BaseTest +from tests.spiffworkflow_backend.helpers.test_data import load_test_spec + +from spiffworkflow_backend.services.process_instance_processor import ( + ProcessInstanceProcessor, +) +from spiffworkflow_backend.services.process_instance_service import ( + ProcessInstanceService, +) + + +class TestServiceTaskDelegate(BaseTest): + + def test_normalize_value_without_secret( + self, app: Flask, with_db_and_bpmn_file_cleanup: None + ) -> None: + result = ServiceTaskDelegate.normalize_value("hey") + assert result == "hey" + + def test_normalize_value_with_int( + self, app: Flask, with_db_and_bpmn_file_cleanup: None + ) -> None: + result = ServiceTaskDelegate.normalize_value(1) + assert result == 1 + + def test_normalize_value_with_secret( + self, app: Flask, with_db_and_bpmn_file_cleanup: None + ) -> None: + user = self.find_or_create_user("test_user") + SecretService().add_secret("hot_secret", "my_secret_value", user.id) + result = ServiceTaskDelegate.normalize_value("secret:hot_secret") + assert result == "my_secret_value"