diff options
Diffstat (limited to 'spec/lib/gitlab_edition_spec.rb')
-rw-r--r-- | spec/lib/gitlab_edition_spec.rb | 160 |
1 files changed, 160 insertions, 0 deletions
diff --git a/spec/lib/gitlab_edition_spec.rb b/spec/lib/gitlab_edition_spec.rb new file mode 100644 index 00000000000..2f1316819ec --- /dev/null +++ b/spec/lib/gitlab_edition_spec.rb @@ -0,0 +1,160 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe GitlabEdition do + before do + # Make sure the ENV is clean + stub_env('FOSS_ONLY', nil) + stub_env('EE_ONLY', nil) + + described_class.instance_variable_set(:@is_ee, nil) + described_class.instance_variable_set(:@is_jh, nil) + end + + after do + described_class.instance_variable_set(:@is_ee, nil) + described_class.instance_variable_set(:@is_jh, nil) + end + + describe '.root' do + it 'returns the root path of the app' do + expect(described_class.root).to eq(Pathname.new(File.expand_path('../..', __dir__))) + end + end + + describe 'extensions' do + context 'when .jh? is true' do + before do + allow(described_class).to receive(:jh?).and_return(true) + end + + it 'returns %w[ee jh]' do + expect(described_class.extensions).to match_array(%w[ee jh]) + end + end + + context 'when .ee? is true' do + before do + allow(described_class).to receive(:jh?).and_return(false) + allow(described_class).to receive(:ee?).and_return(true) + end + + it 'returns %w[ee]' do + expect(described_class.extensions).to match_array(%w[ee]) + end + end + + context 'when neither .jh? and .ee? are true' do + before do + allow(described_class).to receive(:jh?).and_return(false) + allow(described_class).to receive(:ee?).and_return(false) + end + + it 'returns the exyensions according to the current edition' do + expect(described_class.extensions).to be_empty + end + end + end + + describe '.ee? and .jh?' do + def stub_path(*paths, **arguments) + root = Pathname.new('dummy') + pathname = double(:path, **arguments) + + allow(described_class) + .to receive(:root) + .and_return(root) + + allow(root).to receive(:join) + + paths.each do |path| + allow(root) + .to receive(:join) + .with(path) + .and_return(pathname) + end + end + + describe '.ee?' do + context 'for EE' do + before do + stub_path('ee/app/models/license.rb', exist?: true) + end + + context 'when using FOSS_ONLY=1' do + before do + stub_env('FOSS_ONLY', '1') + end + + it 'returns not to be EE' do + expect(described_class).not_to be_ee + end + end + + context 'when using FOSS_ONLY=0' do + before do + stub_env('FOSS_ONLY', '0') + end + + it 'returns to be EE' do + expect(described_class).to be_ee + end + end + + context 'when using default FOSS_ONLY' do + it 'returns to be EE' do + expect(described_class).to be_ee + end + end + end + + context 'for CE' do + before do + stub_path('ee/app/models/license.rb', exist?: false) + end + + it 'returns not to be EE' do + expect(described_class).not_to be_ee + end + end + end + + describe '.jh?' do + context 'for JH' do + before do + stub_path( + 'ee/app/models/license.rb', + 'jh', + exist?: true) + end + + context 'when using default FOSS_ONLY and EE_ONLY' do + it 'returns to be JH' do + expect(described_class).to be_jh + end + end + + context 'when using FOSS_ONLY=1' do + before do + stub_env('FOSS_ONLY', '1') + end + + it 'returns not to be JH' do + expect(described_class).not_to be_jh + end + end + + context 'when using EE_ONLY=1' do + before do + stub_env('EE_ONLY', '1') + end + + it 'returns not to be JH' do + expect(described_class).not_to be_jh + end + end + end + end + end +end |