summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-05-30 15:30:45 +0200
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-05-30 15:30:45 +0200
commit805715cc68aabb6992a63356ec7c19940f52c93a (patch)
treed17df258863c6891f47015af99c1652299227c44
parent325b2d9329ae90748dd0db749f9ebc0800eaea75 (diff)
downloadgitlab-ce-805715cc68aabb6992a63356ec7c19940f52c93a.tar.gz
Add stage seed class that represents attributes
-rw-r--r--lib/ci/gitlab_ci_yaml_processor.rb3
-rw-r--r--lib/gitlab/ci/stage/seed.rb38
-rw-r--r--spec/lib/gitlab/ci/stage/seed_spec.rb47
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