Committing for Thursday demo
This commit is contained in:
parent
2ecb0a64da
commit
e20e2fa8e4
|
@ -1,8 +1,8 @@
|
|||
"""empty message
|
||||
|
||||
Revision ID: 71fbd39e5d42
|
||||
Revision ID: 33c37028fb51
|
||||
Revises:
|
||||
Create Date: 2022-09-13 08:35:27.077613
|
||||
Create Date: 2022-09-14 08:59:45.896805
|
||||
|
||||
"""
|
||||
from alembic import op
|
||||
|
@ -10,7 +10,7 @@ import sqlalchemy as sa
|
|||
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = '71fbd39e5d42'
|
||||
revision = '33c37028fb51'
|
||||
down_revision = None
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
@ -137,9 +137,8 @@ def upgrade():
|
|||
op.create_index(op.f('ix_process_instance_report_process_model_identifier'), 'process_instance_report', ['process_model_identifier'], unique=False)
|
||||
op.create_table('secret',
|
||||
sa.Column('id', sa.Integer(), nullable=False),
|
||||
sa.Column('service', sa.String(length=50), nullable=True),
|
||||
sa.Column('client', sa.String(length=50), nullable=True),
|
||||
sa.Column('key', sa.String(length=50), nullable=True),
|
||||
sa.Column('value', sa.String(length=255), nullable=True),
|
||||
sa.Column('creator_user_id', sa.Integer(), nullable=False),
|
||||
sa.ForeignKeyConstraint(['creator_user_id'], ['user.id'], ),
|
||||
sa.PrimaryKeyConstraint('id')
|
|
@ -993,23 +993,17 @@ paths:
|
|||
schema:
|
||||
type: number
|
||||
|
||||
/secrets/{service}/{client}:
|
||||
/secrets/{key}:
|
||||
parameters:
|
||||
- name: service
|
||||
- name: secret_id
|
||||
in: path
|
||||
required: true
|
||||
description: The external service we are using
|
||||
schema:
|
||||
type: string
|
||||
- name: client
|
||||
in: path
|
||||
required: true
|
||||
description: The client identifier of the external service we are using
|
||||
description: The key we are using
|
||||
schema:
|
||||
type: string
|
||||
get:
|
||||
operationId: spiffworkflow_backend.routes.process_api_blueprint.get_secret
|
||||
summary: Returns a client secret for a service and client
|
||||
summary: Returns a secret value for a key
|
||||
tags:
|
||||
- Secrets
|
||||
responses:
|
||||
|
@ -1784,28 +1778,26 @@ components:
|
|||
example: ["a_file.txt", "b_file.txt"]
|
||||
Secret:
|
||||
properties:
|
||||
service:
|
||||
description: The service we are contacting
|
||||
value:
|
||||
description: The value associated with the key
|
||||
type: string
|
||||
example: github
|
||||
client:
|
||||
description: The client of the service we are contacting the service on behalf of. I.e., username, id, etc.
|
||||
example: my_super_secret_value
|
||||
nullable: false
|
||||
key:
|
||||
description: The key of the secret we want to use
|
||||
type: string
|
||||
example: clients_user_name_at_github
|
||||
secret:
|
||||
description: The secret associated with the client on the service
|
||||
type: string
|
||||
example: my_super_secret_password
|
||||
nullable: true
|
||||
example: my_secret_key
|
||||
nullable: false
|
||||
creator_user_id:
|
||||
description: The id of the logged in user that created this secret
|
||||
type: number
|
||||
example: 1
|
||||
nullable: true
|
||||
allowed_processes:
|
||||
description: The id of the process model allowed to access this secret
|
||||
type: string
|
||||
example: my_process_model_id
|
||||
description: The processes allowed to access this secret
|
||||
type: array
|
||||
items:
|
||||
$ref: "#/components/schemas/SecretAllowedProcessPath"
|
||||
nullable: true
|
||||
ProcessInstanceLog:
|
||||
properties:
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
"""Secret_model."""
|
||||
from flask_bpmn.models.db import db
|
||||
from flask_bpmn.models.db import SpiffworkflowBaseDBModel
|
||||
from marshmallow import Schema
|
||||
from sqlalchemy import ForeignKey
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
|
@ -12,14 +13,23 @@ class SecretModel(SpiffworkflowBaseDBModel):
|
|||
|
||||
__tablename__ = "secret"
|
||||
id: int = db.Column(db.Integer, primary_key=True)
|
||||
service: str = db.Column(db.String(50))
|
||||
client: str = db.Column(db.String(50))
|
||||
key: str = db.Column(db.String(50))
|
||||
value: str = db.Column(db.String(255))
|
||||
creator_user_id: int = db.Column(ForeignKey(UserModel.id), nullable=False)
|
||||
|
||||
allowed_processes = relationship("SecretAllowedProcessPathModel", cascade="delete")
|
||||
|
||||
|
||||
class SecretModelSchema(Schema):
|
||||
"""SecretModelSchema."""
|
||||
|
||||
class Meta:
|
||||
"""Meta."""
|
||||
|
||||
model = SecretModel
|
||||
fields = ["key", "value", "creator_user_id"]
|
||||
|
||||
|
||||
class SecretAllowedProcessPathModel(SpiffworkflowBaseDBModel):
|
||||
"""Allowed processes can be Process Groups or Process Models.
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ from spiffworkflow_backend.models.process_instance_report import (
|
|||
)
|
||||
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
||||
from spiffworkflow_backend.models.process_model import ProcessModelInfoSchema
|
||||
from spiffworkflow_backend.models.secret_model import SecretModel
|
||||
from spiffworkflow_backend.models.secret_model import SecretModelSchema
|
||||
from spiffworkflow_backend.models.spiff_logging import SpiffLoggingModel
|
||||
from spiffworkflow_backend.services.error_handling_service import ErrorHandlingService
|
||||
from spiffworkflow_backend.services.file_system_service import FileSystemService
|
||||
|
@ -1029,20 +1029,24 @@ def get_spiff_task_from_process_instance(
|
|||
#
|
||||
# Methods for secrets CRUD - maybe move somewhere else:
|
||||
#
|
||||
def get_secret(service: str, client: str) -> str | None:
|
||||
def get_secret(key: str) -> str | None:
|
||||
"""Get_secret."""
|
||||
return SecretService.get_secret(service, client)
|
||||
return SecretService.get_secret(key)
|
||||
|
||||
|
||||
def add_secret(
|
||||
service: str,
|
||||
client: str,
|
||||
secret: str,
|
||||
creator_user_id: Optional[int] = None,
|
||||
allowed_process: Optional[str] = None,
|
||||
) -> SecretModel:
|
||||
def add_secret(body: Dict) -> Response:
|
||||
"""Add secret."""
|
||||
...
|
||||
secret_model = SecretService.add_secret(
|
||||
body["key"], body["service"], body["creator_user_id"]
|
||||
)
|
||||
assert secret_model # noqa: S101
|
||||
return Response(
|
||||
json.dumps(SecretModelSchema().dump(secret_model)),
|
||||
status=201,
|
||||
mimetype="application/json",
|
||||
)
|
||||
|
||||
# return secret_model
|
||||
|
||||
|
||||
def update_secret(
|
||||
|
|
|
@ -13,69 +13,80 @@ class SecretService:
|
|||
|
||||
@staticmethod
|
||||
def add_secret(
|
||||
service: str,
|
||||
client: str,
|
||||
key: str,
|
||||
value: str,
|
||||
creator_user_id: Optional[int] = None,
|
||||
allowed_process: Optional[str] = None,
|
||||
) -> SecretModel:
|
||||
"""Add_secret."""
|
||||
secret_model = SecretModel(
|
||||
service=service, client=client, key=key, creator_user_id=creator_user_id
|
||||
key=key, value=value, creator_user_id=creator_user_id
|
||||
)
|
||||
db.session.add(secret_model)
|
||||
try:
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
raise ApiError(
|
||||
code="create_secret_failed",
|
||||
message=f"Cannot create secret for service: {service} and client: {client}. Original error is {e}",
|
||||
code="create_secret_error",
|
||||
message=f"There was an error creating a secret with key: {key} and value ending with: {value[:-4]}. "
|
||||
f"Original error is {e}",
|
||||
) from e
|
||||
return secret_model
|
||||
|
||||
@staticmethod
|
||||
def get_secret(service: str, client: str) -> str | None:
|
||||
def get_secret(key: str) -> str | None:
|
||||
"""Get_secret."""
|
||||
secret: SecretModel = (
|
||||
db.session.query(SecretModel)
|
||||
.filter(SecretModel.service == service)
|
||||
.filter(SecretModel.client == client)
|
||||
.first()
|
||||
db.session.query(SecretModel).filter(SecretModel.key == key).first()
|
||||
)
|
||||
if secret is not None:
|
||||
return secret.key
|
||||
return secret.value
|
||||
|
||||
@staticmethod
|
||||
def add_allowed_process(
|
||||
secret_id: int, allowed_relative_path: str
|
||||
secret_id: int, user_id: str, allowed_relative_path: str
|
||||
) -> SecretAllowedProcessPathModel:
|
||||
"""Add_allowed_process."""
|
||||
secret_process_model = SecretAllowedProcessPathModel(
|
||||
secret_id=secret_id, allowed_relative_path=allowed_relative_path
|
||||
)
|
||||
db.session.add(secret_process_model)
|
||||
try:
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
creator = SecretModel.query.filter(SecretModel.id == secret_id).first()
|
||||
if creator == user_id:
|
||||
secret_process_model = SecretAllowedProcessPathModel(
|
||||
secret_id=secret_id, allowed_relative_path=allowed_relative_path
|
||||
)
|
||||
assert secret_process_model # noqa: S101
|
||||
db.session.add(secret_process_model)
|
||||
try:
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
raise ApiError(
|
||||
code="create_allowed_process_failure",
|
||||
message=f"Count not create an allowed process for for secret: {secret_id} "
|
||||
f"with path: {allowed_relative_path}. "
|
||||
f"Original error is {e}",
|
||||
) from e
|
||||
return secret_process_model
|
||||
else:
|
||||
raise ApiError(
|
||||
code="create_allowed_process_failure",
|
||||
message=f"Count not create an allowed process for for secret: {secret_id} "
|
||||
f"with path: {allowed_relative_path}. "
|
||||
f"Original error is {e}",
|
||||
) from e
|
||||
return secret_process_model
|
||||
code="create_allowed_process_path_error",
|
||||
message=f"User: {user_id} cannot modify the secret with id : {secret_id}",
|
||||
)
|
||||
|
||||
def update_secret(
|
||||
self,
|
||||
service: str,
|
||||
client: str,
|
||||
secret: Optional[str] = None,
|
||||
key: str,
|
||||
value: str,
|
||||
creator_user_id: Optional[int] = None,
|
||||
allowed_process: Optional[str] = None,
|
||||
) -> None:
|
||||
"""Does this pass pre commit?"""
|
||||
...
|
||||
|
||||
def delete_secret(self, service: str, client: str) -> None:
|
||||
@staticmethod
|
||||
def delete_secret(key: str) -> None:
|
||||
"""Delete secret."""
|
||||
...
|
||||
secret = SecretModel.query.filter(SecretModel.key == key).first()
|
||||
db.session.delete(secret)
|
||||
try:
|
||||
db.session.commit()
|
||||
except Exception as e:
|
||||
raise ApiError(
|
||||
code="delete_secret_error",
|
||||
message=f"Could not delete secret with key: {key}. Original error is: {e}",
|
||||
) from e
|
||||
|
|
|
@ -11,7 +11,6 @@ from flask.testing import FlaskClient
|
|||
from flask_bpmn.api.api_error import ApiError
|
||||
from flask_bpmn.models.db import db
|
||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||
from tests.spiffworkflow_backend.helpers.test_data import logged_in_headers
|
||||
from werkzeug.test import TestResponse
|
||||
|
||||
from spiffworkflow_backend.models.process_group import ProcessGroup
|
||||
|
@ -24,6 +23,8 @@ from spiffworkflow_backend.models.user import UserModel
|
|||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||
from spiffworkflow_backend.services.user_service import UserService
|
||||
|
||||
# from tests.spiffworkflow_backend.helpers.test_data import logged_in_headers
|
||||
|
||||
|
||||
class BaseTest:
|
||||
"""BaseTest."""
|
||||
|
@ -138,7 +139,7 @@ class BaseTest:
|
|||
"/v1.0/process-models",
|
||||
content_type="application/json",
|
||||
data=json.dumps(ProcessModelInfoSchema().dump(model)),
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 201
|
||||
return response
|
||||
|
@ -168,7 +169,7 @@ class BaseTest:
|
|||
data=data,
|
||||
follow_redirects=True,
|
||||
content_type="multipart/form-data",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 201
|
||||
assert response.get_data() is not None
|
||||
|
@ -178,7 +179,7 @@ class BaseTest:
|
|||
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{spec.process_group_id}/{spec.id}/files/{file_name}",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
file2 = json.loads(response.get_data(as_text=True))
|
||||
|
@ -198,7 +199,7 @@ class BaseTest:
|
|||
)
|
||||
response = client.post(
|
||||
"/v1.0/process-groups",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
content_type="application/json",
|
||||
data=json.dumps(ProcessGroupSchema().dump(process_group)),
|
||||
)
|
||||
|
@ -233,3 +234,29 @@ class BaseTest:
|
|||
db.session.add(process_instance)
|
||||
db.session.commit()
|
||||
return process_instance
|
||||
|
||||
@staticmethod
|
||||
def logged_in_headers(
|
||||
user: UserModel, _redirect_url: str = "http://some/frontend/url"
|
||||
) -> Dict[str, str]:
|
||||
"""Logged_in_headers."""
|
||||
# if user is None:
|
||||
# uid = 'test_user'
|
||||
# user_info = {'uid': 'test_user'}
|
||||
# else:
|
||||
# uid = user.uid
|
||||
# user_info = {'uid': user.uid}
|
||||
|
||||
# query_string = user_info_to_query_string(user_info, redirect_url)
|
||||
# rv = self.app.get("/v1.0/login%s" % query_string, follow_redirects=False)
|
||||
# self.assertTrue(rv.status_code == 302)
|
||||
# self.assertTrue(str.startswith(rv.location, redirect_url))
|
||||
#
|
||||
# user_model = session.query(UserModel).filter_by(uid=uid).first()
|
||||
# self.assertIsNotNone(user_model.ldap_info.display_name)
|
||||
# self.assertEqual(user_model.uid, uid)
|
||||
# self.assertTrue('user' in g, 'User should be in Flask globals')
|
||||
# user = UserService.current_user(allow_admin_impersonate=True)
|
||||
# self.assertEqual(uid, user.uid, 'Logged in user should match given user uid')
|
||||
|
||||
return dict(Authorization="Bearer " + user.encode_auth_token())
|
||||
|
|
|
@ -1,5 +1,4 @@
|
|||
"""User."""
|
||||
from typing import Dict
|
||||
from typing import Optional
|
||||
|
||||
from tests.spiffworkflow_backend.helpers.example_data import ExampleDataLoader
|
||||
|
@ -9,7 +8,6 @@ from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
|||
)
|
||||
from spiffworkflow_backend.models.process_group import ProcessGroup
|
||||
from spiffworkflow_backend.models.process_model import ProcessModelInfo
|
||||
from spiffworkflow_backend.models.user import UserModel
|
||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||
|
||||
|
||||
|
@ -81,29 +79,3 @@ def load_test_spec(
|
|||
# query_string_list.append('redirect_url=%s' % redirect_url)
|
||||
#
|
||||
# return '?%s' % '&'.join(query_string_list)
|
||||
|
||||
|
||||
def logged_in_headers(
|
||||
user: UserModel, _redirect_url: str = "http://some/frontend/url"
|
||||
) -> Dict[str, str]:
|
||||
"""Logged_in_headers."""
|
||||
# if user is None:
|
||||
# uid = 'test_user'
|
||||
# user_info = {'uid': 'test_user'}
|
||||
# else:
|
||||
# uid = user.uid
|
||||
# user_info = {'uid': user.uid}
|
||||
|
||||
# query_string = user_info_to_query_string(user_info, redirect_url)
|
||||
# rv = self.app.get("/v1.0/login%s" % query_string, follow_redirects=False)
|
||||
# self.assertTrue(rv.status_code == 302)
|
||||
# self.assertTrue(str.startswith(rv.location, redirect_url))
|
||||
#
|
||||
# user_model = session.query(UserModel).filter_by(uid=uid).first()
|
||||
# self.assertIsNotNone(user_model.ldap_info.display_name)
|
||||
# self.assertEqual(user_model.uid, uid)
|
||||
# self.assertTrue('user' in g, 'User should be in Flask globals')
|
||||
# user = UserService.current_user(allow_admin_impersonate=True)
|
||||
# self.assertEqual(uid, user.uid, 'Logged in user should match given user uid')
|
||||
|
||||
return dict(Authorization="Bearer " + user.encode_auth_token())
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
from flask.app import Flask
|
||||
from flask.testing import FlaskClient
|
||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||
from tests.spiffworkflow_backend.helpers.test_data import logged_in_headers
|
||||
|
||||
|
||||
class TestLoggingService(BaseTest):
|
||||
|
@ -15,7 +14,7 @@ class TestLoggingService(BaseTest):
|
|||
process_group_id = "test_logging_spiff_logger"
|
||||
process_model_id = "simple_script"
|
||||
user = self.find_or_create_user()
|
||||
headers = logged_in_headers(user)
|
||||
headers = self.logged_in_headers(user)
|
||||
response = self.create_process_instance(
|
||||
client, process_group_id, process_model_id, headers
|
||||
)
|
||||
|
@ -23,13 +22,13 @@ class TestLoggingService(BaseTest):
|
|||
process_instance_id = response.json["id"]
|
||||
response = client.post(
|
||||
f"/v1.0/process-models/{process_group_id}/{process_model_id}/process-instances/{process_instance_id}/run",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
||||
log_response = client.get(
|
||||
f"/v1.0/process-models/{process_group_id}/{process_model_id}/process-instances/{process_instance_id}/logs",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert log_response.status_code == 200
|
||||
assert log_response.json
|
||||
|
|
|
@ -10,7 +10,6 @@ from flask.testing import FlaskClient
|
|||
from flask_bpmn.models.db import db
|
||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||
from tests.spiffworkflow_backend.helpers.test_data import load_test_spec
|
||||
from tests.spiffworkflow_backend.helpers.test_data import logged_in_headers
|
||||
|
||||
from spiffworkflow_backend.exceptions.process_entity_not_found_error import (
|
||||
ProcessEntityNotFoundError,
|
||||
|
@ -72,7 +71,7 @@ class TestProcessApi(BaseTest):
|
|||
user = self.find_or_create_user()
|
||||
response = client.delete(
|
||||
f"/v1.0/process-models/{process_model.process_group_id}/{process_model.id}",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
|
@ -89,7 +88,7 @@ class TestProcessApi(BaseTest):
|
|||
test_process_group_id = "runs_without_input"
|
||||
test_process_model_id = "sample"
|
||||
user = self.find_or_create_user()
|
||||
headers = logged_in_headers(user)
|
||||
headers = self.logged_in_headers(user)
|
||||
# create an instance from a model
|
||||
response = self.create_process_instance(
|
||||
client, test_process_group_id, test_process_model_id, headers
|
||||
|
@ -102,7 +101,7 @@ class TestProcessApi(BaseTest):
|
|||
# try to delete the model
|
||||
response = client.delete(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{test_process_model_id}",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
|
||||
# make sure we get an error in the response
|
||||
|
@ -130,7 +129,7 @@ class TestProcessApi(BaseTest):
|
|||
user = self.find_or_create_user()
|
||||
response = client.put(
|
||||
f"/v1.0/process-models/{process_model.process_group_id}/{process_model.id}",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
content_type="application/json",
|
||||
data=json.dumps(ProcessModelInfoSchema().dump(process_model)),
|
||||
)
|
||||
|
@ -160,7 +159,7 @@ class TestProcessApi(BaseTest):
|
|||
# get all models
|
||||
response = client.get(
|
||||
f"/v1.0/process-groups/{group_id}/process-models",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
assert len(response.json["results"]) == 5
|
||||
|
@ -171,7 +170,7 @@ class TestProcessApi(BaseTest):
|
|||
# get first page, 1 per page
|
||||
response = client.get(
|
||||
f"/v1.0/process-groups/{group_id}/process-models?page=1&per_page=1",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
assert len(response.json["results"]) == 1
|
||||
|
@ -183,7 +182,7 @@ class TestProcessApi(BaseTest):
|
|||
# get second page, 1 per page
|
||||
response = client.get(
|
||||
f"/v1.0/process-groups/{group_id}/process-models?page=2&per_page=1",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
assert len(response.json["results"]) == 1
|
||||
|
@ -195,7 +194,7 @@ class TestProcessApi(BaseTest):
|
|||
# get first page, 3 per page
|
||||
response = client.get(
|
||||
f"/v1.0/process-groups/{group_id}/process-models?page=1&per_page=3",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
assert len(response.json["results"]) == 3
|
||||
|
@ -207,7 +206,7 @@ class TestProcessApi(BaseTest):
|
|||
# get second page, 3 per page
|
||||
response = client.get(
|
||||
f"/v1.0/process-groups/{group_id}/process-models?page=2&per_page=3",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
# there should only be 2 left
|
||||
assert response.json is not None
|
||||
|
@ -230,7 +229,7 @@ class TestProcessApi(BaseTest):
|
|||
user = self.find_or_create_user()
|
||||
response = client.post(
|
||||
"/v1.0/process-groups",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
content_type="application/json",
|
||||
data=json.dumps(ProcessGroupSchema().dump(process_group)),
|
||||
)
|
||||
|
@ -263,7 +262,8 @@ class TestProcessApi(BaseTest):
|
|||
assert persisted.id == process_group_id
|
||||
|
||||
client.delete(
|
||||
f"/v1.0/process-groups/{process_group_id}", headers=logged_in_headers(user)
|
||||
f"/v1.0/process-groups/{process_group_id}",
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
|
||||
with pytest.raises(ProcessEntityNotFoundError):
|
||||
|
@ -288,7 +288,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.put(
|
||||
f"/v1.0/process-groups/{group_id}",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
content_type="application/json",
|
||||
data=json.dumps(ProcessGroupSchema().dump(process_group)),
|
||||
)
|
||||
|
@ -313,7 +313,7 @@ class TestProcessApi(BaseTest):
|
|||
# get all groups
|
||||
response = client.get(
|
||||
"/v1.0/process-groups",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
assert len(response.json["results"]) == 5
|
||||
|
@ -324,7 +324,7 @@ class TestProcessApi(BaseTest):
|
|||
# get first page, one per page
|
||||
response = client.get(
|
||||
"/v1.0/process-groups?page=1&per_page=1",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
assert len(response.json["results"]) == 1
|
||||
|
@ -336,7 +336,7 @@ class TestProcessApi(BaseTest):
|
|||
# get second page, one per page
|
||||
response = client.get(
|
||||
"/v1.0/process-groups?page=2&per_page=1",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
assert len(response.json["results"]) == 1
|
||||
|
@ -348,7 +348,7 @@ class TestProcessApi(BaseTest):
|
|||
# get first page, 3 per page
|
||||
response = client.get(
|
||||
"/v1.0/process-groups?page=1&per_page=3",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
assert len(response.json["results"]) == 3
|
||||
|
@ -362,7 +362,7 @@ class TestProcessApi(BaseTest):
|
|||
# get second page, 3 per page
|
||||
response = client.get(
|
||||
"/v1.0/process-groups?page=2&per_page=3",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
# there should only be 2 left
|
||||
assert response.json is not None
|
||||
|
@ -387,7 +387,7 @@ class TestProcessApi(BaseTest):
|
|||
data=data,
|
||||
follow_redirects=True,
|
||||
content_type="multipart/form-data",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
|
||||
assert response.status_code == 400
|
||||
|
@ -408,7 +408,7 @@ class TestProcessApi(BaseTest):
|
|||
data=data,
|
||||
follow_redirects=True,
|
||||
content_type="multipart/form-data",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
|
||||
assert response.status_code == 400
|
||||
|
@ -430,7 +430,7 @@ class TestProcessApi(BaseTest):
|
|||
data=data,
|
||||
follow_redirects=True,
|
||||
content_type="multipart/form-data",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
|
@ -439,7 +439,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{spec.process_group_id}/{spec.id}/files/random_fact.svg",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
updated_file = json.loads(response.get_data(as_text=True))
|
||||
|
@ -457,7 +457,7 @@ class TestProcessApi(BaseTest):
|
|||
response = client.delete(
|
||||
f"/v1.0/process-models/INCORRECT-NON-EXISTENT-GROUP/{spec.id}/files/random_fact.svg",
|
||||
follow_redirects=True,
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
|
||||
assert response.status_code == 400
|
||||
|
@ -475,7 +475,7 @@ class TestProcessApi(BaseTest):
|
|||
response = client.delete(
|
||||
f"/v1.0/process-models/{spec.process_group_id}/{spec.id}/files/random_fact_DOES_NOT_EXIST.svg",
|
||||
follow_redirects=True,
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
|
||||
assert response.status_code == 400
|
||||
|
@ -493,7 +493,7 @@ class TestProcessApi(BaseTest):
|
|||
response = client.delete(
|
||||
f"/v1.0/process-models/{spec.process_group_id}/{spec.id}/files/random_fact.svg",
|
||||
follow_redirects=True,
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
|
@ -502,7 +502,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{spec.process_group_id}/{spec.id}/files/random_fact.svg",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 404
|
||||
|
||||
|
@ -516,7 +516,7 @@ class TestProcessApi(BaseTest):
|
|||
load_test_spec(process_model_dir_name, process_group_id=test_process_group_id)
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{process_model_dir_name}/files/hello_world.bpmn",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
|
@ -532,7 +532,7 @@ class TestProcessApi(BaseTest):
|
|||
spec = load_test_spec("hello_world")
|
||||
response = client.post(
|
||||
f"/v1.0/process-models/{spec.process_group_id}/{spec.id}/process-instances",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 201
|
||||
assert response.json is not None
|
||||
|
@ -544,7 +544,9 @@ class TestProcessApi(BaseTest):
|
|||
) -> None:
|
||||
"""Test_get_process_groups_when_none."""
|
||||
user = self.find_or_create_user()
|
||||
response = client.get("/v1.0/process-groups", headers=logged_in_headers(user))
|
||||
response = client.get(
|
||||
"/v1.0/process-groups", headers=self.logged_in_headers(user)
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
assert response.json["results"] == []
|
||||
|
@ -555,7 +557,9 @@ class TestProcessApi(BaseTest):
|
|||
"""Test_get_process_groups_when_there_are_some."""
|
||||
user = self.find_or_create_user()
|
||||
load_test_spec("hello_world")
|
||||
response = client.get("/v1.0/process-groups", headers=logged_in_headers(user))
|
||||
response = client.get(
|
||||
"/v1.0/process-groups", headers=self.logged_in_headers(user)
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
assert len(response.json["results"]) == 1
|
||||
|
@ -573,7 +577,7 @@ class TestProcessApi(BaseTest):
|
|||
load_test_spec(process_model_dir_name, process_group_id=test_process_group_id)
|
||||
response = client.get(
|
||||
f"/v1.0/process-groups/{test_process_group_id}",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
|
@ -590,7 +594,7 @@ class TestProcessApi(BaseTest):
|
|||
load_test_spec(process_model_dir_name, process_group_id=test_process_group_id)
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{process_model_dir_name}",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
|
@ -607,7 +611,7 @@ class TestProcessApi(BaseTest):
|
|||
group_id = self.create_process_group(client, user, "my_group")
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{group_id}/{process_model_dir_name}",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 400
|
||||
assert response.json is not None
|
||||
|
@ -620,7 +624,7 @@ class TestProcessApi(BaseTest):
|
|||
test_process_group_id = "runs_without_input"
|
||||
test_process_model_id = "sample"
|
||||
user = self.find_or_create_user()
|
||||
headers = logged_in_headers(user)
|
||||
headers = self.logged_in_headers(user)
|
||||
response = self.create_process_instance(
|
||||
client, test_process_group_id, test_process_model_id, headers
|
||||
)
|
||||
|
@ -636,7 +640,7 @@ class TestProcessApi(BaseTest):
|
|||
process_group_id = "runs_without_input"
|
||||
process_model_id = "sample"
|
||||
user = self.find_or_create_user()
|
||||
headers = logged_in_headers(user)
|
||||
headers = self.logged_in_headers(user)
|
||||
response = self.create_process_instance(
|
||||
client, process_group_id, process_model_id, headers
|
||||
)
|
||||
|
@ -644,7 +648,7 @@ class TestProcessApi(BaseTest):
|
|||
process_instance_id = response.json["id"]
|
||||
response = client.post(
|
||||
f"/v1.0/process-models/{process_group_id}/{process_model_id}/process-instances/{process_instance_id}/run",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
|
||||
assert response.json is not None
|
||||
|
@ -676,7 +680,7 @@ class TestProcessApi(BaseTest):
|
|||
response = client.post(
|
||||
f"/v1.0/messages/{message_model_identifier}",
|
||||
content_type="application/json",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
data=json.dumps({"payload": payload}),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
|
@ -716,7 +720,7 @@ class TestProcessApi(BaseTest):
|
|||
client,
|
||||
process_model.process_group_id,
|
||||
process_model.id,
|
||||
logged_in_headers(user),
|
||||
self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
process_instance_id = response.json["id"]
|
||||
|
@ -724,7 +728,7 @@ class TestProcessApi(BaseTest):
|
|||
response = client.post(
|
||||
f"/v1.0/process-models/{process_model.process_group_id}/"
|
||||
f"{process_model.id}/process-instances/{process_instance_id}/run",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
|
||||
assert response.json is not None
|
||||
|
@ -732,7 +736,7 @@ class TestProcessApi(BaseTest):
|
|||
response = client.post(
|
||||
f"/v1.0/messages/{message_model_identifier}",
|
||||
content_type="application/json",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
data=json.dumps(
|
||||
{"payload": payload, "process_instance_id": process_instance_id}
|
||||
),
|
||||
|
@ -767,7 +771,7 @@ class TestProcessApi(BaseTest):
|
|||
client,
|
||||
process_model.process_group_id,
|
||||
process_model.id,
|
||||
logged_in_headers(user),
|
||||
self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
process_instance_id = response.json["id"]
|
||||
|
@ -775,7 +779,7 @@ class TestProcessApi(BaseTest):
|
|||
response = client.post(
|
||||
f"/v1.0/process-models/{process_model.process_group_id}/"
|
||||
f"{process_model.id}/process-instances/{process_instance_id}/run",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
|
@ -783,7 +787,7 @@ class TestProcessApi(BaseTest):
|
|||
response = client.post(
|
||||
f"/v1.0/process-models/{process_model.process_group_id}/"
|
||||
f"{process_model.id}/process-instances/{process_instance_id}/terminate",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
|
@ -802,7 +806,7 @@ class TestProcessApi(BaseTest):
|
|||
process_model_id = "user_task"
|
||||
|
||||
user = self.find_or_create_user()
|
||||
headers = logged_in_headers(user)
|
||||
headers = self.logged_in_headers(user)
|
||||
response = self.create_process_instance(
|
||||
client, process_group_id, process_model_id, headers
|
||||
)
|
||||
|
@ -811,7 +815,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.post(
|
||||
f"/v1.0/process-models/{process_group_id}/{process_model_id}/process-instances/{process_instance_id}/run",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
|
||||
assert response.json is not None
|
||||
|
@ -826,7 +830,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
delete_response = client.delete(
|
||||
f"/v1.0/process-models/{process_group_id}/{process_model_id}/process-instances/{process_instance_id}",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert delete_response.status_code == 200
|
||||
|
||||
|
@ -838,7 +842,7 @@ class TestProcessApi(BaseTest):
|
|||
process_model_id = "user_task"
|
||||
|
||||
user = self.find_or_create_user()
|
||||
headers = logged_in_headers(user)
|
||||
headers = self.logged_in_headers(user)
|
||||
response = self.create_process_instance(
|
||||
client, process_group_id, process_model_id, headers
|
||||
)
|
||||
|
@ -847,7 +851,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.post(
|
||||
f"/v1.0/process-models/{process_group_id}/{process_model_id}/process-instances/{process_instance_id}/run",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
|
||||
assert response.json is not None
|
||||
|
@ -868,14 +872,14 @@ class TestProcessApi(BaseTest):
|
|||
test_process_group_id = "runs_without_input"
|
||||
process_model_dir_name = "sample"
|
||||
user = self.find_or_create_user()
|
||||
headers = logged_in_headers(user)
|
||||
headers = self.logged_in_headers(user)
|
||||
self.create_process_instance(
|
||||
client, test_process_group_id, process_model_dir_name, headers
|
||||
)
|
||||
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{process_model_dir_name}/process-instances",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
|
@ -904,7 +908,7 @@ class TestProcessApi(BaseTest):
|
|||
test_process_group_id = "runs_without_input"
|
||||
process_model_dir_name = "sample"
|
||||
user = self.find_or_create_user()
|
||||
headers = logged_in_headers(user)
|
||||
headers = self.logged_in_headers(user)
|
||||
self.create_process_instance(
|
||||
client, test_process_group_id, process_model_dir_name, headers
|
||||
)
|
||||
|
@ -923,7 +927,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{process_model_dir_name}/process-instances?per_page=2&page=3",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
|
@ -934,7 +938,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{process_model_dir_name}/process-instances?per_page=2&page=1",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
|
@ -971,7 +975,7 @@ class TestProcessApi(BaseTest):
|
|||
# Without filtering we should get all 5 instances
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{test_process_model_id}/process-instances",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
results = response.json["results"]
|
||||
|
@ -982,7 +986,7 @@ class TestProcessApi(BaseTest):
|
|||
for i in range(5):
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{test_process_model_id}/process-instances?process_status={ProcessInstanceStatus[statuses[i]].value}",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
results = response.json["results"]
|
||||
|
@ -993,7 +997,7 @@ class TestProcessApi(BaseTest):
|
|||
# start > 1000 - this should eliminate the first
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{test_process_model_id}/process-instances?start_from=1001",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
results = response.json["results"]
|
||||
|
@ -1004,7 +1008,7 @@ class TestProcessApi(BaseTest):
|
|||
# start > 2000, end < 5000 - this should eliminate the first 2 and the last
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{test_process_model_id}/process-instances?start_from=2001&end_till=5999",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
results = response.json["results"]
|
||||
|
@ -1015,7 +1019,7 @@ class TestProcessApi(BaseTest):
|
|||
# start > 1000, start < 4000 - this should eliminate the first and the last 2
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{test_process_model_id}/process-instances?start_from=1001&start_till=3999",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
results = response.json["results"]
|
||||
|
@ -1026,7 +1030,7 @@ class TestProcessApi(BaseTest):
|
|||
# end > 2000, end < 6000 - this should eliminate the first and the last
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{test_process_model_id}/process-instances?end_from=2001&end_till=5999",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.json is not None
|
||||
results = response.json["results"]
|
||||
|
@ -1041,7 +1045,7 @@ class TestProcessApi(BaseTest):
|
|||
process_group_identifier = "runs_without_input"
|
||||
process_model_identifier = "sample"
|
||||
user = self.find_or_create_user()
|
||||
logged_in_headers(user)
|
||||
self.logged_in_headers(user)
|
||||
load_test_spec(
|
||||
process_model_identifier, process_group_id=process_group_identifier
|
||||
)
|
||||
|
@ -1056,7 +1060,7 @@ class TestProcessApi(BaseTest):
|
|||
)
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{process_group_identifier}/{process_model_identifier}/process-instances/reports",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
|
@ -1105,7 +1109,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{process_model_dir_name}/process-instances/reports/sure",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
|
@ -1158,7 +1162,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{process_model_dir_name}/process-instances/reports/sure?grade_level=1",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
assert response.json is not None
|
||||
|
@ -1178,7 +1182,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.get(
|
||||
f"/v1.0/process-models/{test_process_group_id}/{process_model_dir_name}/process-instances/reports/sure?grade_level=1",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 404
|
||||
data = json.loads(response.get_data(as_text=True))
|
||||
|
@ -1192,7 +1196,7 @@ class TestProcessApi(BaseTest):
|
|||
user: UserModel,
|
||||
) -> Any:
|
||||
"""Setup_testing_instance."""
|
||||
headers = logged_in_headers(user)
|
||||
headers = self.logged_in_headers(user)
|
||||
response = self.create_process_instance(
|
||||
client, process_group_id, process_model_id, headers
|
||||
)
|
||||
|
@ -1222,7 +1226,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.post(
|
||||
f"/v1.0/process-models/{process_group_id}/{process_model_id}/process-instances/{process_instance_id}/run",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 400
|
||||
|
||||
|
@ -1273,7 +1277,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.post(
|
||||
f"/v1.0/process-models/{process_group_id}/{process_model_id}/process-instances/{process_instance_id}/run",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 400
|
||||
|
||||
|
@ -1308,7 +1312,7 @@ class TestProcessApi(BaseTest):
|
|||
|
||||
response = client.post(
|
||||
f"/v1.0/process-models/{process_group_id}/{process_model_id}/process-instances/{process_instance_id}/run",
|
||||
headers=logged_in_headers(user),
|
||||
headers=self.logged_in_headers(user),
|
||||
)
|
||||
assert response.status_code == 400
|
||||
assert len(outbox) == 1
|
||||
|
|
|
@ -1,28 +1,25 @@
|
|||
"""Test_secret_service."""
|
||||
import json
|
||||
|
||||
from flask.app import Flask
|
||||
from flask.testing import FlaskClient
|
||||
from tests.spiffworkflow_backend.helpers.base_test import BaseTest
|
||||
|
||||
from spiffworkflow_backend.models.secret_model import SecretAllowedProcessPathModel
|
||||
from spiffworkflow_backend.models.secret_model import SecretModel
|
||||
from spiffworkflow_backend.models.secret_model import SecretModelSchema
|
||||
from spiffworkflow_backend.models.user import UserModel
|
||||
from spiffworkflow_backend.services.file_system_service import FileSystemService
|
||||
from spiffworkflow_backend.services.process_model_service import ProcessModelService
|
||||
from spiffworkflow_backend.services.secret_service import SecretService
|
||||
|
||||
|
||||
class TestSecretService(BaseTest):
|
||||
"""TestSecretService."""
|
||||
|
||||
test_service = "test_service"
|
||||
test_client = "test_client"
|
||||
test_key = "1234567890"
|
||||
test_key = "test_key"
|
||||
test_value = "test_value"
|
||||
|
||||
def add_test_secret(self, user: UserModel) -> SecretModel:
|
||||
"""Add_test_secret."""
|
||||
return SecretService().add_secret(
|
||||
self.test_service, self.test_client, self.test_key, user.id
|
||||
)
|
||||
return SecretService().add_secret(self.test_key, self.test_value, user.id)
|
||||
|
||||
def test_add_secret(self, app: Flask, with_db_and_bpmn_file_cleanup: None) -> None:
|
||||
"""Test_add_secret."""
|
||||
|
@ -30,9 +27,8 @@ class TestSecretService(BaseTest):
|
|||
test_secret = self.add_test_secret(user)
|
||||
|
||||
assert test_secret is not None
|
||||
assert test_secret.service == self.test_service
|
||||
assert test_secret.client == self.test_client
|
||||
assert test_secret.key == self.test_key
|
||||
assert test_secret.value == self.test_value
|
||||
assert test_secret.creator_user_id == user.id
|
||||
|
||||
def test_get_secret(self, app: Flask, with_db_and_bpmn_file_cleanup: None) -> None:
|
||||
|
@ -40,78 +36,115 @@ class TestSecretService(BaseTest):
|
|||
user = self.find_or_create_user()
|
||||
self.add_test_secret(user)
|
||||
|
||||
secret = SecretService().get_secret(self.test_service, self.test_client)
|
||||
secret = SecretService().get_secret(self.test_key)
|
||||
assert secret is not None
|
||||
assert secret == self.test_key
|
||||
assert secret == self.test_value
|
||||
|
||||
def test_get_secret_bad_service(
|
||||
def test_get_secret_bad_key(
|
||||
self, app: Flask, with_db_and_bpmn_file_cleanup: None
|
||||
) -> None:
|
||||
"""Test_get_secret_bad_service."""
|
||||
user = self.find_or_create_user()
|
||||
self.add_test_secret(user)
|
||||
|
||||
bad_secret = SecretService().get_secret("bad_service", self.test_client)
|
||||
bad_secret = SecretService().get_secret("bad_key")
|
||||
assert bad_secret is None
|
||||
|
||||
def test_get_secret_bad_client(
|
||||
self, app: Flask, with_db_and_bpmn_file_cleanup: None
|
||||
) -> None:
|
||||
"""Test_get_secret_bad_client."""
|
||||
user = self.find_or_create_user()
|
||||
self.add_test_secret(user)
|
||||
|
||||
bad_secret = SecretService().get_secret(self.test_service, "bad_client")
|
||||
assert bad_secret is None
|
||||
|
||||
def test_secret_add_allowed_process(
|
||||
self, app: Flask, client: FlaskClient, with_db_and_bpmn_file_cleanup: None
|
||||
) -> None:
|
||||
"""Test_secret_add_allowed_process."""
|
||||
process_group_id = "test"
|
||||
process_group_display_name = "My Test Process Group"
|
||||
|
||||
user = self.find_or_create_user()
|
||||
self.create_process_group(
|
||||
client, user, process_group_id, display_name=process_group_display_name
|
||||
)
|
||||
|
||||
process_model_id = "make_cookies"
|
||||
process_model_display_name = "Cooooookies"
|
||||
process_model_description = "Om nom nom delicious cookies"
|
||||
self.create_process_model(
|
||||
client,
|
||||
process_group_id=process_group_id,
|
||||
process_model_id=process_model_id,
|
||||
process_model_display_name=process_model_display_name,
|
||||
process_model_description=process_model_description,
|
||||
)
|
||||
|
||||
process_model_info = ProcessModelService().get_process_model(
|
||||
process_model_id, process_group_id
|
||||
)
|
||||
process_model_relative_path = FileSystemService.process_model_relative_path(
|
||||
process_model_info
|
||||
)
|
||||
|
||||
test_secret = self.add_test_secret(user)
|
||||
allowed_process_model = SecretService().add_allowed_process(
|
||||
secret_id=test_secret.id, allowed_relative_path=process_model_relative_path
|
||||
)
|
||||
assert allowed_process_model is not None
|
||||
assert isinstance(allowed_process_model, SecretAllowedProcessPathModel)
|
||||
assert allowed_process_model.secret_id == test_secret.id
|
||||
assert (
|
||||
allowed_process_model.allowed_relative_path == process_model_relative_path
|
||||
)
|
||||
|
||||
assert len(test_secret.allowed_processes) == 1
|
||||
assert test_secret.allowed_processes[0] == allowed_process_model
|
||||
# def test_secret_add_allowed_process(
|
||||
# self, app: Flask, client: FlaskClient, with_db_and_bpmn_file_cleanup: None
|
||||
# ) -> None:
|
||||
# """Test_secret_add_allowed_process."""
|
||||
# process_group_id = "test"
|
||||
# process_group_display_name = "My Test Process Group"
|
||||
#
|
||||
# user = self.find_or_create_user()
|
||||
# self.create_process_group(
|
||||
# client, user, process_group_id, display_name=process_group_display_name
|
||||
# )
|
||||
#
|
||||
# process_model_id = "make_cookies"
|
||||
# process_model_display_name = "Cooooookies"
|
||||
# process_model_description = "Om nom nom delicious cookies"
|
||||
# self.create_process_model(
|
||||
# client,
|
||||
# process_group_id=process_group_id,
|
||||
# process_model_id=process_model_id,
|
||||
# process_model_display_name=process_model_display_name,
|
||||
# process_model_description=process_model_description,
|
||||
# )
|
||||
#
|
||||
# process_model_info = ProcessModelService().get_process_model(
|
||||
# process_model_id, process_group_id
|
||||
# )
|
||||
# process_model_relative_path = FileSystemService.process_model_relative_path(
|
||||
# process_model_info
|
||||
# )
|
||||
#
|
||||
# test_secret = self.add_test_secret(user)
|
||||
# allowed_process_model = SecretService().add_allowed_process(
|
||||
# secret_id=test_secret.id, allowed_relative_path=process_model_relative_path
|
||||
# )
|
||||
# assert allowed_process_model is not None
|
||||
# assert isinstance(allowed_process_model, SecretAllowedProcessPathModel)
|
||||
# assert allowed_process_model.secret_id == test_secret.id
|
||||
# assert (
|
||||
# allowed_process_model.allowed_relative_path == process_model_relative_path
|
||||
# )
|
||||
#
|
||||
# assert len(test_secret.allowed_processes) == 1
|
||||
# assert test_secret.allowed_processes[0] == allowed_process_model
|
||||
|
||||
def test_update_secret(self) -> None:
|
||||
"""Test update secret."""
|
||||
...
|
||||
|
||||
def test_delete_secret(self) -> None:
|
||||
def test_delete_secret(
|
||||
self, app: Flask, client: FlaskClient, with_db_and_bpmn_file_cleanup: None
|
||||
) -> None:
|
||||
"""Test delete secret."""
|
||||
...
|
||||
user = self.find_or_create_user()
|
||||
self.add_test_secret(user)
|
||||
SecretService.delete_secret(self.test_key)
|
||||
|
||||
|
||||
# class TestSecretServiceApi(BaseTest):
|
||||
# """TestSecretServiceApi."""
|
||||
#
|
||||
# test_service = "test_service"
|
||||
# test_client = "test_client"
|
||||
# test_key = "1234567890"
|
||||
#
|
||||
# def test_add_secret(
|
||||
# self, app: Flask, client: FlaskClient, with_db_and_bpmn_file_cleanup: None
|
||||
# ) -> None:
|
||||
# """Test_add_secret."""
|
||||
# user = self.find_or_create_user()
|
||||
# secret_model = SecretModel(
|
||||
# service=self.test_service,
|
||||
# client=self.test_client,
|
||||
# key=self.test_key,
|
||||
# creator_user_id=user.id,
|
||||
# )
|
||||
# # data = json.dumps({"service": self.test_service,
|
||||
# # "client": self.test_client,
|
||||
# # "key": self.test_key})
|
||||
# data = json.dumps(SecretModelSchema().dump(secret_model))
|
||||
# response = client.post(
|
||||
# "/v1.0/secrets",
|
||||
# headers=self.logged_in_headers(user),
|
||||
# content_type="application/json",
|
||||
# data=data,
|
||||
# )
|
||||
# print(response)
|
||||
#
|
||||
# def test_get_secret(
|
||||
# self, app: Flask, client: FlaskClient, with_db_and_bpmn_file_cleanup: None
|
||||
# ) -> None:
|
||||
# """Test get secret."""
|
||||
# ...
|
||||
#
|
||||
# def test_delete_secret(
|
||||
# self, app: Flask, client: FlaskClient, with_db_and_bpmn_file_cleanup: None
|
||||
# ) -> None:
|
||||
# """Test delete secret."""
|
||||
# ...
|
||||
|
|
Loading…
Reference in New Issue