summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--qa/Dockerfile2
-rw-r--r--qa/qa/runtime/release.rb23
-rw-r--r--qa/spec/runtime/release_spec.rb45
3 files changed, 36 insertions, 34 deletions
diff --git a/qa/Dockerfile b/qa/Dockerfile
index 2a1390193e7..2814a7bdef0 100644
--- a/qa/Dockerfile
+++ b/qa/Dockerfile
@@ -1,8 +1,6 @@
FROM ruby:2.3
LABEL maintainer "Grzegorz Bizon <grzegorz@gitlab.com>"
-ENV GITLAB_RELEASE CE
-
RUN sed -i "s/httpredir.debian.org/ftp.us.debian.org/" /etc/apt/sources.list && \
apt-get update && apt-get install -y --force-yes \
libqt5webkit5-dev qt5-qmake qt5-default build-essential xvfb git && \
diff --git a/qa/qa/runtime/release.rb b/qa/qa/runtime/release.rb
index e3da00a1881..40d24e8d342 100644
--- a/qa/qa/runtime/release.rb
+++ b/qa/qa/runtime/release.rb
@@ -2,35 +2,32 @@ module QA
module Runtime
##
# Class that is responsible for plugging CE/EE extensions in, depending on
- # environment variable GITLAB_RELEASE that should be present in the runtime
- # environment.
+ # existence of EE module.
#
# We need that to reduce the probability of conflicts when merging
# CE to EE.
#
class Release
- UnspecifiedReleaseError = Class.new(StandardError)
-
- def initialize(version = ENV['GITLAB_RELEASE'])
- @version = version.to_s.upcase
-
- unless %w[CE EE].include?(@version)
- raise UnspecifiedReleaseError, 'GITLAB_RELEASE env not defined!'
- end
+ def initialize(variant = nil)
+ @version = variant || version
begin
- require "qa/#{version.downcase}/strategy"
+ require "qa/#{@version.downcase}/strategy"
rescue LoadError
# noop
end
end
+ def version
+ File.directory?("#{__dir__}/../ee") ? :EE : :CE
+ end
+
def has_strategy?
- QA.const_defined?("#{@version}::Strategy")
+ QA.const_defined?("QA::#{@version}::Strategy")
end
def strategy
- QA.const_get("#{@version}::Strategy")
+ QA.const_get("QA::#{@version}::Strategy")
end
def self.method_missing(name, *args)
diff --git a/qa/spec/runtime/release_spec.rb b/qa/spec/runtime/release_spec.rb
index 97f0b7e3c89..5d12315be5b 100644
--- a/qa/spec/runtime/release_spec.rb
+++ b/qa/spec/runtime/release_spec.rb
@@ -1,11 +1,10 @@
describe QA::Runtime::Release do
context 'when release version has extension strategy' do
- subject { described_class.new('CE') }
- let(:strategy) { spy('CE::Strategy') }
+ subject { described_class.new('VER') }
+ let(:strategy) { spy('VER::Strategy') }
before do
- stub_const('QA::CE::Strategy', strategy)
- stub_const('QA::EE::Strategy', strategy)
+ stub_const('QA::VER::Strategy', strategy)
end
describe '#has_strategy?' do
@@ -16,11 +15,19 @@ describe QA::Runtime::Release do
describe '#strategy' do
it 'return the strategy constant' do
- expect(subject.strategy).to eq QA::CE::Strategy
+ expect(subject.strategy).to eq QA::VER::Strategy
end
end
describe 'delegated class methods' do
+ before do
+ allow_any_instance_of(described_class)
+ .to receive(:has_strategy?).and_return(true)
+
+ allow_any_instance_of(described_class)
+ .to receive(:strategy).and_return(strategy)
+ end
+
it 'delegates all calls to strategy class' do
described_class.some_method(1, 2)
@@ -31,12 +38,7 @@ describe QA::Runtime::Release do
end
context 'when release version does not have extension strategy' do
- subject { described_class.new('CE') }
-
- before do
- hide_const('QA::CE::Strategy')
- hide_const('QA::EE::Strategy')
- end
+ subject { described_class.new('NOVER') }
describe '#has_strategy?' do
it 'returns false' do
@@ -50,18 +52,23 @@ describe QA::Runtime::Release do
end
end
- describe 'delegated class methods' do
+ describe 'does not delegate class methods' do
+ before do
+ allow_any_instance_of(described_class)
+ .to receive(:has_strategy?).and_return(false)
+ end
+
it 'behaves like a null object and does nothing' do
expect { described_class.some_method(2, 3) }.not_to raise_error
end
- end
- end
- context 'when release version is invalid or unspecified' do
- describe '#new' do
- it 'raises an exception' do
- expect { described_class.new(nil) }
- .to raise_error(described_class::UnspecifiedReleaseError)
+ it 'returns nil' do
+ expect(described_class.something).to be_nil
+ end
+
+ it 'does not delegate to strategy object' do
+ expect_any_instance_of(described_class)
+ .not_to receive(:strategy)
end
end
end