Add specs for pipeline chain that builds stages and jobs
This commit is contained in:
parent
109ecf6f07
commit
b9e329769e
4 changed files with 52 additions and 11 deletions
|
@ -16,10 +16,14 @@ module Gitlab
|
||||||
##
|
##
|
||||||
# Populate pipeline with all stages and builds from pipeline seeds.
|
# Populate pipeline with all stages and builds from pipeline seeds.
|
||||||
#
|
#
|
||||||
pipeline.stage_seeds.each do |seed|
|
pipeline.stage_seeds.each do |stage|
|
||||||
seed.user = current_user
|
stage.user = current_user
|
||||||
|
|
||||||
pipeline.stages << seed.to_resource
|
pipeline.stages << stage.to_resource
|
||||||
|
|
||||||
|
stage.seeds.each do |build|
|
||||||
|
pipeline.builds << build.to_resource
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
if pipeline.stages.none?
|
if pipeline.stages.none?
|
||||||
|
|
|
@ -33,18 +33,14 @@ module Gitlab
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# TODO specs
|
|
||||||
#
|
|
||||||
def included?
|
def included?
|
||||||
seeds.any?
|
seeds.any?
|
||||||
end
|
end
|
||||||
|
|
||||||
def to_resource
|
def to_resource
|
||||||
@stage ||= ::Ci::Stage.new(attributes).tap do |stage|
|
strong_memoize(:stage) do
|
||||||
@seeds.each do |seed|
|
::Ci::Stage.new(attributes).tap do |stage|
|
||||||
next unless seed.included?
|
seeds.each { |seed| stage.builds << seed.to_resource }
|
||||||
|
|
||||||
stage.builds << seed.to_resource
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -37,6 +37,8 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do
|
||||||
end
|
end
|
||||||
|
|
||||||
it 'populates pipeline with builds' do
|
it 'populates pipeline with builds' do
|
||||||
|
expect(pipeline.builds).to be_one
|
||||||
|
expect(pipeline.builds.first).not_to be_persisted
|
||||||
expect(pipeline.stages.first.builds).to be_one
|
expect(pipeline.stages.first.builds).to be_one
|
||||||
expect(pipeline.stages.first.builds.first).not_to be_persisted
|
expect(pipeline.stages.first.builds.first).not_to be_persisted
|
||||||
end
|
end
|
||||||
|
@ -130,5 +132,22 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
pending 'populating pipeline according to policies'
|
context 'when using only/except build policies' do
|
||||||
|
let(:config) do
|
||||||
|
{ rspec: { script: 'rspec', stage: 'test', only: ['master'] },
|
||||||
|
prod: { script: 'cap prod', stage: 'deploy', only: ['tags'] } }
|
||||||
|
end
|
||||||
|
|
||||||
|
let(:pipeline) do
|
||||||
|
build(:ci_pipeline, ref: 'master', config: config)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'populates pipeline according to used policies' do
|
||||||
|
step.perform!
|
||||||
|
|
||||||
|
expect(pipeline.stages.size).to eq 1
|
||||||
|
expect(pipeline.builds.size).to eq 1
|
||||||
|
expect(pipeline.builds.first.name).to eq 'rspec'
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -28,6 +28,28 @@ describe Gitlab::Ci::Pipeline::Seed::Stage do
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe '#included?' do
|
||||||
|
context 'when it contains builds seeds' do
|
||||||
|
let(:attributes) do
|
||||||
|
{ name: 'test',
|
||||||
|
index: 0,
|
||||||
|
builds: [{ name: 'deploy', only: { refs: ['master'] } }] }
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.to be_included }
|
||||||
|
end
|
||||||
|
|
||||||
|
context 'when it does not contain build seeds' do
|
||||||
|
let(:attributes) do
|
||||||
|
{ name: 'test',
|
||||||
|
index: 0,
|
||||||
|
builds: [{ name: 'deploy', only: { refs: ['feature'] } }] }
|
||||||
|
end
|
||||||
|
|
||||||
|
it { is_expected.not_to be_included }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe '#seeds' do
|
describe '#seeds' do
|
||||||
it 'returns build seeds' do
|
it 'returns build seeds' do
|
||||||
expect(subject.seeds).to all(be_a Gitlab::Ci::Pipeline::Seed::Build)
|
expect(subject.seeds).to all(be_a Gitlab::Ci::Pipeline::Seed::Build)
|
||||||
|
|
Loading…
Reference in a new issue