2022-05-17 20:47:55 +00:00
|
|
|
"""Conftest."""
|
2022-05-19 18:38:47 +00:00
|
|
|
import os
|
2022-06-21 19:13:02 +00:00
|
|
|
import shutil
|
2022-05-19 18:38:47 +00:00
|
|
|
|
2022-05-17 20:35:38 +00:00
|
|
|
import pytest
|
2022-05-18 16:18:47 +00:00
|
|
|
from flask.app import Flask
|
2022-07-07 18:44:19 +00:00
|
|
|
from flask_bpmn.models.db import db
|
|
|
|
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
2022-08-02 14:46:53 +00:00
|
|
|
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
2022-08-02 14:49:43 +00:00
|
|
|
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
2022-06-21 19:17:42 +00:00
|
|
|
|
2022-07-10 05:24:12 +00:00
|
|
|
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
|
|
|
|
from spiffworkflow_backend.services.process_instance_processor import (
|
|
|
|
ProcessInstanceProcessor,
|
|
|
|
)
|
|
|
|
from spiffworkflow_backend.services.process_instance_service import (
|
|
|
|
ProcessInstanceService,
|
|
|
|
)
|
2022-06-21 19:13:02 +00:00
|
|
|
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
2022-05-17 20:47:55 +00:00
|
|
|
|
2022-05-20 15:46:44 +00:00
|
|
|
|
2022-06-01 15:17:25 +00:00
|
|
|
# We need to call this before importing spiffworkflow_backend
|
2022-05-20 15:46:44 +00:00
|
|
|
# otherwise typeguard cannot work. hence the noqa: E402
|
|
|
|
if os.environ.get("RUN_TYPEGUARD") == "true":
|
2022-05-20 15:55:09 +00:00
|
|
|
from typeguard.importhook import install_import_hook
|
|
|
|
|
2022-06-01 15:17:25 +00:00
|
|
|
install_import_hook(packages="spiffworkflow_backend")
|
2022-05-20 15:46:44 +00:00
|
|
|
|
|
|
|
|
2022-06-01 15:17:25 +00:00
|
|
|
from spiffworkflow_backend import create_app # noqa: E402
|
2022-05-17 20:35:38 +00:00
|
|
|
|
|
|
|
|
2022-05-17 20:47:55 +00:00
|
|
|
@pytest.fixture(scope="session")
|
2022-05-18 14:49:20 +00:00
|
|
|
def app() -> Flask:
|
2022-05-17 20:47:55 +00:00
|
|
|
"""App."""
|
2022-05-19 18:38:47 +00:00
|
|
|
os.environ["FLASK_ENV"] = "testing"
|
2022-06-03 15:40:19 +00:00
|
|
|
# os.environ["FLASK_SESSION_SECRET_KEY"] = "this_is_testing_secret_key"
|
|
|
|
os.environ["FLASK_SESSION_SECRET_KEY"] = "super_secret_key"
|
2022-05-17 20:35:38 +00:00
|
|
|
app = create_app()
|
2022-05-19 20:08:38 +00:00
|
|
|
|
|
|
|
# NOTE: set this here since nox shoves tests and src code to
|
|
|
|
# different places and this allows us to know exactly where we are at the start
|
|
|
|
app.config["BPMN_SPEC_ABSOLUTE_DIR"] = (
|
|
|
|
os.path.join(os.path.dirname(__file__))
|
2022-06-01 15:17:25 +00:00
|
|
|
+ "/tests/spiffworkflow_backend/files/bpmn_specs"
|
2022-05-19 20:08:38 +00:00
|
|
|
)
|
|
|
|
|
2022-05-17 20:35:38 +00:00
|
|
|
return app
|
2022-06-21 19:13:02 +00:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture()
|
2022-07-10 05:24:12 +00:00
|
|
|
def with_db_and_bpmn_file_cleanup() -> None:
|
2022-06-21 19:13:02 +00:00
|
|
|
"""Process_group_resource."""
|
2022-06-29 15:47:17 +00:00
|
|
|
for model in SpiffworkflowBaseDBModel._all_subclasses():
|
|
|
|
db.session.query(model).delete()
|
|
|
|
|
2022-06-21 19:13:02 +00:00
|
|
|
try:
|
|
|
|
yield
|
|
|
|
finally:
|
|
|
|
process_model_service = ProcessModelService()
|
|
|
|
if os.path.exists(process_model_service.root_path()):
|
|
|
|
shutil.rmtree(process_model_service.root_path())
|
2022-07-10 05:24:12 +00:00
|
|
|
|
|
|
|
|
|
|
|
@pytest.fixture()
|
|
|
|
def setup_process_instances_for_reports() -> list[ProcessInstanceModel]:
|
|
|
|
"""Setup_process_instances_for_reports."""
|
2022-08-02 14:46:53 +00:00
|
|
|
user = BaseTest.find_or_create_user()
|
2022-07-10 05:24:12 +00:00
|
|
|
process_group_id = "runs_without_input"
|
|
|
|
process_model_id = "sample"
|
|
|
|
load_test_spec(process_group_id=process_group_id, process_model_id=process_model_id)
|
|
|
|
process_instances = []
|
|
|
|
for data in [kay(), ray(), jay()]:
|
|
|
|
process_instance = ProcessInstanceService.create_process_instance(
|
|
|
|
process_group_identifier=process_group_id,
|
|
|
|
process_model_identifier=process_model_id,
|
|
|
|
user=user,
|
|
|
|
)
|
|
|
|
processor = ProcessInstanceProcessor(process_instance)
|
|
|
|
processor.slam_in_data(data)
|
|
|
|
process_instances.append(process_instance)
|
|
|
|
|
|
|
|
return process_instances
|
|
|
|
|
|
|
|
|
|
|
|
def kay() -> dict:
|
|
|
|
"""Kay."""
|
|
|
|
return {"name": "kay", "grade_level": 2, "test_score": 10}
|
|
|
|
|
|
|
|
|
|
|
|
def ray() -> dict:
|
|
|
|
"""Ray."""
|
|
|
|
return {"name": "ray", "grade_level": 1, "test_score": 9}
|
|
|
|
|
|
|
|
|
|
|
|
def jay() -> dict:
|
|
|
|
"""Jay."""
|
|
|
|
return {"name": "jay", "grade_level": 2, "test_score": 8}
|