some basis for testing messages now. it still does not do anything though

This commit is contained in:
jasquat 2022-08-02 16:27:47 -04:00
parent 0a77926801
commit 209e67bf8b
9 changed files with 91 additions and 70 deletions

View File

@ -1,8 +1,8 @@
"""empty message
Revision ID: c7735c07773c
Revision ID: 63365f377b89
Revises:
Create Date: 2022-08-01 14:22:21.009841
Create Date: 2022-08-02 16:20:32.076152
"""
from alembic import op
@ -10,7 +10,7 @@ import sqlalchemy as sa
# revision identifiers, used by Alembic.
revision = 'c7735c07773c'
revision = '63365f377b89'
down_revision = None
branch_labels = None
depends_on = None
@ -42,13 +42,13 @@ def upgrade():
sa.Column('username', sa.String(length=50), nullable=False),
sa.Column('uid', sa.String(length=50), nullable=True),
sa.Column('service', sa.String(length=50), nullable=False),
sa.Column('service_id', sa.String(length=100), nullable=False),
sa.Column('service_id', sa.String(length=50), nullable=False),
sa.Column('name', sa.String(length=50), nullable=True),
sa.Column('email', sa.String(length=50), nullable=True),
sa.PrimaryKeyConstraint('id'),
sa.UniqueConstraint('service', 'service_id', name='service_key'),
sa.UniqueConstraint('uid'),
sa.UniqueConstraint('username'),
sa.UniqueConstraint('service', 'service_id')
sa.UniqueConstraint('username')
)
op.create_table('principal',
sa.Column('id', sa.Integer(), nullable=False),
@ -135,20 +135,18 @@ def upgrade():
sa.Column('updated_at_in_seconds', sa.Integer(), nullable=True),
sa.Column('created_at_in_seconds', sa.Integer(), nullable=True),
sa.Column('user_uid', sa.String(length=50), nullable=True),
sa.Column('user_id', sa.Integer(), nullable=True),
sa.Column('archived', sa.Boolean(), nullable=True),
sa.ForeignKeyConstraint(['process_instance_id'], ['process_instance.id'], ),
sa.ForeignKeyConstraint(['user_uid'], ['user.uid'], ),
sa.ForeignKeyConstraint(['user_id'], ['user.id'], ),
sa.PrimaryKeyConstraint('id')
)
op.create_table('queued_send_message',
sa.Column('id', sa.Integer(), nullable=False),
sa.Column('process_instance_id', sa.Integer(), nullable=False),
sa.Column('bpmn_element_id', sa.String(length=50), nullable=False),
sa.Column('messsage_type', sa.Enum('send', 'receive', name='messagetypes'), nullable=False),
sa.Column('message_model', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['message_model'], ['message_model.id'], ),
sa.Column('message_type', sa.Enum('send', 'receive', name='messagetypes'), nullable=False),
sa.Column('message_model_id', sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(['message_model_id'], ['message_model.id'], ),
sa.ForeignKeyConstraint(['process_instance_id'], ['process_instance.id'], ),
sa.PrimaryKeyConstraint('id')
)

View File

@ -14,12 +14,12 @@ class MessageCorrelationModel(SpiffworkflowBaseDBModel):
__tablename__ = "message_correlation"
__table_args__ = (
db.UniqueConstraint(
"message_id", "name", name="message_id_name_unique"
),
db.UniqueConstraint("message_id", "name", name="message_id_name_unique"),
)
id = db.Column(db.Integer, primary_key=True)
message_id = db.Column(ForeignKey(MessageInstanceModel.id), nullable=False, index=True)
message_id = db.Column(
ForeignKey(MessageInstanceModel.id), nullable=False, index=True
)
name = db.Column(db.String(50), nullable=False, index=True)
value = db.Column(db.String(50), nullable=False, index=True)

View File

@ -1,6 +1,5 @@
"""Message_instance."""
import enum
from dataclasses import dataclass
from flask_bpmn.models.db import db
@ -8,12 +7,13 @@ from flask_bpmn.models.db import SpiffworkflowBaseDBModel
from sqlalchemy import Enum
from sqlalchemy import ForeignKey
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
from spiffworkflow_backend.models.message_model import MessageModel
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
class MessageTypes(enum.Enum):
"""MessageTypes."""
send = 1
receive = 2
@ -27,5 +27,5 @@ class MessageInstanceModel(SpiffworkflowBaseDBModel):
id = db.Column(db.Integer, primary_key=True)
process_instance_id = db.Column(ForeignKey(ProcessInstanceModel.id), nullable=False) # type: ignore
bpmn_element_id = db.Column(db.String(50), nullable=False)
messsage_type = db.Column(Enum(MessageTypes), nullable=False)
message_model = db.Column(ForeignKey(MessageModel.id), nullable=False)
message_type = db.Column(Enum(MessageTypes), nullable=False)
message_model_id = db.Column(ForeignKey(MessageModel.id), nullable=False)

View File

@ -1,5 +1,4 @@
"""Message_model."""
from flask_bpmn.models.db import db
from flask_bpmn.models.db import SpiffworkflowBaseDBModel

View File

@ -20,7 +20,7 @@ class UserModel(SpiffworkflowBaseDBModel):
username = db.Column(db.String(50), nullable=False, unique=True)
uid = db.Column(db.String(50), unique=True)
service = db.Column(db.String(50), nullable=False, unique=False)
service_id = db.Column(db.String(), nullable=False, unique=False)
service_id = db.Column(db.String(50), nullable=False, unique=False)
name = db.Column(db.String(50))
email = db.Column(db.String(50))
user_group_assignments = relationship(UserGroupAssignmentModel, cascade="delete")

View File

@ -1,8 +1,7 @@
"""Message_service."""
import flask
from spiffworkflow_backend.models.user import UserModel
from spiffworkflow_backend.models.message_instance import MessageInstanceModel
class MessageServiceWithAppContext:
"""Wrapper for Message Service.
@ -15,7 +14,7 @@ class MessageServiceWithAppContext:
"""__init__."""
self.app = app
def process_queued_messages_with_app_context(self):
def process_queued_messages_with_app_context(self) -> None:
"""Since this runs in a scheduler, we need to specify the app context as well."""
with self.app.app_context():
MessageService().process_queued_messages()
@ -24,9 +23,8 @@ class MessageServiceWithAppContext:
class MessageService:
"""MessageService."""
def process_queued_messages(self):
def process_queued_messages(self) -> None:
"""Process_queued_messages."""
user = UserModel.query.first()
print(f"user: {user}")
# MessageInstanceModel.query
# if
queued_messages = MessageInstanceModel.query
for queued_message in queued_messages:
print(f"queued_message: {queued_message.id}")

View File

@ -1,7 +1,13 @@
"""Base_test."""
import json
import time
from flask.app import Flask
from flask_bpmn.api.api_error import ApiError
from flask_bpmn.models.db import db
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
from spiffworkflow_backend.models.process_model import ProcessModelInfo
from spiffworkflow_backend.models.user import UserModel
from spiffworkflow_backend.services.user_service import UserService
@ -49,3 +55,23 @@ class BaseTest:
# username, password
# )
# return public_access_token
def create_process_instance_from_process_model(
self, process_model: ProcessModelInfo, status: str
) -> ProcessInstanceModel:
"""Create_process_instance_from_process_model."""
user = self.find_or_create_user()
current_time = round(time.time())
process_instance = ProcessInstanceModel(
status=status,
process_initiator=user,
process_model_identifier=process_model.id,
process_group_identifier=process_model.process_group_id,
updated_at_in_seconds=round(time.time()),
start_in_seconds=current_time - (3600 * 1),
end_in_seconds=current_time - (3600 * 1 - 20),
bpmn_json=json.dumps({"ikey": "ivalue"}),
)
db.session.add(process_instance)
db.session.commit()
return process_instance

View File

@ -1,18 +1,13 @@
"""User."""
import json
from time import time
from typing import Dict
from typing import Optional
from flask_bpmn.models.db import db
from tests.spiffworkflow_backend.helpers.example_data import ExampleDataLoader
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
ProcessEntityNotFoundError,
)
from spiffworkflow_backend.helpers.fixture_data import find_or_create_user
from spiffworkflow_backend.models.process_group import ProcessGroup
from spiffworkflow_backend.models.process_instance import ProcessInstanceModel
from spiffworkflow_backend.models.process_model import ProcessModelInfo
from spiffworkflow_backend.models.user import UserModel
from spiffworkflow_backend.services.process_model_service import ProcessModelService
@ -73,27 +68,6 @@ def load_test_spec(
return spec
def create_process_instance_from_process_model(
process_model: ProcessModelInfo, status: str
):
"""Create_process_instance_from_process_model."""
user = find_or_create_user()
current_time = round(time.time())
process_instance = ProcessInstanceModel(
status=status,
process_initiator=user,
process_model_identifier=process_model.id,
process_group_identifier=process_model.process_group_id,
updated_at_in_seconds=round(time.time()),
start_in_seconds=current_time - (3600 * 1),
end_in_seconds=current_time - (3600 * 1 - 20),
bpmn_json=json.dumps({"ikey": "ivalue"}),
)
db.session.add(process_instance)
db.session.commit()
return process_instance
# def user_info_to_query_string(user_info, redirect_url):
# query_string_list = []
# items = user_info.items()

View File

@ -1,18 +1,44 @@
"""test_message_service."""
from spiffworkflow_backend.services.message_model import MessageModel
from spiffworkflow_backend.services.message_instance import MessageInstanceModel
from tests.spiffworkflow_backend.helpers.test_data import create_process_instance_from_process_model
"""Test_message_service."""
from flask import Flask
from flask_bpmn.models.db import db
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
from spiffworkflow_backend.models.message_instance import MessageInstanceModel
from spiffworkflow_backend.models.message_model import MessageModel
from spiffworkflow_backend.services.message_service import MessageService
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
def test_can_send_message_to_waiting_message() -> None:
"""Test_can_send_message_to_waiting_message."""
message_model_name = "message_model_one"
message_model = MessageModel(name=message_model_name)
process_instance = create_process_instance_from_process_model
class TestAuthentication(BaseTest):
"""TestAuthentication."""
queued_message_send = MessageInstanceModel(
process_instance_id=process_instance.id,
bpmn_element_id="something",
message_type="send",
message_model=message_model,
)
def test_can_send_message_to_waiting_message(self, app: Flask, with_db_and_bpmn_file_cleanup: None) -> None:
"""Test_can_send_message_to_waiting_message."""
message_model_name = "message_model_one"
message_model = MessageModel(name=message_model_name)
db.session.add(message_model)
db.session.commit()
process_model = load_test_spec('hello_world')
process_instance_send = self.create_process_instance_from_process_model(process_model, 'waiting')
process_instance_receive = self.create_process_instance_from_process_model(process_model, 'waiting')
queued_message_send = MessageInstanceModel(
process_instance_id=process_instance_send.id,
bpmn_element_id="something",
message_type="send",
message_model_id=message_model.id,
)
queued_message_receive = MessageInstanceModel(
process_instance_id=process_instance_receive.id,
bpmn_element_id="something",
message_type="receive",
message_model_id=message_model.id,
)
db.session.add(queued_message_send)
db.session.add(queued_message_receive)
db.session.commit()
MessageService().process_queued_messages()