Add class method to encapsulate exception
This commit is contained in:
parent
de2e8d4a55
commit
9e313c1294
4 changed files with 47 additions and 21 deletions
|
@ -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,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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue