Commit 0713a7c3 authored by Leandro Camargo's avatar Leandro Camargo

Add specs to cover the implemented feature and fix a small bug

parent 94eb2f47
...@@ -22,7 +22,7 @@ module Gitlab ...@@ -22,7 +22,7 @@ module Gitlab
if output_filter_value.start_with?('/') && output_filter_value.end_with?('/') if output_filter_value.start_with?('/') && output_filter_value.end_with?('/')
output_filter_value[1...-1] output_filter_value[1...-1]
else else
value[:output_filter] @config[:output_filter]
end end
end end
......
...@@ -4,6 +4,37 @@ module Ci ...@@ -4,6 +4,37 @@ module Ci
describe GitlabCiYamlProcessor, lib: true do describe GitlabCiYamlProcessor, lib: true do
let(:path) { 'path' } let(:path) { 'path' }
describe '#build_attributes' do
context 'Coverage entry' do
subject { described_class.new(config, path).build_attributes(:rspec) }
let(:config_base) { { rspec: { script: "rspec" } } }
let(:config) { YAML.dump(config_base) }
context 'when config has coverage set at the global scope' do
before do
config_base.update(
coverage: { output_filter: '\(\d+\.\d+\) covered' }
)
end
context 'and \'rspec\' job doesn\'t have coverage set' do
it { is_expected.to include(coverage_regex: '\(\d+\.\d+\) covered') }
end
context 'but \'rspec\' job also has coverage set' do
before do
config_base[:rspec].update(
coverage: { output_filter: '/Code coverage: \d+\.\d+/' }
)
end
it { is_expected.to include(coverage_regex: 'Code coverage: \d+\.\d+') }
end
end
end
end
describe "#builds_for_ref" do describe "#builds_for_ref" do
let(:type) { 'test' } let(:type) { 'test' }
......
require 'spec_helper'
describe Gitlab::Ci::Config::Entry::Coverage do
let(:entry) { described_class.new(config) }
describe 'validations' do
context 'when entry config value is correct' do
let(:config) { { output_filter: 'Code coverage: \d+\.\d+' } }
describe '#value' do
subject { entry.value }
it { is_expected.to eq config }
end
describe '#errors' do
subject { entry.errors }
it { is_expected.to be_empty }
end
describe '#valid?' do
subject { entry }
it { is_expected.to be_valid }
end
end
context 'when entry value is not correct' do
let(:config) { { output_filter: '(malformed regexp' } }
describe '#errors' do
subject { entry.errors }
it { is_expected.to include /coverage output filter must be a regular expression/ }
end
describe '#valid?' do
subject { entry }
it { is_expected.not_to be_valid }
end
end
end
end
...@@ -4,12 +4,19 @@ describe Gitlab::Ci::Config::Entry::Global do ...@@ -4,12 +4,19 @@ describe Gitlab::Ci::Config::Entry::Global do
let(:global) { described_class.new(hash) } let(:global) { described_class.new(hash) }
describe '.nodes' do describe '.nodes' do
it 'can contain global config keys' do subject { described_class.nodes }
expect(described_class.nodes).to include :before_script
end it { is_expected.to be_a Hash }
context 'when filtering all the entry/node names' do
subject { described_class.nodes.keys }
let(:result) do
%i[before_script image services after_script variables stages types
cache coverage]
end
it 'returns a hash' do it { is_expected.to match_array result }
expect(described_class.nodes).to be_a Hash
end end
end end
......
...@@ -3,6 +3,20 @@ require 'spec_helper' ...@@ -3,6 +3,20 @@ require 'spec_helper'
describe Gitlab::Ci::Config::Entry::Job do describe Gitlab::Ci::Config::Entry::Job do
let(:entry) { described_class.new(config, name: :rspec) } let(:entry) { described_class.new(config, name: :rspec) }
describe '.nodes' do
context 'when filtering all the entry/node names' do
subject { described_class.nodes.keys }
let(:result) do
%i[before_script script stage type after_script cache
image services only except variables artifacts
environment coverage]
end
it { is_expected.to match_array result }
end
end
describe 'validations' do describe 'validations' do
before { entry.compose! } before { entry.compose! }
......
...@@ -221,6 +221,39 @@ describe Ci::Build, :models do ...@@ -221,6 +221,39 @@ describe Ci::Build, :models do
end end
end end
describe '#coverage_regex' do
subject { build.coverage_regex }
let(:project_regex) { '\(\d+\.\d+\) covered' }
let(:build_regex) { 'Code coverage: \d+\.\d+' }
context 'when project has build_coverage_regex set' do
before { project.build_coverage_regex = project_regex }
context 'and coverage_regex attribute is not set' do
it { is_expected.to eq(project_regex) }
end
context 'but coverage_regex attribute is also set' do
before { build.coverage_regex = build_regex }
it { is_expected.to eq(build_regex) }
end
end
context 'when neither project nor build has coverage regex set' do
it { is_expected.to be_nil }
end
end
describe '#update_coverage' do
it 'grants coverage_regex method is called inside of it' do
build.coverage_regex = '\(\d+.\d+\%\) covered'
allow(build).to receive(:trace) { 'Coverage 1033 / 1051 LOC (98.29%) covered' }
allow(build).to receive(:coverage_regex).and_call_original
allow(build).to receive(:update_attributes).with(coverage: 98.29) { true }
expect(build.update_coverage).to be true
end
end
describe 'deployment' do describe 'deployment' do
describe '#last_deployment' do describe '#last_deployment' do
subject { build.last_deployment } subject { build.last_deployment }
......
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