Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-05-05 15:10:33 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2021-05-05 15:10:33 +0300
commit023e050d82ed11d9060ce5bdaec99c3871b98164 (patch)
treeee89e2c83c2771c635a0c1daaa88fcce25f18612 /spec/config
parent1c568d834d0cbe1bbbf558ac9a45940f6dbda37a (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/config')
-rw-r--r--spec/config/inject_enterprise_edition_module_spec.rb141
1 files changed, 141 insertions, 0 deletions
diff --git a/spec/config/inject_enterprise_edition_module_spec.rb b/spec/config/inject_enterprise_edition_module_spec.rb
new file mode 100644
index 00000000000..c65d909cc6b
--- /dev/null
+++ b/spec/config/inject_enterprise_edition_module_spec.rb
@@ -0,0 +1,141 @@
+# frozen_string_literal: true
+
+require 'fast_spec_helper'
+
+RSpec.describe InjectEnterpriseEditionModule do
+ let(:extension_name) { 'FF' }
+ let(:extension_namespace) { Module.new }
+ let(:fish_name) { 'Fish' }
+ let(:fish_class) { Class.new }
+ let(:fish_extension) { Module.new }
+
+ before do
+ # Make sure we're not relying on which mode we're running under
+ allow(Gitlab).to receive(:extensions).and_return([extension_name.downcase])
+
+ # Test on an imagined extension and imagined class
+ stub_const(fish_name, fish_class) # Fish
+ allow(fish_class).to receive(:name).and_return(fish_name)
+ end
+
+ shared_examples 'expand the extension with' do |method|
+ context 'when extension namespace is set at top-level' do
+ before do
+ stub_const(extension_name, extension_namespace) # FF
+ extension_namespace.const_set(fish_name, fish_extension) # FF::Fish
+ end
+
+ it "calls #{method} with the extension module" do
+ expect(fish_class).to receive(method).with(fish_extension)
+
+ fish_class.__send__("#{method}_if_ee", fish_name)
+ end
+
+ it "ignores EE prefix and calls #{method} with the extension module" do
+ expect(fish_class).to receive(method).with(fish_extension)
+
+ fish_class.__send__("#{method}_if_ee", "EE::#{fish_name}")
+ end
+
+ it "ignores ::EE prefix and calls #{method} with the extension module" do
+ expect(fish_class).to receive(method).with(fish_extension)
+
+ fish_class.__send__("#{method}_if_ee", "::EE::#{fish_name}")
+ end
+ end
+
+ context 'when extension namespace is set at another namespace' do
+ let(:another_namespace) { Module.new } # QA
+
+ before do
+ another_namespace.const_set(extension_name, extension_namespace) # QA::FF
+ extension_namespace.const_set(fish_name, fish_extension) # QA::FF::Fish
+ end
+
+ it "calls #{method} with the extension module from the additional namespace" do
+ expect(fish_class).to receive(method).with(fish_extension)
+
+ fish_class.__send__("#{method}_if_ee", fish_name, namespace: another_namespace)
+ end
+ end
+
+ context 'when extension namespace exists but not the extension' do
+ before do
+ stub_const(extension_name, extension_namespace) # FF
+ end
+
+ it "does not call #{method}" do
+ expect(fish_class).not_to receive(method).with(fish_extension)
+
+ fish_class.__send__("#{method}_if_ee", fish_name)
+ end
+ end
+
+ context 'when extension namespace does not exist' do
+ it "does not call #{method}" do
+ expect(fish_class).not_to receive(method).with(fish_extension)
+
+ fish_class.__send__("#{method}_if_ee", fish_name)
+ end
+ end
+ end
+
+ shared_examples 'expand the assumed extension with' do |method|
+ context 'when extension namespace is set at top-level' do
+ before do
+ stub_const(extension_name, extension_namespace) # FF
+ extension_namespace.const_set(fish_name, fish_extension) # FF::Fish
+ end
+
+ it "calls #{method} with the extension module" do
+ expect(fish_class).to receive(method).with(fish_extension)
+
+ fish_class.__send__("#{method}_mod")
+ end
+ end
+
+ context 'when extension namespace exists but not the extension' do
+ before do
+ stub_const(extension_name, extension_namespace) # FF
+ end
+
+ it "does not call #{method}" do
+ expect(fish_class).not_to receive(method).with(fish_extension)
+
+ fish_class.__send__("#{method}_mod")
+ end
+ end
+
+ context 'when extension namespace does not exist' do
+ it "does not call #{method}" do
+ expect(fish_class).not_to receive(method).with(fish_extension)
+
+ fish_class.__send__("#{method}_mod")
+ end
+ end
+ end
+
+ describe '#prepend_if_ee' do
+ it_behaves_like 'expand the extension with', :prepend
+ end
+
+ describe '#extend_if_ee' do
+ it_behaves_like 'expand the extension with', :extend
+ end
+
+ describe '#include_if_ee' do
+ it_behaves_like 'expand the extension with', :include
+ end
+
+ describe '#prepend_mod' do
+ it_behaves_like 'expand the assumed extension with', :prepend
+ end
+
+ describe '#extend_mod' do
+ it_behaves_like 'expand the assumed extension with', :extend
+ end
+
+ describe '#include_mod' do
+ it_behaves_like 'expand the assumed extension with', :include
+ end
+end