From 592c4fc49c86f4bddaa1ca0cb0ac2f2e6c3167cc Mon Sep 17 00:00:00 2001 From: jasquat Date: Mon, 31 Oct 2022 11:39:54 -0400 Subject: [PATCH] added script to get the group members w/ burnettk --- .../src/spiffworkflow_backend/models/group.py | 4 ++ .../{get_user.py => get_current_user.py} | 0 .../scripts/get_group_members.py | 32 ++++++++++++ .../get_group_members/get_group_members.bpmn | 52 +++++++++++++++++++ .../lanes_with_owner_dict.bpmn | 2 +- .../scripts/test_get_group_members.py | 49 +++++++++++++++++ 6 files changed, 138 insertions(+), 1 deletion(-) rename spiffworkflow-backend/src/spiffworkflow_backend/scripts/{get_user.py => get_current_user.py} (100%) create mode 100644 spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_group_members.py create mode 100644 spiffworkflow-backend/tests/data/get_group_members/get_group_members.bpmn create mode 100644 spiffworkflow-backend/tests/spiffworkflow_backend/scripts/test_get_group_members.py diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/models/group.py b/spiffworkflow-backend/src/spiffworkflow_backend/models/group.py index b8928d73..3b7edd6c 100644 --- a/spiffworkflow-backend/src/spiffworkflow_backend/models/group.py +++ b/spiffworkflow-backend/src/spiffworkflow_backend/models/group.py @@ -14,6 +14,10 @@ if TYPE_CHECKING: from spiffworkflow_backend.models.user import UserModel # noqa: F401 +class GroupNotFoundError(Exception): + """GroupNotFoundError.""" + + class GroupModel(FlaskBpmnGroupModel): """GroupModel.""" diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_user.py b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_current_user.py similarity index 100% rename from spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_user.py rename to spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_current_user.py diff --git a/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_group_members.py b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_group_members.py new file mode 100644 index 00000000..3124c9f3 --- /dev/null +++ b/spiffworkflow-backend/src/spiffworkflow_backend/scripts/get_group_members.py @@ -0,0 +1,32 @@ +"""Get_env.""" +from typing import Any +from spiffworkflow_backend.models.group import GroupModel, GroupNotFoundError + +from spiffworkflow_backend.models.script_attributes_context import ( + ScriptAttributesContext, +) +from spiffworkflow_backend.scripts.script import Script + + +class GetGroupMembers(Script): + """GetGroupMembers.""" + + def get_description(self) -> str: + """Get_description.""" + return """Return the current user.""" + + def run( + self, + script_attributes_context: ScriptAttributesContext, + *args: Any, + **kwargs: Any + ) -> Any: + """Run.""" + group_identifier = args[0] + group = GroupModel.query.filter_by(identifier=group_identifier).first() + if group is None: + raise GroupNotFoundError( + f"Script 'get_group_members' could not find group with identifier '{group_identifier}'.") + + usernames = [u.username for u in group.users] + return usernames diff --git a/spiffworkflow-backend/tests/data/get_group_members/get_group_members.bpmn b/spiffworkflow-backend/tests/data/get_group_members/get_group_members.bpmn new file mode 100644 index 00000000..23f6df07 --- /dev/null +++ b/spiffworkflow-backend/tests/data/get_group_members/get_group_members.bpmn @@ -0,0 +1,52 @@ + + + + + Flow_1j4jzft + + + + Flow_01xr2ac + + + Flow_1j4jzft + Flow_10xyk22 + members_a = get_group_members("GroupA") + + + + Flow_10xyk22 + Flow_01xr2ac + members_b = get_group_members("GroupB") + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/spiffworkflow-backend/tests/data/model_with_lanes/lanes_with_owner_dict.bpmn b/spiffworkflow-backend/tests/data/model_with_lanes/lanes_with_owner_dict.bpmn index 2b89acb0..1a6b52cb 100644 --- a/spiffworkflow-backend/tests/data/model_with_lanes/lanes_with_owner_dict.bpmn +++ b/spiffworkflow-backend/tests/data/model_with_lanes/lanes_with_owner_dict.bpmn @@ -81,7 +81,7 @@ Flow_0bgkfue Flow_1ivhu7x - approver = get_user() + approver = get_current_user() lane_owners["Finance Team"].remove(approver) diff --git a/spiffworkflow-backend/tests/spiffworkflow_backend/scripts/test_get_group_members.py b/spiffworkflow-backend/tests/spiffworkflow_backend/scripts/test_get_group_members.py new file mode 100644 index 00000000..ee6204a7 --- /dev/null +++ b/spiffworkflow-backend/tests/spiffworkflow_backend/scripts/test_get_group_members.py @@ -0,0 +1,49 @@ +"""Test_get_localtime.""" +from spiffworkflow_backend.services.user_service import UserService +from flask_bpmn.models.db import db +from spiffworkflow_backend.models.group import GroupModel + +from flask.app import Flask +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, +) + + +class TestGetGroupMembers(BaseTest): + """TestGetGroupMembers.""" + + def test_can_get_members_of_a_group( + self, + app: Flask, + with_db_and_bpmn_file_cleanup: None, + ) -> None: + """Test_can_get_members_of_a_group.""" + initiator_user = self.find_or_create_user("initiator_user") + testuser1 = self.find_or_create_user("testuser1") + testuser2 = self.find_or_create_user("testuser2") + testuser3 = self.find_or_create_user("testuser3") + groupA = GroupModel(identifier="groupA") + groupB = GroupModel(identifier="groupB") + db.session.add(groupA) + db.session.add(groupB) + db.session.commit() + + UserService.add_user_to_group(testuser1, groupA) + UserService.add_user_to_group(testuser2, groupA) + UserService.add_user_to_group(testuser3, groupB) + + process_model = load_test_spec( + process_model_id="get_group_members", bpmn_file_name="get_group_members.bpmn" + ) + process_instance = self.create_process_instance_from_process_model( + process_model=process_model, user=initiator_user + ) + processor = ProcessInstanceProcessor(process_instance) + processor.do_engine_steps(save=True) + + assert processor.bpmn_process_instance.data + assert processor.bpmn_process_instance.data['members_a'] == ['testuser1', 'testuser2'] + assert processor.bpmn_process_instance.data['members_b'] == ['testuser3']