mirror of
https://github.com/sartography/spiffworkflow-backend.git
synced 2025-02-23 12:58:13 +00:00
added ability to create fixture data for e2e acceptance tests w/ burnettk
This commit is contained in:
parent
f832ff4b39
commit
cc7e920df7
@ -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:
|
||||
|
11
src/spiffworkflow_backend/helpers/spiff_enum.py
Normal file
11
src/spiffworkflow_backend/helpers/spiff_enum.py
Normal 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]
|
@ -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",
|
||||
|
@ -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"
|
||||
|
@ -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
|
@ -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
27
wsgi.py
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user