From b9e329769e4bcc688133a763ea85318abb88aaaa Mon Sep 17 00:00:00 2001 From: Grzegorz Bizon Date: Thu, 22 Mar 2018 14:36:21 +0100 Subject: [PATCH] Add specs for pipeline chain that builds stages and jobs --- lib/gitlab/ci/pipeline/chain/populate.rb | 10 ++++++--- lib/gitlab/ci/pipeline/seed/stage.rb | 10 +++------ .../gitlab/ci/pipeline/chain/populate_spec.rb | 21 +++++++++++++++++- .../lib/gitlab/ci/pipeline/seed/stage_spec.rb | 22 +++++++++++++++++++ 4 files changed, 52 insertions(+), 11 deletions(-) diff --git a/lib/gitlab/ci/pipeline/chain/populate.rb b/lib/gitlab/ci/pipeline/chain/populate.rb index 5c261ddd2a9..b2b00c8cb4b 100644 --- a/lib/gitlab/ci/pipeline/chain/populate.rb +++ b/lib/gitlab/ci/pipeline/chain/populate.rb @@ -16,10 +16,14 @@ module Gitlab ## # Populate pipeline with all stages and builds from pipeline seeds. # - pipeline.stage_seeds.each do |seed| - seed.user = current_user + pipeline.stage_seeds.each do |stage| + 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 if pipeline.stages.none? diff --git a/lib/gitlab/ci/pipeline/seed/stage.rb b/lib/gitlab/ci/pipeline/seed/stage.rb index 1b4a5004c53..323629b6e48 100644 --- a/lib/gitlab/ci/pipeline/seed/stage.rb +++ b/lib/gitlab/ci/pipeline/seed/stage.rb @@ -33,18 +33,14 @@ module Gitlab end end - # TODO specs - # def included? seeds.any? end def to_resource - @stage ||= ::Ci::Stage.new(attributes).tap do |stage| - @seeds.each do |seed| - next unless seed.included? - - stage.builds << seed.to_resource + strong_memoize(:stage) do + ::Ci::Stage.new(attributes).tap do |stage| + seeds.each { |seed| stage.builds << seed.to_resource } end end end diff --git a/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb b/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb index 2f4f0ac9a12..2258ae83f38 100644 --- a/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb @@ -37,6 +37,8 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do end 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.first).not_to be_persisted end @@ -130,5 +132,22 @@ describe Gitlab::Ci::Pipeline::Chain::Populate do 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 diff --git a/spec/lib/gitlab/ci/pipeline/seed/stage_spec.rb b/spec/lib/gitlab/ci/pipeline/seed/stage_spec.rb index 66382492765..8f0bf40d624 100644 --- a/spec/lib/gitlab/ci/pipeline/seed/stage_spec.rb +++ b/spec/lib/gitlab/ci/pipeline/seed/stage_spec.rb @@ -28,6 +28,28 @@ describe Gitlab::Ci::Pipeline::Seed::Stage do 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 it 'returns build seeds' do expect(subject.seeds).to all(be_a Gitlab::Ci::Pipeline::Seed::Build)