spiff-arena/conftest.py
jasquat f0b608789b Squashed 'spiffworkflow-backend/' changes from 22766521..b978f502
b978f502 Merge pull request #148 from sartography/feature/respect_lanes
e7f2d23e merged in main and resolved conflicts w/ burnettk
3a382b40 add new user to active task if appropriate w/ burnettk
d1571c58 added default group to demo and development w/ burnettk
afdf81a0 added test to ensure users can update their own task w/ burnettk
6e13ee4e Merge remote-tracking branch 'origin/main' into feature/respect_lanes
645e4d8f updated flask-bpmn for sentry and fixed for pyl w/ burnettk
57248eab fixed submitting and getting user tasks w/ burnettk
c9b086d9 ignore all null-ls w/ burnettk
63796d50 fixed model load issue w/ burnettk
49eefc56 some precommit stuff w/ burnettk
579f0902 Merge remote-tracking branch 'origin/main' into feature/respect_lanes
47bdb99f fixed swagger ui w/ burnettk
5128f752 merged in main and resolved conflicts
be1f4bcc added validation to ensure user has access to task w/ burnettk
a387b787 added some code to respect lanes in a process model w/ burnettk

git-subtree-dir: spiffworkflow-backend
git-subtree-split: b978f502a0f840554940125c6b729b9b99086001
2022-10-21 16:28:09 -04:00

118 lines
3.6 KiB
Python

"""Conftest."""
import os
import shutil
import pytest
from flask.app import Flask
from flask_bpmn.models.db import db
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
from spiffworkflow_backend.models.active_task_user import ActiveTaskUserModel
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
from spiffworkflow_backend.models.user import UserModel
from spiffworkflow_backend.services.process_instance_processor import (
ProcessInstanceProcessor,
)
from spiffworkflow_backend.services.process_instance_service import (
ProcessInstanceService,
)
from spiffworkflow_backend.services.process_model_service import ProcessModelService
# We need to call this before importing spiffworkflow_backend
# otherwise typeguard cannot work. hence the noqa: E402
if os.environ.get("RUN_TYPEGUARD") == "true":
from typeguard.importhook import install_import_hook
install_import_hook(packages="spiffworkflow_backend")
from spiffworkflow_backend import create_app # noqa: E402
@pytest.fixture(scope="session")
def app() -> Flask:
"""App."""
os.environ["SPIFFWORKFLOW_BACKEND_ENV"] = "testing"
# os.environ["FLASK_SESSION_SECRET_KEY"] = "this_is_testing_secret_key"
os.environ["FLASK_SESSION_SECRET_KEY"] = "super_secret_key"
app = create_app()
# 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__),
"tests",
"spiffworkflow_backend",
"files",
"bpmn_specs",
)
return app
@pytest.fixture()
def with_db_and_bpmn_file_cleanup() -> None:
"""Process_group_resource."""
db.session.query(ActiveTaskUserModel).delete()
for model in SpiffworkflowBaseDBModel._all_subclasses():
db.session.query(model).delete()
db.session.commit()
try:
yield
finally:
process_model_service = ProcessModelService()
if os.path.exists(process_model_service.root_path()):
shutil.rmtree(process_model_service.root_path())
@pytest.fixture()
def with_super_admin_user() -> UserModel:
"""With_super_admin_user."""
return BaseTest.create_user_with_permission("super_admin")
@pytest.fixture()
def setup_process_instances_for_reports() -> list[ProcessInstanceModel]:
"""Setup_process_instances_for_reports."""
user = BaseTest.find_or_create_user()
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_instance.status = "complete"
db.session.add(process_instance)
db.session.commit()
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}