2022-06-16 16:58:55 -04:00
|
|
|
"""Process Model."""
|
2022-09-08 18:05:50 -04:00
|
|
|
from flask.app import Flask
|
2022-11-01 16:48:04 -04:00
|
|
|
from flask.testing import FlaskClient
|
2022-09-09 16:04:45 -04:00
|
|
|
from flask_bpmn.models.db import db
|
2022-09-08 18:05:50 -04:00
|
|
|
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
2022-11-15 10:11:26 -05:00
|
|
|
from spiffworkflow_backend.models.spec_reference import SpecReferenceCache
|
2022-11-01 16:48:04 -04:00
|
|
|
from spiffworkflow_backend.models.user import UserModel
|
2022-09-08 18:05:50 -04:00
|
|
|
from spiffworkflow_backend.services.process_instance_processor import (
|
|
|
|
ProcessInstanceProcessor,
|
|
|
|
)
|
2022-11-18 15:50:20 -05:00
|
|
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
|
|
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
2022-06-16 16:58:55 -04:00
|
|
|
|
|
|
|
|
2022-09-08 14:46:10 -04:00
|
|
|
class TestProcessModel(BaseTest):
|
2022-09-08 18:05:50 -04:00
|
|
|
"""TestProcessModel."""
|
|
|
|
|
2022-09-08 14:46:10 -04:00
|
|
|
def test_initializes_files_as_empty_array(self) -> None:
|
|
|
|
"""Test_initializes_files_as_empty_array."""
|
|
|
|
process_model_one = self.create_test_process_model(
|
|
|
|
id="model_one", display_name="Model One"
|
|
|
|
)
|
|
|
|
assert process_model_one.files == []
|
2022-06-16 16:58:55 -04:00
|
|
|
|
2022-09-12 14:17:18 -04:00
|
|
|
def test_can_run_process_model_with_call_activities_when_in_same_process_model_directory(
|
2022-11-09 13:45:16 -05:00
|
|
|
self,
|
|
|
|
app: Flask,
|
|
|
|
client: FlaskClient,
|
|
|
|
with_db_and_bpmn_file_cleanup: None,
|
|
|
|
with_super_admin_user: UserModel,
|
2022-09-12 14:17:18 -04:00
|
|
|
) -> None:
|
|
|
|
"""Test_can_run_process_model_with_call_activities."""
|
2022-11-09 13:45:16 -05:00
|
|
|
self.create_process_group(
|
|
|
|
client, with_super_admin_user, "test_group", "test_group"
|
|
|
|
)
|
2022-09-12 14:17:18 -04:00
|
|
|
process_model = load_test_spec(
|
2022-11-01 16:48:04 -04:00
|
|
|
"test_group/call_activity_test",
|
|
|
|
# bpmn_file_name="call_activity_test.bpmn",
|
2022-09-12 14:17:18 -04:00
|
|
|
process_model_source_directory="call_activity_same_directory",
|
|
|
|
)
|
|
|
|
|
|
|
|
process_instance = self.create_process_instance_from_process_model(
|
|
|
|
process_model
|
|
|
|
)
|
|
|
|
processor = ProcessInstanceProcessor(process_instance)
|
|
|
|
processor.do_engine_steps(save=True)
|
|
|
|
assert process_instance.status == "complete"
|
|
|
|
|
|
|
|
def test_can_run_process_model_with_call_activities_when_not_in_same_directory(
|
2022-11-09 13:45:16 -05:00
|
|
|
self,
|
|
|
|
app: Flask,
|
|
|
|
client: FlaskClient,
|
|
|
|
with_db_and_bpmn_file_cleanup: None,
|
|
|
|
with_super_admin_user: UserModel,
|
2022-09-08 18:05:50 -04:00
|
|
|
) -> None:
|
|
|
|
"""Test_can_run_process_model_with_call_activities."""
|
2022-11-09 13:45:16 -05:00
|
|
|
self.create_process_group(
|
|
|
|
client, with_super_admin_user, "test_group", "test_group"
|
|
|
|
)
|
2022-09-08 18:05:50 -04:00
|
|
|
process_model = load_test_spec(
|
2022-11-01 16:48:04 -04:00
|
|
|
"test_group/call_activity_nested",
|
2022-09-08 18:05:50 -04:00
|
|
|
process_model_source_directory="call_activity_nested",
|
|
|
|
bpmn_file_name="call_activity_nested",
|
|
|
|
)
|
|
|
|
|
|
|
|
bpmn_file_names = [
|
|
|
|
"call_activity_level_2b",
|
|
|
|
"call_activity_level_2",
|
|
|
|
"call_activity_level_3",
|
|
|
|
]
|
|
|
|
for bpmn_file_name in bpmn_file_names:
|
|
|
|
load_test_spec(
|
2022-11-01 16:48:04 -04:00
|
|
|
f"test_group/{bpmn_file_name}",
|
2022-09-08 18:05:50 -04:00
|
|
|
process_model_source_directory="call_activity_nested",
|
|
|
|
bpmn_file_name=bpmn_file_name,
|
|
|
|
)
|
|
|
|
process_instance = self.create_process_instance_from_process_model(
|
|
|
|
process_model
|
|
|
|
)
|
|
|
|
processor = ProcessInstanceProcessor(process_instance)
|
2022-09-12 14:17:18 -04:00
|
|
|
processor.do_engine_steps(save=True)
|
|
|
|
assert process_instance.status == "complete"
|
2022-09-08 18:05:50 -04:00
|
|
|
|
2022-09-09 16:04:45 -04:00
|
|
|
def test_can_run_process_model_with_call_activities_when_process_identifier_is_not_in_database(
|
2022-11-09 13:45:16 -05:00
|
|
|
self,
|
|
|
|
app: Flask,
|
|
|
|
client: FlaskClient,
|
|
|
|
with_db_and_bpmn_file_cleanup: None,
|
|
|
|
with_super_admin_user: UserModel,
|
2022-09-09 16:04:45 -04:00
|
|
|
) -> None:
|
|
|
|
"""Test_can_run_process_model_with_call_activities."""
|
2022-11-09 13:45:16 -05:00
|
|
|
self.create_process_group(
|
|
|
|
client, with_super_admin_user, "test_group", "test_group"
|
|
|
|
)
|
2022-09-09 16:04:45 -04:00
|
|
|
process_model = load_test_spec(
|
2022-11-01 16:48:04 -04:00
|
|
|
"test_group/call_activity_nested",
|
2022-09-09 16:04:45 -04:00
|
|
|
process_model_source_directory="call_activity_nested",
|
|
|
|
bpmn_file_name="call_activity_nested",
|
|
|
|
)
|
|
|
|
|
|
|
|
bpmn_file_names = [
|
|
|
|
"call_activity_level_2b",
|
|
|
|
"call_activity_level_2",
|
|
|
|
"call_activity_level_3",
|
|
|
|
]
|
|
|
|
for bpmn_file_name in bpmn_file_names:
|
|
|
|
load_test_spec(
|
2022-11-01 16:48:04 -04:00
|
|
|
f"test_group/{bpmn_file_name}",
|
2022-09-09 16:04:45 -04:00
|
|
|
process_model_source_directory="call_activity_nested",
|
|
|
|
bpmn_file_name=bpmn_file_name,
|
|
|
|
)
|
|
|
|
process_instance = self.create_process_instance_from_process_model(
|
|
|
|
process_model
|
|
|
|
)
|
|
|
|
|
|
|
|
# delete all of the id lookup items to force to processor to find the correct
|
|
|
|
# process model when running the process
|
2022-11-14 15:23:37 -05:00
|
|
|
db.session.query(SpecReferenceCache).delete()
|
2022-11-01 16:48:04 -04:00
|
|
|
db.session.commit()
|
2022-09-09 16:04:45 -04:00
|
|
|
processor = ProcessInstanceProcessor(process_instance)
|
2022-09-12 14:17:18 -04:00
|
|
|
processor.do_engine_steps(save=True)
|
|
|
|
assert process_instance.status == "complete"
|
2022-09-09 16:04:45 -04:00
|
|
|
|
2022-09-08 14:46:10 -04:00
|
|
|
def create_test_process_model(self, id: str, display_name: str) -> ProcessModelInfo:
|
|
|
|
"""Create_test_process_model."""
|
|
|
|
return ProcessModelInfo(
|
|
|
|
id=id,
|
|
|
|
display_name=display_name,
|
|
|
|
description=display_name,
|
|
|
|
)
|