From 93c72e0f71919968972e874519e01370edcce022 Mon Sep 17 00:00:00 2001 From: Kamil Trzcinski Date: Wed, 7 Dec 2016 13:14:45 +0100 Subject: Add Ci::Status::Factory --- lib/gitlab/ci/status/factory.rb | 43 +++++++++++++++++++++++++++++++ lib/gitlab/ci/status/pipeline/factory.rb | 30 ++++----------------- lib/gitlab/ci/status/stage/factory.rb | 28 ++------------------ spec/lib/gitlab/ci/status/factory_spec.rb | 26 +++++++++++++++++++ 4 files changed, 76 insertions(+), 51 deletions(-) create mode 100644 lib/gitlab/ci/status/factory.rb create mode 100644 spec/lib/gitlab/ci/status/factory_spec.rb 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 -- cgit v1.2.1