Commit 9e313c12 authored by Katarzyna Kobierska's avatar Katarzyna Kobierska

Add class method to encapsulate exception

parent de2e8d4a
......@@ -11,15 +11,15 @@ module Ci
if @content.blank?
@status = false
@error = "Please provide content of .gitlab-ci.yml"
elsif Ci::GitlabCiYamlProcessor.validate(@content) != "valid"
@status = false
@error = Ci::GitlabCiYamlProcessor.validate(@content)
else
@config_processor = Ci::GitlabCiYamlProcessor.new(@content)
@stages = @config_processor.stages
@builds = @config_processor.builds
@status = true
end
rescue Ci::GitlabCiYamlProcessor::ValidationError, Psych::SyntaxError => e
@error = e.message
@status = false
rescue
@error = 'Undefined error'
@status = false
......
......@@ -7,15 +7,20 @@ module API
desc 'Validation of .gitlab-ci.yml content'
post do
status 200
begin
response = {
status: '',
errors: [],
jobs: []
}
if Ci::GitlabCiYamlProcessor.validate(@content) != "valid"
status 200
response[:errors].push(e.message)
response[:status] = 'invalid'
response
end
config_processor = Ci::GitlabCiYamlProcessor.new(params[:content])
config_processor.builds.each do |build|
......@@ -23,16 +28,9 @@ module API
response[:status] = 'valid'
end
response
rescue Ci::GitlabCiYamlProcessor::ValidationError, Psych::SyntaxError => e
status 200
response[:errors].push(e.message)
response[:status] = 'invalid'
response
end
end
end
end
end
......@@ -78,6 +78,15 @@ module Ci
}
end
def self.validate(content)
begin
Ci::GitlabCiYamlProcessor.new(content)
"valid"
rescue ValidationError, Psych::SyntaxError => e
e.message
end
end
private
def initial_parsing
......
......@@ -1250,5 +1250,24 @@ EOT
end
end
end
describe "#validate(config)" do
describe "Error handling" do
it "returns error to parse YAML" do
config = YAML.dump("invalid: yaml: test")
expect(GitlabCiYamlProcessor.validate(config)).to eq "Invalid configuration format"
end
it "returns errors if tags parameter is invalid" do
config = YAML.dump({ rspec: { script: "test", tags: "mysql" } })
expect(GitlabCiYamlProcessor.validate(config)).to eq "jobs:rspec tags should be an array of strings"
end
it "does not return errors" do
config = File.read(Rails.root.join('spec/support/gitlab_stubs/gitlab_ci.yml'))
expect(GitlabCiYamlProcessor.validate(config)).to eq "valid"
end
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment