Squashed 'spiffworkflow-backend/' changes from 1591ba436..9e3112960
9e3112960 added script to get the frontend url w/ burnettk c44a11c63 Update get_group_members.py 00fe96cd6 added script to get the group members w/ burnettk git-subtree-dir: spiffworkflow-backend git-subtree-split: 9e3112960cf05d373f3573b00b4337c2d610c3a3
This commit is contained in:
parent
5f2eab770c
commit
1846179eca
|
@ -14,6 +14,10 @@ if TYPE_CHECKING:
|
||||||
from spiffworkflow_backend.models.user import UserModel # noqa: F401
|
from spiffworkflow_backend.models.user import UserModel # noqa: F401
|
||||||
|
|
||||||
|
|
||||||
|
class GroupNotFoundError(Exception):
|
||||||
|
"""GroupNotFoundError."""
|
||||||
|
|
||||||
|
|
||||||
class GroupModel(FlaskBpmnGroupModel):
|
class GroupModel(FlaskBpmnGroupModel):
|
||||||
"""GroupModel."""
|
"""GroupModel."""
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
"""Get_env."""
|
||||||
|
from typing import Any
|
||||||
|
from flask import current_app
|
||||||
|
|
||||||
|
from spiffworkflow_backend.models.script_attributes_context import (
|
||||||
|
ScriptAttributesContext,
|
||||||
|
)
|
||||||
|
from spiffworkflow_backend.scripts.script import Script
|
||||||
|
|
||||||
|
|
||||||
|
class GetFrontendUrl(Script):
|
||||||
|
"""GetFrontendUrl."""
|
||||||
|
|
||||||
|
def get_description(self) -> str:
|
||||||
|
"""Get_description."""
|
||||||
|
return """Return the url to the frontend."""
|
||||||
|
|
||||||
|
def run(
|
||||||
|
self,
|
||||||
|
script_attributes_context: ScriptAttributesContext,
|
||||||
|
*args: Any,
|
||||||
|
**kwargs: Any
|
||||||
|
) -> Any:
|
||||||
|
"""Run."""
|
||||||
|
return current_app.config['SPIFFWORKFLOW_FRONTEND_URL']
|
|
@ -0,0 +1,34 @@
|
||||||
|
"""Get_env."""
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
|
from spiffworkflow_backend.models.group import 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 list of usernames of the users in the given group."""
|
||||||
|
|
||||||
|
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
|
|
@ -0,0 +1,52 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_96f6665" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.0.0-dev">
|
||||||
|
<bpmn:process id="test_groups" isExecutable="true">
|
||||||
|
<bpmn:startEvent id="Event_0r6oru6">
|
||||||
|
<bpmn:outgoing>Flow_1j4jzft</bpmn:outgoing>
|
||||||
|
</bpmn:startEvent>
|
||||||
|
<bpmn:sequenceFlow id="Flow_1j4jzft" sourceRef="Event_0r6oru6" targetRef="get_group_a" />
|
||||||
|
<bpmn:endEvent id="Event_1s123jg">
|
||||||
|
<bpmn:incoming>Flow_01xr2ac</bpmn:incoming>
|
||||||
|
</bpmn:endEvent>
|
||||||
|
<bpmn:scriptTask id="get_group_a">
|
||||||
|
<bpmn:incoming>Flow_1j4jzft</bpmn:incoming>
|
||||||
|
<bpmn:outgoing>Flow_10xyk22</bpmn:outgoing>
|
||||||
|
<bpmn:script>members_a = get_group_members("GroupA")</bpmn:script>
|
||||||
|
</bpmn:scriptTask>
|
||||||
|
<bpmn:sequenceFlow id="Flow_10xyk22" sourceRef="get_group_a" targetRef="get_group_b" />
|
||||||
|
<bpmn:scriptTask id="get_group_b">
|
||||||
|
<bpmn:incoming>Flow_10xyk22</bpmn:incoming>
|
||||||
|
<bpmn:outgoing>Flow_01xr2ac</bpmn:outgoing>
|
||||||
|
<bpmn:script>members_b = get_group_members("GroupB")</bpmn:script>
|
||||||
|
</bpmn:scriptTask>
|
||||||
|
<bpmn:sequenceFlow id="Flow_01xr2ac" sourceRef="get_group_b" targetRef="Event_1s123jg" />
|
||||||
|
</bpmn:process>
|
||||||
|
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
|
||||||
|
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="test_groups">
|
||||||
|
<bpmndi:BPMNShape id="Event_0r6oru6_di" bpmnElement="Event_0r6oru6">
|
||||||
|
<dc:Bounds x="162" y="162" width="36" height="36" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_0zfzev2_di" bpmnElement="get_group_a">
|
||||||
|
<dc:Bounds x="250" y="140" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Activity_0d1q8x4_di" bpmnElement="get_group_b">
|
||||||
|
<dc:Bounds x="410" y="140" width="100" height="80" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNShape id="Event_1s123jg_di" bpmnElement="Event_1s123jg">
|
||||||
|
<dc:Bounds x="582" y="162" width="36" height="36" />
|
||||||
|
</bpmndi:BPMNShape>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_1j4jzft_di" bpmnElement="Flow_1j4jzft">
|
||||||
|
<di:waypoint x="198" y="180" />
|
||||||
|
<di:waypoint x="250" y="180" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_10xyk22_di" bpmnElement="Flow_10xyk22">
|
||||||
|
<di:waypoint x="350" y="180" />
|
||||||
|
<di:waypoint x="410" y="180" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
<bpmndi:BPMNEdge id="Flow_01xr2ac_di" bpmnElement="Flow_01xr2ac">
|
||||||
|
<di:waypoint x="510" y="180" />
|
||||||
|
<di:waypoint x="582" y="180" />
|
||||||
|
</bpmndi:BPMNEdge>
|
||||||
|
</bpmndi:BPMNPlane>
|
||||||
|
</bpmndi:BPMNDiagram>
|
||||||
|
</bpmn:definitions>
|
|
@ -81,7 +81,7 @@
|
||||||
<bpmn:scriptTask id="Activity_1s1855p" scriptFormat="python">
|
<bpmn:scriptTask id="Activity_1s1855p" scriptFormat="python">
|
||||||
<bpmn:incoming>Flow_0bgkfue</bpmn:incoming>
|
<bpmn:incoming>Flow_0bgkfue</bpmn:incoming>
|
||||||
<bpmn:outgoing>Flow_1ivhu7x</bpmn:outgoing>
|
<bpmn:outgoing>Flow_1ivhu7x</bpmn:outgoing>
|
||||||
<bpmn:script>approver = get_user()
|
<bpmn:script>approver = get_current_user()
|
||||||
lane_owners["Finance Team"].remove(approver)</bpmn:script>
|
lane_owners["Finance Team"].remove(approver)</bpmn:script>
|
||||||
</bpmn:scriptTask>
|
</bpmn:scriptTask>
|
||||||
</bpmn:process>
|
</bpmn:process>
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
"""Test_get_localtime."""
|
||||||
|
from flask.app import Flask
|
||||||
|
from flask_bpmn.models.db import db
|
||||||
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
|
from spiffworkflow_backend.models.group import GroupModel
|
||||||
|
from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
|
ProcessInstanceProcessor,
|
||||||
|
)
|
||||||
|
from spiffworkflow_backend.services.user_service import UserService
|
||||||
|
|
||||||
|
|
||||||
|
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")
|
||||||
|
group_a = GroupModel(identifier="groupA")
|
||||||
|
group_b = GroupModel(identifier="groupB")
|
||||||
|
db.session.add(group_a)
|
||||||
|
db.session.add(group_b)
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
UserService.add_user_to_group(testuser1, group_a)
|
||||||
|
UserService.add_user_to_group(testuser2, group_a)
|
||||||
|
UserService.add_user_to_group(testuser3, group_b)
|
||||||
|
|
||||||
|
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"]
|
Loading…
Reference in New Issue