added ability to create fixture data for e2e acceptance tests w/ burnettk

This commit is contained in:
jasquat 2022-06-23 16:35:02 -04:00
parent f832ff4b39
commit cc7e920df7
7 changed files with 68 additions and 31 deletions

View File

@ -33,6 +33,7 @@ services:
- SPIFFWORKFLOW_BACKEND_UPGRADE_DB=true
- SPIFFWORKFLOW_BACKEND_DATABASE_URI=mysql+mysqlconnector://root:${SPIFFWORKFLOW_BACKEND_MYSQL_ROOT_DATABASE:-my-secret-pw}@db/${SPIFFWORKFLOW_BACKEND_DATABASE_NAME:-spiffworkflow_backend_development}
- BPMN_SPEC_ABSOLUTE_DIR=/app/process_models
- SPIFFWORKFLOW_BACKEND_LOAD_FIXTURE_DATA=${SPIFFWORKFLOW_BACKEND_LOAD_FIXTURE_DATA:-false}
ports:
- "7000:7000"
volumes:

View File

@ -0,0 +1,11 @@
"""Spiff_enum."""
import enum
class SpiffEnum(enum.Enum):
"""SpiffEnum."""
@classmethod
def list(cls) -> list[str]:
"""List."""
return [el.value for el in cls]

View File

@ -1,5 +1,4 @@
"""File."""
import enum
from dataclasses import dataclass
from dataclasses import field
from datetime import datetime
@ -12,6 +11,7 @@ from marshmallow import Schema
from sqlalchemy.orm import deferred
from sqlalchemy.orm import relationship
from spiffworkflow_backend.helpers.spiff_enum import SpiffEnum
from spiffworkflow_backend.models.data_store import DataStoreModel
@ -40,7 +40,7 @@ class FileModel(SpiffworkflowBaseDBModel):
archived = db.Column(db.Boolean, default=False) # type: ignore
class FileType(enum.Enum):
class FileType(SpiffEnum):
"""FileType."""
bpmn = "bpmn"
@ -64,11 +64,6 @@ class FileType(enum.Enum):
xml = "xml"
zip = "zip"
@classmethod
def list(cls) -> list[str]:
"""List."""
return [el.value for el in cls]
CONTENT_TYPES = {
"bpmn": "text/xml",

View File

@ -1,7 +1,6 @@
"""Process_instance."""
from __future__ import annotations
import enum
from dataclasses import dataclass
from typing import Any
@ -16,6 +15,7 @@ from sqlalchemy import ForeignKey
from sqlalchemy.orm import deferred
from sqlalchemy.orm import relationship
from spiffworkflow_backend.helpers.spiff_enum import SpiffEnum
from spiffworkflow_backend.models.process_model import ProcessModelInfo
from spiffworkflow_backend.models.task import TaskSchema
from spiffworkflow_backend.models.user import UserModel
@ -65,7 +65,7 @@ class NavigationItemSchema(Schema):
return item
class ProcessInstanceStatus(enum.Enum):
class ProcessInstanceStatus(SpiffEnum):
"""ProcessInstanceStatus."""
not_started = "not_started"

View File

@ -0,0 +1,35 @@
"""Acceptance_test_fixtures."""
import json
import time
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel, ProcessInstanceStatus
from flask_bpmn.models.db import db
from tests.spiffworkflow_backend.helpers.test_data import find_or_create_user
def load_fixtures() -> list[ProcessInstanceModel]:
"""Load_fixtures."""
test_process_group_id = "acceptance-tests-group-one"
test_process_model_id = "acceptance-tests-model-1"
user = find_or_create_user()
statuses = ProcessInstanceStatus.list()
current_time = round(time.time())
process_instances = []
for i in range(5):
process_instance = ProcessInstanceModel(
status=ProcessInstanceStatus[statuses[i]],
process_initiator=user,
process_model_identifier=test_process_model_id,
process_group_identifier=test_process_group_id,
updated_at_in_seconds=round(time.time()),
start_in_seconds=(3600 * i) + current_time,
end_in_seconds=(3600 * i + 20) + current_time,
bpmn_json=json.dumps({"i": i}),
)
db.session.add(process_instance)
process_instances.append(process_instance)
db.session.commit()
return process_instances

View File

@ -0,0 +1,12 @@
"""Test_acceptance_test_fixtures."""
from flask.app import Flask
from spiffworkflow_backend.services.acceptance_test_fixtures import load_fixtures
def test_start_dates_are_one_hour_apart(app: Flask) -> None:
"""Test_start_dates_are_one_hour_apart."""
process_instances = load_fixtures()
assert (process_instances[0].start_in_seconds + 3600) == (process_instances[1].start_in_seconds)

27
wsgi.py
View File

@ -1,28 +1,11 @@
"""This is my docstring."""
from werkzeug.exceptions import NotFound
from werkzeug.middleware.dispatcher import DispatcherMiddleware
from werkzeug.middleware.proxy_fix import ProxyFix
import os
from spiffworkflow_backend import create_app
from spiffworkflow_backend.services.acceptance_test_fixtures import load_fixtures
app = create_app()
if __name__ == "__main__":
def no_app(environ, start_response):
"""This is."""
return NotFound()(environ, start_response)
# Remove trailing slash, but add leading slash
base_url = "/" + app.config["APPLICATION_ROOT"].strip("/")
routes = {"/": app.wsgi_app}
if base_url != "/":
routes[base_url] = app.wsgi_app
app.wsgi_app = DispatcherMiddleware(no_app, routes)
app.wsgi_app = ProxyFix(app.wsgi_app)
flask_port = app.config["FLASK_PORT"]
app.run(host="0.0.0.0", port=flask_port)
if os.environ.get("SPIFFWORKFLOW_BACKEND_LOAD_FIXTURE_DATA") == "true":
with app.app_context():
load_fixtures()