mirror of
https://github.com/sartography/spiff-arena.git
synced 2025-02-05 14:13:44 +00:00
fixed issue ensuring active tasks are up to date w/ burnettk cullerton
This commit is contained in:
parent
0eeb096d43
commit
b761f0289d
@ -1,8 +1,11 @@
|
|||||||
"""Get_env."""
|
"""Get_env."""
|
||||||
from typing import Any
|
from typing import Any
|
||||||
|
|
||||||
from flask_bpmn.models.db import db
|
from flask_bpmn.models.db import db
|
||||||
|
|
||||||
from spiffworkflow_backend.models.process_instance_metadata import ProcessInstanceMetadataModel
|
from spiffworkflow_backend.models.process_instance_metadata import (
|
||||||
|
ProcessInstanceMetadataModel,
|
||||||
|
)
|
||||||
from spiffworkflow_backend.models.script_attributes_context import (
|
from spiffworkflow_backend.models.script_attributes_context import (
|
||||||
ScriptAttributesContext,
|
ScriptAttributesContext,
|
||||||
)
|
)
|
||||||
@ -26,10 +29,14 @@ class SaveProcessInstanceMetadata(Script):
|
|||||||
metadata_dict = args[0]
|
metadata_dict = args[0]
|
||||||
for key, value in metadata_dict.items():
|
for key, value in metadata_dict.items():
|
||||||
pim = ProcessInstanceMetadataModel.query.filter_by(
|
pim = ProcessInstanceMetadataModel.query.filter_by(
|
||||||
process_instance_id=script_attributes_context.process_instance_id, key=key).first()
|
process_instance_id=script_attributes_context.process_instance_id,
|
||||||
|
key=key,
|
||||||
|
).first()
|
||||||
if pim is None:
|
if pim is None:
|
||||||
pim = ProcessInstanceMetadataModel(
|
pim = ProcessInstanceMetadataModel(
|
||||||
process_instance_id=script_attributes_context.process_instance_id, key=key)
|
process_instance_id=script_attributes_context.process_instance_id,
|
||||||
|
key=key,
|
||||||
|
)
|
||||||
pim.value = value
|
pim.value = value
|
||||||
db.session.add(pim)
|
db.session.add(pim)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
@ -626,7 +626,7 @@ class ProcessInstanceProcessor:
|
|||||||
for at in active_tasks:
|
for at in active_tasks:
|
||||||
if at.task_id == str(ready_or_waiting_task.id):
|
if at.task_id == str(ready_or_waiting_task.id):
|
||||||
active_task = at
|
active_task = at
|
||||||
active_tasks.pop(at)
|
active_tasks.remove(at)
|
||||||
|
|
||||||
if active_task is None:
|
if active_task is None:
|
||||||
active_task = ActiveTaskModel(
|
active_task = ActiveTaskModel(
|
||||||
@ -644,12 +644,14 @@ class ProcessInstanceProcessor:
|
|||||||
db.session.add(active_task)
|
db.session.add(active_task)
|
||||||
db.session.commit()
|
db.session.commit()
|
||||||
|
|
||||||
for potential_owner_id in potential_owner_hash["potential_owner_ids"]:
|
for potential_owner_id in potential_owner_hash[
|
||||||
active_task_user = ActiveTaskUserModel(
|
"potential_owner_ids"
|
||||||
user_id=potential_owner_id, active_task_id=active_task.id
|
]:
|
||||||
)
|
active_task_user = ActiveTaskUserModel(
|
||||||
db.session.add(active_task_user)
|
user_id=potential_owner_id, active_task_id=active_task.id
|
||||||
db.session.commit()
|
)
|
||||||
|
db.session.add(active_task_user)
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
if len(active_tasks) > 0:
|
if len(active_tasks) > 0:
|
||||||
for at in active_tasks:
|
for at in active_tasks:
|
||||||
|
@ -4,7 +4,9 @@ from flask.testing import FlaskClient
|
|||||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||||
|
|
||||||
from spiffworkflow_backend.models.process_instance_metadata import ProcessInstanceMetadataModel
|
from spiffworkflow_backend.models.process_instance_metadata import (
|
||||||
|
ProcessInstanceMetadataModel,
|
||||||
|
)
|
||||||
from spiffworkflow_backend.models.user import UserModel
|
from spiffworkflow_backend.models.user import UserModel
|
||||||
from spiffworkflow_backend.services.process_instance_processor import (
|
from spiffworkflow_backend.services.process_instance_processor import (
|
||||||
ProcessInstanceProcessor,
|
ProcessInstanceProcessor,
|
||||||
@ -38,5 +40,6 @@ class TestSaveProcessInstanceMetadata(BaseTest):
|
|||||||
processor.do_engine_steps(save=True)
|
processor.do_engine_steps(save=True)
|
||||||
|
|
||||||
process_instance_metadata = ProcessInstanceMetadataModel.query.filter_by(
|
process_instance_metadata = ProcessInstanceMetadataModel.query.filter_by(
|
||||||
process_instance_id=process_instance.id).all()
|
process_instance_id=process_instance.id
|
||||||
|
).all()
|
||||||
assert len(process_instance_metadata) == 3
|
assert len(process_instance_metadata) == 3
|
||||||
|
@ -161,6 +161,7 @@ class TestProcessInstanceProcessor(BaseTest):
|
|||||||
)
|
)
|
||||||
processor = ProcessInstanceProcessor(process_instance)
|
processor = ProcessInstanceProcessor(process_instance)
|
||||||
processor.do_engine_steps(save=True)
|
processor.do_engine_steps(save=True)
|
||||||
|
processor.save()
|
||||||
|
|
||||||
assert len(process_instance.active_tasks) == 1
|
assert len(process_instance.active_tasks) == 1
|
||||||
active_task = process_instance.active_tasks[0]
|
active_task = process_instance.active_tasks[0]
|
||||||
@ -241,3 +242,42 @@ class TestProcessInstanceProcessor(BaseTest):
|
|||||||
)
|
)
|
||||||
|
|
||||||
assert process_instance.status == ProcessInstanceStatus.complete.value
|
assert process_instance.status == ProcessInstanceStatus.complete.value
|
||||||
|
|
||||||
|
def test_does_not_recreate_active_tasks_on_multiple_saves(
|
||||||
|
self,
|
||||||
|
app: Flask,
|
||||||
|
client: FlaskClient,
|
||||||
|
with_db_and_bpmn_file_cleanup: None,
|
||||||
|
with_super_admin_user: UserModel,
|
||||||
|
) -> None:
|
||||||
|
"""Test_sets_permission_correctly_on_active_task_when_using_dict."""
|
||||||
|
self.create_process_group(
|
||||||
|
client, with_super_admin_user, "test_group", "test_group"
|
||||||
|
)
|
||||||
|
initiator_user = self.find_or_create_user("initiator_user")
|
||||||
|
finance_user_three = self.find_or_create_user("testuser3")
|
||||||
|
assert initiator_user.principal is not None
|
||||||
|
assert finance_user_three.principal is not None
|
||||||
|
AuthorizationService.import_permissions_from_yaml_file()
|
||||||
|
|
||||||
|
finance_group = GroupModel.query.filter_by(identifier="Finance Team").first()
|
||||||
|
assert finance_group is not None
|
||||||
|
|
||||||
|
process_model = load_test_spec(
|
||||||
|
process_model_id="test_group/model_with_lanes",
|
||||||
|
bpmn_file_name="lanes_with_owner_dict.bpmn",
|
||||||
|
process_model_source_directory="model_with_lanes",
|
||||||
|
)
|
||||||
|
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 len(process_instance.active_tasks) == 1
|
||||||
|
initial_active_task_id = process_instance.active_tasks[0].id
|
||||||
|
|
||||||
|
# save again to ensure we go attempt to process the active tasks again
|
||||||
|
processor.save()
|
||||||
|
|
||||||
|
assert len(process_instance.active_tasks) == 1
|
||||||
|
assert initial_active_task_id == process_instance.active_tasks[0].id
|
||||||
|
Loading…
x
Reference in New Issue
Block a user