diff options
author | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-05-30 15:30:45 +0200 |
---|---|---|
committer | Grzegorz Bizon <grzesiek.bizon@gmail.com> | 2017-05-30 15:30:45 +0200 |
commit | 805715cc68aabb6992a63356ec7c19940f52c93a (patch) | |
tree | d17df258863c6891f47015af99c1652299227c44 | |
parent | 325b2d9329ae90748dd0db749f9ebc0800eaea75 (diff) | |
download | gitlab-ce-805715cc68aabb6992a63356ec7c19940f52c93a.tar.gz |
Add stage seed class that represents attributes
-rw-r--r-- | lib/ci/gitlab_ci_yaml_processor.rb | 3 | ||||
-rw-r--r-- | lib/gitlab/ci/stage/seed.rb | 38 | ||||
-rw-r--r-- | spec/lib/gitlab/ci/stage/seed_spec.rb | 47 |
3 files changed, 86 insertions, 2 deletions
diff --git a/lib/ci/gitlab_ci_yaml_processor.rb b/lib/ci/gitlab_ci_yaml_processor.rb index 17a3cdc714c..aa6c94f26c8 100644 --- a/lib/ci/gitlab_ci_yaml_processor.rb +++ b/lib/ci/gitlab_ci_yaml_processor.rb @@ -81,8 +81,7 @@ module Ci dependencies: job[:dependencies], after_script: job[:after_script], environment: job[:environment] - }.compact - } + }.compact } end def self.validation_message(content) diff --git a/lib/gitlab/ci/stage/seed.rb b/lib/gitlab/ci/stage/seed.rb new file mode 100644 index 00000000000..95237bff5d7 --- /dev/null +++ b/lib/gitlab/ci/stage/seed.rb @@ -0,0 +1,38 @@ +module Gitlab + module Ci + module Stage + class Seed + attr_reader :name, :builds + + def initialize(name:, builds:) + @name = name + @builds = builds + end + + def pipeline=(pipeline) + trigger_request = pipeline.trigger_requests.first + + @builds.each do |attributes| + attributes.merge!( + pipeline: pipeline, + project: pipeline.project, + ref: pipeline.ref, + tag: pipeline.tag, + trigger_request: trigger_request + ) + end + end + + def user=(current_user) + @builds.each do |attributes| + attributes.merge!(user: current_user) + end + end + + def to_attributes + { name: @name, builds_attributes: @builds } + end + end + end + end +end diff --git a/spec/lib/gitlab/ci/stage/seed_spec.rb b/spec/lib/gitlab/ci/stage/seed_spec.rb new file mode 100644 index 00000000000..a12093b2c7c --- /dev/null +++ b/spec/lib/gitlab/ci/stage/seed_spec.rb @@ -0,0 +1,47 @@ +require 'spec_helper' + +describe Gitlab::Ci::Stage::Seed do + subject do + described_class.new(name: 'test', builds: builds) + end + + let(:builds) do + [{ name: 'rspec' }, { name: 'spinach' }] + end + + describe '#pipeline=' do + let(:pipeline) do + create(:ci_empty_pipeline, ref: 'feature', tag: true) + end + + it 'assignes relevant pipeline attributes' do + trigger_request = pipeline.trigger_requests.first + + subject.pipeline = pipeline + + expect(subject.builds).to all(include(pipeline: pipeline)) + expect(subject.builds).to all(include(project: pipeline.project)) + expect(subject.builds).to all(include(ref: 'feature')) + expect(subject.builds).to all(include(tag: true)) + expect(subject.builds).to all(include(trigger_request: trigger_request)) + end + end + + describe '#user=' do + let(:user) { create(:user) } + + it 'assignes relevant pipeline attributes' do + subject.user = user + + expect(subject.builds).to all(include(user: user)) + end + end + + describe '#to_attributes' do + it 'exposes stage attributes with nested jobs' do + expect(subject.to_attributes).to be_a Hash + expect(subject.to_attributes).to include(name: 'test') + expect(subject.to_attributes).to include(builds_attributes: builds) + end + end +end |