Add class method to encapsulate exception

This commit is contained in:
Katarzyna Kobierska 2016-08-25 13:40:35 +02:00
parent de2e8d4a55
commit 9e313c1294
4 changed files with 47 additions and 21 deletions

View file

@ -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

View file

@ -7,31 +7,29 @@ module API
desc 'Validation of .gitlab-ci.yml content'
post do
status 200
response = {
status: '',
errors: [],
jobs: []
}
begin
response = {
status: '',
errors: [],
jobs: []
}
config_processor = Ci::GitlabCiYamlProcessor.new(params[:content])
config_processor.builds.each do |build|
response[:jobs].push("#{build[:name]}")
response[:status] = 'valid'
end
response
rescue Ci::GitlabCiYamlProcessor::ValidationError, Psych::SyntaxError => e
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|
response[:jobs].push("#{build[:name]}")
response[:status] = 'valid'
end
status 200
response
end
end
end

View file

@ -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

View file

@ -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