Skip to content

Commit

Permalink
Check if a workflow payload is valid during sync
Browse files Browse the repository at this point in the history
When syncing a repository and creating workflows check if the payload is
valid and if it isn't set a (hopefully) helpful error message.
  • Loading branch information
agrare committed Apr 8, 2024
1 parent 049c589 commit 6275276
Show file tree
Hide file tree
Showing 3 changed files with 62 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -76,23 +76,25 @@ def sync_from_content(to_delete)
end

def create_workflow_from_payload(name, payload)
floe_workflow =
floe_workflow, payload_error =
begin
Floe::Workflow.new(payload)
rescue Floe::InvalidWorkflowError
nil
rescue Floe::InvalidWorkflowError => err
[nil, err.message]
end

description = floe_workflow&.comment

configuration_script_payloads.find_or_initialize_by(:name => name).tap do |wf|
wf.update!(
:name => name,
:description => description,
:manager_id => manager_id,
:type => self.class.module_parent::Workflow.name,
:payload => payload,
:payload_type => "json"
:name => name,
:description => description,
:manager_id => manager_id,
:type => self.class.module_parent::Workflow.name,
:payload => payload,
:payload_type => "json",
:payload_valid => !!floe_workflow,
:payload_error => payload_error
)
end
end
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -194,13 +194,45 @@ def files_in_repository(git_repo_dir)
record = build_record

expect(record.configuration_script_payloads.first).to have_attributes(
:name => "hello_world.asl",
:description => "hello world",
:payload => a_string_including("\"Comment\": \"hello world\""),
:payload_type => "json"
:name => "hello_world.asl",
:description => "hello world",
:payload => a_string_including("\"Comment\": \"hello world\""),
:payload_type => "json",
:payload_valid => true,
:payload_error => nil
)
end

context "with workflows with invalid json" do
let(:repo_dir_structure) { %w[invalid_json.asl] }

it "sets the payload_valid and payload_error attributes" do
record = build_record
expect(record.configuration_script_payloads.first).to have_attributes(
:name => "invalid_json.asl",
:payload => "{\"Invalid Json\"\n",
:payload_type => "json",
:payload_valid => false,
:payload_error => "unexpected token at '{\"Invalid Json\"\n'"
)
end
end

context "with workflows with missing states" do
let(:repo_dir_structure) { %w[missing_states.asl] }

it "sets the payload_valid and payload_error attributes" do
record = build_record
expect(record.configuration_script_payloads.first).to have_attributes(
:name => "missing_states.asl",
:payload => "{\"Comment\": \"Missing States\"}\n",
:payload_type => "json",
:payload_valid => false,
:payload_error => "Missing field \"States\""
)
end
end

context "with a nested dir" do
let(:nested_repo) { File.join(clone_dir, "hello_world_nested") }

Expand Down
19 changes: 15 additions & 4 deletions spec/support/fake_workflows_repo.rb
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,21 @@ def file_content(full_path)
dummy_workflow_data_for(full_path) if full_path.fnmatch?("**/*.asl", File::FNM_EXTGLOB)
end

def dummy_workflow_data_for(_filename)
<<~WORKFLOW_DATA
{"Comment": "hello world", "States": {"Start": {"Type": "Succeed"}}, "StartAt": "Start"}
WORKFLOW_DATA
def dummy_workflow_data_for(filename)
case filename.to_s
when /invalid_json.asl$/
<<~WORKFLOW_DATA
{"Invalid Json"
WORKFLOW_DATA
when /missing_states.asl$/
<<~WORKFLOW_DATA
{"Comment": "Missing States"}
WORKFLOW_DATA
else
<<~WORKFLOW_DATA
{"Comment": "hello world", "States": {"Start": {"Type": "Succeed"}}, "StartAt": "Start"}
WORKFLOW_DATA
end
end
end
end
Expand Down

0 comments on commit 6275276

Please sign in to comment.