delete human tasks when process instance is deleted w/ burnettk
This commit is contained in:
parent
6e4b137790
commit
b62d9f8867
|
@ -1,3 +1,5 @@
|
||||||
|
from __future__ import with_statement
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
from logging.config import fileConfig
|
from logging.config import fileConfig
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
"""empty message
|
"""empty message
|
||||||
|
|
||||||
Revision ID: b7face8078df
|
Revision ID: 907bcf0c3d75
|
||||||
Revises:
|
Revises:
|
||||||
Create Date: 2022-12-22 21:12:03.739025
|
Create Date: 2022-12-28 13:52:13.030028
|
||||||
|
|
||||||
"""
|
"""
|
||||||
from alembic import op
|
from alembic import op
|
||||||
|
@ -10,7 +10,7 @@ import sqlalchemy as sa
|
||||||
|
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision = 'b7face8078df'
|
revision = '907bcf0c3d75'
|
||||||
down_revision = None
|
down_revision = None
|
||||||
branch_labels = None
|
branch_labels = None
|
||||||
depends_on = None
|
depends_on = None
|
|
@ -60,10 +60,15 @@ class ProcessInstanceModel(SpiffworkflowBaseDBModel):
|
||||||
process_initiator_id: int = db.Column(ForeignKey(UserModel.id), nullable=False)
|
process_initiator_id: int = db.Column(ForeignKey(UserModel.id), nullable=False)
|
||||||
process_initiator = relationship("UserModel")
|
process_initiator = relationship("UserModel")
|
||||||
|
|
||||||
|
active_human_tasks = relationship(
|
||||||
|
"HumanTaskModel",
|
||||||
|
primaryjoin="and_(HumanTaskModel.process_instance_id==ProcessInstanceModel.id, HumanTaskModel.completed == False)",
|
||||||
|
) # type: ignore
|
||||||
|
|
||||||
human_tasks = relationship(
|
human_tasks = relationship(
|
||||||
"HumanTaskModel",
|
"HumanTaskModel",
|
||||||
cascade="delete",
|
cascade="delete",
|
||||||
primaryjoin="and_(HumanTaskModel.process_instance_id==ProcessInstanceModel.id, HumanTaskModel.completed == False)",
|
overlaps="active_human_tasks",
|
||||||
) # type: ignore
|
) # type: ignore
|
||||||
message_instances = relationship("MessageInstanceModel", cascade="delete") # type: ignore
|
message_instances = relationship("MessageInstanceModel", cascade="delete") # type: ignore
|
||||||
message_correlations = relationship("MessageCorrelationModel", cascade="delete") # type: ignore
|
message_correlations = relationship("MessageCorrelationModel", cascade="delete") # type: ignore
|
||||||
|
|
|
@ -68,7 +68,7 @@ class TestGetLocaltime(BaseTest):
|
||||||
processor = ProcessInstanceProcessor(process_instance)
|
processor = ProcessInstanceProcessor(process_instance)
|
||||||
|
|
||||||
processor.do_engine_steps(save=True)
|
processor.do_engine_steps(save=True)
|
||||||
human_task = process_instance.human_tasks[0]
|
human_task = process_instance.active_human_tasks[0]
|
||||||
spiff_task = processor.__class__.get_task_by_bpmn_identifier(
|
spiff_task = processor.__class__.get_task_by_bpmn_identifier(
|
||||||
human_task.task_name, processor.bpmn_process_instance
|
human_task.task_name, processor.bpmn_process_instance
|
||||||
)
|
)
|
||||||
|
@ -81,7 +81,7 @@ class TestGetLocaltime(BaseTest):
|
||||||
human_task,
|
human_task,
|
||||||
)
|
)
|
||||||
|
|
||||||
human_task = process_instance.human_tasks[0]
|
human_task = process_instance.active_human_tasks[0]
|
||||||
spiff_task = processor.__class__.get_task_by_bpmn_identifier(
|
spiff_task = processor.__class__.get_task_by_bpmn_identifier(
|
||||||
human_task.task_name, processor.bpmn_process_instance
|
human_task.task_name, processor.bpmn_process_instance
|
||||||
)
|
)
|
||||||
|
|
|
@ -125,7 +125,7 @@ class TestAuthorizationService(BaseTest):
|
||||||
)
|
)
|
||||||
processor = ProcessInstanceProcessor(process_instance)
|
processor = ProcessInstanceProcessor(process_instance)
|
||||||
processor.do_engine_steps(save=True)
|
processor.do_engine_steps(save=True)
|
||||||
human_task = process_instance.human_tasks[0]
|
human_task = process_instance.active_human_tasks[0]
|
||||||
spiff_task = processor.__class__.get_task_by_bpmn_identifier(
|
spiff_task = processor.__class__.get_task_by_bpmn_identifier(
|
||||||
human_task.task_name, processor.bpmn_process_instance
|
human_task.task_name, processor.bpmn_process_instance
|
||||||
)
|
)
|
||||||
|
@ -133,7 +133,7 @@ class TestAuthorizationService(BaseTest):
|
||||||
processor, spiff_task, {}, initiator_user, human_task
|
processor, spiff_task, {}, initiator_user, human_task
|
||||||
)
|
)
|
||||||
|
|
||||||
human_task = process_instance.human_tasks[0]
|
human_task = process_instance.active_human_tasks[0]
|
||||||
spiff_task = processor.__class__.get_task_by_bpmn_identifier(
|
spiff_task = processor.__class__.get_task_by_bpmn_identifier(
|
||||||
human_task.task_name, processor.bpmn_process_instance
|
human_task.task_name, processor.bpmn_process_instance
|
||||||
)
|
)
|
||||||
|
|
|
@ -31,10 +31,14 @@ class TestProcessInstanceProcessor(BaseTest):
|
||||||
with_db_and_bpmn_file_cleanup: None,
|
with_db_and_bpmn_file_cleanup: None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_script_engine_takes_data_and_returns_expected_results."""
|
"""Test_script_engine_takes_data_and_returns_expected_results."""
|
||||||
|
app.config["THREAD_LOCAL_DATA"].process_model_identifier = 'hey'
|
||||||
|
app.config["THREAD_LOCAL_DATA"].process_instance_id = 0
|
||||||
script_engine = ProcessInstanceProcessor._script_engine
|
script_engine = ProcessInstanceProcessor._script_engine
|
||||||
|
|
||||||
result = script_engine._evaluate("a", {"a": 1})
|
result = script_engine._evaluate("a", {"a": 1})
|
||||||
assert result == 1
|
assert result == 1
|
||||||
|
app.config["THREAD_LOCAL_DATA"].process_model_identifier = None
|
||||||
|
app.config["THREAD_LOCAL_DATA"].process_instance_id = None
|
||||||
|
|
||||||
def test_script_engine_can_use_custom_scripts(
|
def test_script_engine_can_use_custom_scripts(
|
||||||
self,
|
self,
|
||||||
|
@ -42,12 +46,16 @@ class TestProcessInstanceProcessor(BaseTest):
|
||||||
with_db_and_bpmn_file_cleanup: None,
|
with_db_and_bpmn_file_cleanup: None,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Test_script_engine_takes_data_and_returns_expected_results."""
|
"""Test_script_engine_takes_data_and_returns_expected_results."""
|
||||||
|
app.config["THREAD_LOCAL_DATA"].process_model_identifier = 'hey'
|
||||||
|
app.config["THREAD_LOCAL_DATA"].process_instance_id = 0
|
||||||
script_engine = ProcessInstanceProcessor._script_engine
|
script_engine = ProcessInstanceProcessor._script_engine
|
||||||
result = script_engine._evaluate("fact_service(type='norris')", {})
|
result = script_engine._evaluate("fact_service(type='norris')", {})
|
||||||
assert (
|
assert (
|
||||||
result
|
result
|
||||||
== "Chuck Norris doesn’t read books. He stares them down until he gets the information he wants."
|
== "Chuck Norris doesn’t read books. He stares them down until he gets the information he wants."
|
||||||
)
|
)
|
||||||
|
app.config["THREAD_LOCAL_DATA"].process_model_identifier = None
|
||||||
|
app.config["THREAD_LOCAL_DATA"].process_instance_id = None
|
||||||
|
|
||||||
def test_sets_permission_correctly_on_human_task(
|
def test_sets_permission_correctly_on_human_task(
|
||||||
self,
|
self,
|
||||||
|
@ -80,8 +88,8 @@ class TestProcessInstanceProcessor(BaseTest):
|
||||||
processor = ProcessInstanceProcessor(process_instance)
|
processor = ProcessInstanceProcessor(process_instance)
|
||||||
processor.do_engine_steps(save=True)
|
processor.do_engine_steps(save=True)
|
||||||
|
|
||||||
assert len(process_instance.human_tasks) == 1
|
assert len(process_instance.active_human_tasks) == 1
|
||||||
human_task = process_instance.human_tasks[0]
|
human_task = process_instance.active_human_tasks[0]
|
||||||
assert human_task.lane_assignment_id is None
|
assert human_task.lane_assignment_id is None
|
||||||
assert len(human_task.potential_owners) == 1
|
assert len(human_task.potential_owners) == 1
|
||||||
assert human_task.potential_owners[0] == initiator_user
|
assert human_task.potential_owners[0] == initiator_user
|
||||||
|
@ -97,8 +105,8 @@ class TestProcessInstanceProcessor(BaseTest):
|
||||||
processor, spiff_task, {}, initiator_user, human_task
|
processor, spiff_task, {}, initiator_user, human_task
|
||||||
)
|
)
|
||||||
|
|
||||||
assert len(process_instance.human_tasks) == 1
|
assert len(process_instance.active_human_tasks) == 1
|
||||||
human_task = process_instance.human_tasks[0]
|
human_task = process_instance.active_human_tasks[0]
|
||||||
assert human_task.lane_assignment_id == finance_group.id
|
assert human_task.lane_assignment_id == finance_group.id
|
||||||
assert len(human_task.potential_owners) == 1
|
assert len(human_task.potential_owners) == 1
|
||||||
assert human_task.potential_owners[0] == finance_user
|
assert human_task.potential_owners[0] == finance_user
|
||||||
|
@ -114,8 +122,8 @@ class TestProcessInstanceProcessor(BaseTest):
|
||||||
ProcessInstanceService.complete_form_task(
|
ProcessInstanceService.complete_form_task(
|
||||||
processor, spiff_task, {}, finance_user, human_task
|
processor, spiff_task, {}, finance_user, human_task
|
||||||
)
|
)
|
||||||
assert len(process_instance.human_tasks) == 1
|
assert len(process_instance.active_human_tasks) == 1
|
||||||
human_task = process_instance.human_tasks[0]
|
human_task = process_instance.active_human_tasks[0]
|
||||||
assert human_task.lane_assignment_id is None
|
assert human_task.lane_assignment_id is None
|
||||||
assert len(human_task.potential_owners) == 1
|
assert len(human_task.potential_owners) == 1
|
||||||
assert human_task.potential_owners[0] == initiator_user
|
assert human_task.potential_owners[0] == initiator_user
|
||||||
|
@ -163,8 +171,8 @@ class TestProcessInstanceProcessor(BaseTest):
|
||||||
processor.do_engine_steps(save=True)
|
processor.do_engine_steps(save=True)
|
||||||
processor.save()
|
processor.save()
|
||||||
|
|
||||||
assert len(process_instance.human_tasks) == 1
|
assert len(process_instance.active_human_tasks) == 1
|
||||||
human_task = process_instance.human_tasks[0]
|
human_task = process_instance.active_human_tasks[0]
|
||||||
assert human_task.lane_assignment_id is None
|
assert human_task.lane_assignment_id is None
|
||||||
assert len(human_task.potential_owners) == 1
|
assert len(human_task.potential_owners) == 1
|
||||||
assert human_task.potential_owners[0] == initiator_user
|
assert human_task.potential_owners[0] == initiator_user
|
||||||
|
@ -181,8 +189,8 @@ class TestProcessInstanceProcessor(BaseTest):
|
||||||
)
|
)
|
||||||
assert human_task.completed_by_user_id == initiator_user.id
|
assert human_task.completed_by_user_id == initiator_user.id
|
||||||
|
|
||||||
assert len(process_instance.human_tasks) == 1
|
assert len(process_instance.active_human_tasks) == 1
|
||||||
human_task = process_instance.human_tasks[0]
|
human_task = process_instance.active_human_tasks[0]
|
||||||
assert human_task.lane_assignment_id is None
|
assert human_task.lane_assignment_id is None
|
||||||
assert len(human_task.potential_owners) == 2
|
assert len(human_task.potential_owners) == 2
|
||||||
assert human_task.potential_owners == [finance_user_three, finance_user_four]
|
assert human_task.potential_owners == [finance_user_three, finance_user_four]
|
||||||
|
@ -200,8 +208,8 @@ class TestProcessInstanceProcessor(BaseTest):
|
||||||
processor, spiff_task, {}, finance_user_three, human_task
|
processor, spiff_task, {}, finance_user_three, human_task
|
||||||
)
|
)
|
||||||
assert human_task.completed_by_user_id == finance_user_three.id
|
assert human_task.completed_by_user_id == finance_user_three.id
|
||||||
assert len(process_instance.human_tasks) == 1
|
assert len(process_instance.active_human_tasks) == 1
|
||||||
human_task = process_instance.human_tasks[0]
|
human_task = process_instance.active_human_tasks[0]
|
||||||
assert human_task.lane_assignment_id is None
|
assert human_task.lane_assignment_id is None
|
||||||
assert len(human_task.potential_owners) == 1
|
assert len(human_task.potential_owners) == 1
|
||||||
assert human_task.potential_owners[0] == finance_user_four
|
assert human_task.potential_owners[0] == finance_user_four
|
||||||
|
@ -218,8 +226,8 @@ class TestProcessInstanceProcessor(BaseTest):
|
||||||
processor, spiff_task, {}, finance_user_four, human_task
|
processor, spiff_task, {}, finance_user_four, human_task
|
||||||
)
|
)
|
||||||
assert human_task.completed_by_user_id == finance_user_four.id
|
assert human_task.completed_by_user_id == finance_user_four.id
|
||||||
assert len(process_instance.human_tasks) == 1
|
assert len(process_instance.active_human_tasks) == 1
|
||||||
human_task = process_instance.human_tasks[0]
|
human_task = process_instance.active_human_tasks[0]
|
||||||
assert human_task.lane_assignment_id is None
|
assert human_task.lane_assignment_id is None
|
||||||
assert len(human_task.potential_owners) == 1
|
assert len(human_task.potential_owners) == 1
|
||||||
assert human_task.potential_owners[0] == initiator_user
|
assert human_task.potential_owners[0] == initiator_user
|
||||||
|
@ -231,8 +239,8 @@ class TestProcessInstanceProcessor(BaseTest):
|
||||||
processor, spiff_task, {}, initiator_user, human_task
|
processor, spiff_task, {}, initiator_user, human_task
|
||||||
)
|
)
|
||||||
|
|
||||||
assert len(process_instance.human_tasks) == 1
|
assert len(process_instance.active_human_tasks) == 1
|
||||||
human_task = process_instance.human_tasks[0]
|
human_task = process_instance.active_human_tasks[0]
|
||||||
spiff_task = processor.__class__.get_task_by_bpmn_identifier(
|
spiff_task = processor.__class__.get_task_by_bpmn_identifier(
|
||||||
human_task.task_name, processor.bpmn_process_instance
|
human_task.task_name, processor.bpmn_process_instance
|
||||||
)
|
)
|
||||||
|
@ -276,11 +284,11 @@ class TestProcessInstanceProcessor(BaseTest):
|
||||||
)
|
)
|
||||||
processor = ProcessInstanceProcessor(process_instance)
|
processor = ProcessInstanceProcessor(process_instance)
|
||||||
processor.do_engine_steps(save=True)
|
processor.do_engine_steps(save=True)
|
||||||
assert len(process_instance.human_tasks) == 1
|
assert len(process_instance.active_human_tasks) == 1
|
||||||
initial_human_task_id = process_instance.human_tasks[0].id
|
initial_human_task_id = process_instance.active_human_tasks[0].id
|
||||||
|
|
||||||
# save again to ensure we go attempt to process the human tasks again
|
# save again to ensure we go attempt to process the human tasks again
|
||||||
processor.save()
|
processor.save()
|
||||||
|
|
||||||
assert len(process_instance.human_tasks) == 1
|
assert len(process_instance.active_human_tasks) == 1
|
||||||
assert initial_human_task_id == process_instance.human_tasks[0].id
|
assert initial_human_task_id == process_instance.active_human_tasks[0].id
|
||||||
|
|
Loading…
Reference in New Issue