summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-12-07 13:14:45 +0100
committerKamil Trzcinski <ayufan@ayufan.eu>2016-12-07 13:14:45 +0100
commit93c72e0f71919968972e874519e01370edcce022 (patch)
tree7c57a3e0239db10e413add2b869f66d8eeda72ef
parentc4e46c5740426f656c019b51b9731ea8a16f42d0 (diff)
downloadgitlab-ce-93c72e0f71919968972e874519e01370edcce022.tar.gz
Add Ci::Status::Factory
-rw-r--r--lib/gitlab/ci/status/factory.rb43
-rw-r--r--lib/gitlab/ci/status/pipeline/factory.rb30
-rw-r--r--lib/gitlab/ci/status/stage/factory.rb28
-rw-r--r--spec/lib/gitlab/ci/status/factory_spec.rb26
4 files changed, 76 insertions, 51 deletions
diff --git a/lib/gitlab/ci/status/factory.rb b/lib/gitlab/ci/status/factory.rb
new file mode 100644
index 00000000000..b2f896f2211
--- /dev/null
+++ b/lib/gitlab/ci/status/factory.rb
@@ -0,0 +1,43 @@
+module Gitlab
+ module Ci
+ module Status
+ class Factory
+ attr_reader :subject
+
+ def initialize(subject)
+ @subject = subject
+ end
+
+ def fabricate!
+ if extended_status
+ extended_status.new(core_status)
+ else
+ core_status
+ end
+ end
+
+ private
+
+ def subject_status
+ @subject_status ||= subject.status
+ end
+
+ def core_status
+ Gitlab::Ci::Status
+ .const_get(subject_status.capitalize)
+ .new(subject)
+ end
+
+ def extended_status
+ @extended ||= extended_statuses.find do |status|
+ status.matches?(subject)
+ end
+ end
+
+ def extended_statuses
+ []
+ end
+ end
+ end
+ end
+end
diff --git a/lib/gitlab/ci/status/pipeline/factory.rb b/lib/gitlab/ci/status/pipeline/factory.rb
index 71d27bf7cf5..4ac4ec671d0 100644
--- a/lib/gitlab/ci/status/pipeline/factory.rb
+++ b/lib/gitlab/ci/status/pipeline/factory.rb
@@ -2,35 +2,15 @@ module Gitlab
module Ci
module Status
module Pipeline
- class Factory
- EXTENDED_STATUSES = [Pipeline::SuccessWithWarnings]
-
- def initialize(pipeline)
- @pipeline = pipeline
- @status = pipeline.status || :created
- end
-
- def fabricate!
- if extended_status
- extended_status.new(core_status)
- else
- core_status
- end
- end
-
+ class Factory < Status::Factory
private
- def core_status
- Gitlab::Ci::Status
- .const_get(@status.capitalize)
- .new(@pipeline)
- .extend(Status::Pipeline::Common)
+ def extended_statuses
+ [Pipeline::SuccessWithWarnings]
end
- def extended_status
- @extended ||= EXTENDED_STATUSES.find do |status|
- status.matches?(@pipeline)
- end
+ def core_status
+ super.extend(Status::Pipeline::Common)
end
end
end
diff --git a/lib/gitlab/ci/status/stage/factory.rb b/lib/gitlab/ci/status/stage/factory.rb
index a2f7ad81d39..c6522d5ada1 100644
--- a/lib/gitlab/ci/status/stage/factory.rb
+++ b/lib/gitlab/ci/status/stage/factory.rb
@@ -2,35 +2,11 @@ module Gitlab
module Ci
module Status
module Stage
- class Factory
- EXTENDED_STATUSES = []
-
- def initialize(stage)
- @stage = stage
- @status = stage.status || :created
- end
-
- def fabricate!
- if extended_status
- extended_status.new(core_status)
- else
- core_status
- end
- end
-
+ class Factory < Status::Factory
private
def core_status
- Gitlab::Ci::Status
- .const_get(@status.capitalize)
- .new(@stage)
- .extend(Status::Stage::Common)
- end
-
- def extended_status
- @extended ||= EXTENDED_STATUSES.find do |status|
- status.matches?(@stage)
- end
+ super.extend(Status::Stage::Common)
end
end
end
diff --git a/spec/lib/gitlab/ci/status/factory_spec.rb b/spec/lib/gitlab/ci/status/factory_spec.rb
new file mode 100644
index 00000000000..8ebdbddb001
--- /dev/null
+++ b/spec/lib/gitlab/ci/status/factory_spec.rb
@@ -0,0 +1,26 @@
+require 'spec_helper'
+
+describe Gitlab::Ci::Status::Factory do
+ let(:object) { double(status: :created) }
+
+ subject do
+ described_class.new(object)
+ end
+
+ let(:status) do
+ subject.fabricate!
+ end
+
+ context 'when object has a core status' do
+ HasStatus::AVAILABLE_STATUSES.each do |core_status|
+ context "when core status is #{core_status}" do
+ let(:object) { double(status: core_status) }
+
+ it "fabricates a core status #{core_status}" do
+ expect(status).to be_a(
+ Gitlab::Ci::Status.const_get(core_status.capitalize))
+ end
+ end
+ end
+ end
+end