Source code for arcaflow_plugin_sdk.test_jsonschema

import dataclasses
import typing
import unittest
from typing import Tuple

from arcaflow_plugin_sdk import jsonschema, schema


[docs] class JSONSchemaTest(unittest.TestCase):
[docs] def test_step_input(self): @dataclasses.dataclass class Request: a: str b: str @dataclasses.dataclass class Response: b: str def noop_handler(input: Request) -> Tuple[str, typing.Union[Response]]: pass step = schema.StepType( id="test", display=schema.DisplayValue( name="Test step", description="This is just a test", ), input=schema.ScopeType( { "Request": schema.ObjectType( Request, { "a": schema.PropertyType( schema.StringType(), ), "field-b": schema.PropertyType( schema.IntType(), field_override="b" ), }, ) }, "Request", ), outputs={}, handler=noop_handler, step_object_constructor=None, signal_handler_method_names=None, signal_emitters=None, ) s = jsonschema.step_input(step) self.maxDiff = None self.assertEqual( { "$defs": { "Request": { "additionalProperties": False, "dependentRequired": {}, "properties": { "a": {"type": "string"}, "field-b": {"type": "integer"}, }, "required": ["a", "field-b"], "type": "object", } }, "$id": "test", "$schema": "https://json-schema.org/draft/2020-12/schema", "type": "object", "title": "Test step input", "description": "This is just a test", "properties": {"a": {"type": "string"}, "field-b": {"type": "integer"}}, "required": ["a", "field-b"], "dependentRequired": {}, "additionalProperties": False, }, s, )
[docs] def test_step_outputs(self): input_scope = schema.ScopeSchema( { "Request": schema.ObjectSchema( id="Request", properties={"a": schema.PropertySchema(schema.StringSchema())}, ) }, "Request", ) outputs = { "success": schema.StepOutputSchema( schema=schema.ScopeSchema( { "Response1": schema.ObjectSchema( id="Response1", properties={ "b": schema.PropertySchema(schema.StringSchema()) }, ) }, "Response1", ) ), "error": schema.StepOutputSchema( schema=schema.ScopeSchema( { "Response1": schema.ObjectSchema( id="Response1", properties={ "c": schema.PropertySchema(schema.StringSchema()) }, ) }, "Response1", ), error=True, ), } step = schema.StepSchema( id="test", display=schema.DisplayValue( name="Test step", description="This is just a test", ), input=input_scope, outputs=outputs, ) s = jsonschema.step_outputs(step) self.maxDiff = None self.assertEqual( { "$id": "test", "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "Test step outputs", "description": "This is just a test", "oneof": [ { "output_id": {"type": "string", "const": "success"}, "output_data": { "type": "object", "properties": {"b": {"type": "string"}}, "required": ["b"], "additionalProperties": False, "dependentRequired": {}, }, }, { "output_id": { "type": "string", "const": "error", }, "output_data": { "type": "object", "properties": {"c": {"type": "string"}}, "required": ["c"], "additionalProperties": False, "dependentRequired": {}, }, }, ], "$defs": { "Response1": { "type": "object", "properties": {"c": {"type": "string"}}, "required": ["c"], "additionalProperties": False, "dependentRequired": {}, } }, }, s, )
if __name__ == "__main__": unittest.main()