Skip to content
Snippets Groups Projects
Commit 9e313c12 authored by Katarzyna Kobierska's avatar Katarzyna Kobierska
Browse files

Add class method to encapsulate exception

parent de2e8d4a
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -7,31 +7,29 @@ module API
 
desc 'Validation of .gitlab-ci.yml content'
post do
status 200
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
response = {
status: '',
errors: [],
jobs: []
}
 
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
Loading
Loading
Loading
Loading
@@ -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
Loading
Loading
Loading
Loading
@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment