summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-03-22 14:36:21 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2018-03-22 14:36:21 +0100
commitb9e329769e4bcc688133a763ea85318abb88aaaa (patch)
tree949be75aaf8e6a54651e69474de531af1a5038a9
parent109ecf6f07a55b2dbd4a4e729ffad72ef7c24643 (diff)
downloadgitlab-ce-b9e329769e4bcc688133a763ea85318abb88aaaa.tar.gz
Add specs for pipeline chain that builds stages and jobs
-rw-r--r--lib/gitlab/ci/pipeline/chain/populate.rb10
-rw-r--r--lib/gitlab/ci/pipeline/seed/stage.rb10
-rw-r--r--spec/lib/gitlab/ci/pipeline/chain/populate_spec.rb21
-rw-r--r--spec/lib/gitlab/ci/pipeline/seed/stage_spec.rb22
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)