212 lines
5.2 KiB
Ruby
212 lines
5.2 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'fast_spec_helper'
|
|
require 'rspec-parameterized'
|
|
|
|
RSpec.describe GitlabEdition do
|
|
def remove_instance_variable(ivar)
|
|
described_class.remove_instance_variable(ivar) if described_class.instance_variable_defined?(ivar)
|
|
end
|
|
|
|
before do
|
|
# Make sure the ENV is clean
|
|
stub_env('FOSS_ONLY', nil)
|
|
stub_env('EE_ONLY', nil)
|
|
|
|
remove_instance_variable(:@is_ee)
|
|
remove_instance_variable(:@is_jh)
|
|
end
|
|
|
|
after do
|
|
remove_instance_variable(:@is_ee)
|
|
remove_instance_variable(:@is_jh)
|
|
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 '.path_glob' do
|
|
using RSpec::Parameterized::TableSyntax
|
|
|
|
let(:root) { described_class.root.to_s }
|
|
|
|
subject { described_class.path_glob(path) }
|
|
|
|
before do
|
|
allow(described_class).to receive(:jh?).and_return(jh)
|
|
allow(described_class).to receive(:ee?).and_return(ee)
|
|
end
|
|
|
|
where(:ee, :jh, :path, :expected) do
|
|
false | false | nil | ''
|
|
true | false | nil | '{,ee/}'
|
|
true | true | nil | '{,ee/,jh/}'
|
|
false | true | nil | '{,ee/,jh/}'
|
|
false | false | 'app/models' | 'app/models'
|
|
true | false | 'app/models' | '{,ee/}app/models'
|
|
true | true | 'app/models' | '{,ee/,jh/}app/models'
|
|
false | true | 'app/models' | '{,ee/,jh/}app/models'
|
|
end
|
|
|
|
with_them do
|
|
it { is_expected.to eq("#{root}/#{expected}") }
|
|
end
|
|
end
|
|
|
|
describe '.extension_path_prefixes' do
|
|
using RSpec::Parameterized::TableSyntax
|
|
|
|
subject { described_class.extension_path_prefixes }
|
|
|
|
before do
|
|
allow(described_class).to receive(:jh?).and_return(jh)
|
|
allow(described_class).to receive(:ee?).and_return(ee)
|
|
end
|
|
|
|
where(:ee, :jh, :expected) do
|
|
false | false | ''
|
|
true | false | '{,ee/}'
|
|
true | true | '{,ee/,jh/}'
|
|
false | true | '{,ee/,jh/}'
|
|
end
|
|
|
|
with_them do
|
|
it { is_expected.to eq(expected) }
|
|
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 extensions 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 'when 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 'when 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 'when 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
|