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

Add class method to encapsulate exception

parent de2e8d4a
...@@ -11,15 +11,15 @@ module Ci ...@@ -11,15 +11,15 @@ module Ci
if @content.blank? if @content.blank?
@status = false @status = false
@error = "Please provide content of .gitlab-ci.yml" @error = "Please provide content of .gitlab-ci.yml"
elsif Ci::GitlabCiYamlProcessor.validate(@content) != "valid"
@status = false
@error = Ci::GitlabCiYamlProcessor.validate(@content)
else else
@config_processor = Ci::GitlabCiYamlProcessor.new(@content) @config_processor = Ci::GitlabCiYamlProcessor.new(@content)
@stages = @config_processor.stages @stages = @config_processor.stages
@builds = @config_processor.builds @builds = @config_processor.builds
@status = true @status = true
end end
rescue Ci::GitlabCiYamlProcessor::ValidationError, Psych::SyntaxError => e
@error = e.message
@status = false
rescue rescue
@error = 'Undefined error' @error = 'Undefined error'
@status = false @status = false
......
...@@ -7,15 +7,20 @@ module API ...@@ -7,15 +7,20 @@ module API
desc 'Validation of .gitlab-ci.yml content' desc 'Validation of .gitlab-ci.yml content'
post do post do
status 200
begin
response = { response = {
status: '', status: '',
errors: [], errors: [],
jobs: [] 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 = Ci::GitlabCiYamlProcessor.new(params[:content])
config_processor.builds.each do |build| config_processor.builds.each do |build|
...@@ -23,16 +28,9 @@ module API ...@@ -23,16 +28,9 @@ module API
response[:status] = 'valid' response[:status] = 'valid'
end end
response
rescue Ci::GitlabCiYamlProcessor::ValidationError, Psych::SyntaxError => e
status 200 status 200
response[:errors].push(e.message)
response[:status] = 'invalid'
response response
end end
end end
end end
end
end end
...@@ -78,6 +78,15 @@ module Ci ...@@ -78,6 +78,15 @@ module Ci
} }
end end
def self.validate(content)
begin
Ci::GitlabCiYamlProcessor.new(content)
"valid"
rescue ValidationError, Psych::SyntaxError => e
e.message
end
end
private private
def initial_parsing def initial_parsing
......
...@@ -1250,5 +1250,24 @@ EOT ...@@ -1250,5 +1250,24 @@ EOT
end end
end 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
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