diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-28 18:06:15 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2019-10-28 18:06:15 +0000 |
commit | 7515ec41c527c62bfd56f46e388cf6d9fe06479f (patch) | |
tree | 614b555ec428b7eac4b836473d43516c41f9da46 /spec/support/shared_examples/lib | |
parent | a77db6bc47d8cdd9edae2ec22f640821d0794404 (diff) | |
download | gitlab-ce-7515ec41c527c62bfd56f46e388cf6d9fe06479f.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/support/shared_examples/lib')
-rw-r--r-- | spec/support/shared_examples/lib/gitlab/config/inheritable_shared_examples.rb | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/spec/support/shared_examples/lib/gitlab/config/inheritable_shared_examples.rb b/spec/support/shared_examples/lib/gitlab/config/inheritable_shared_examples.rb new file mode 100644 index 00000000000..556d81133bc --- /dev/null +++ b/spec/support/shared_examples/lib/gitlab/config/inheritable_shared_examples.rb @@ -0,0 +1,105 @@ +# frozen_string_literal: true + +RSpec.shared_examples 'with inheritable CI config' do + using RSpec::Parameterized::TableSyntax + + let(:ignored_inheritable_columns) { [] } + + it 'does prepend an Inheritable mixin' do + expect(described_class).to include_module(Gitlab::Config::Entry::Inheritable) + end + + it 'all inheritable entries are covered' do + inheritable_entries = inheritable_class.nodes.keys + entries = described_class.nodes.keys + + expect(entries + ignored_inheritable_columns).to include( + *inheritable_entries) + end + + it 'all entries do have inherit flag' do + without_inherit_flag = described_class.nodes.map do |key, factory| + key if factory.inherit.nil? + end.compact + + expect(without_inherit_flag).to be_empty + end + + context 'for non-inheritable entries' do + where(:entry_key) do + described_class.nodes.map do |key, factory| + [key] unless factory.inherit + end.compact + end + + with_them do + it 'inheritable_class does not define entry' do + expect(inheritable_class.nodes).not_to include(entry_key) + end + end + end + + context 'for inheritable entries' do + where(:entry_key, :entry_class) do + described_class.nodes.map do |key, factory| + [key, factory.entry_class] if factory.inherit + end.compact + end + + with_them do + let(:specified) { double('deps_specified', 'specified?' => true, value: 'specified') } + let(:unspecified) { double('unspecified', 'specified?' => false) } + let(:inheritable) { double(inheritable_key, '[]' => unspecified) } + + let(:deps) do + if inheritable_key + double('deps', inheritable_key => inheritable, '[]' => unspecified) + else + inheritable + end + end + + it 'inheritable_class does define entry' do + expect(inheritable_class.nodes).to include(entry_key) + expect(inheritable_class.nodes[entry_key].entry_class).to eq(entry_class) + end + + context 'when is specified' do + it 'does inherit value' do + expect(inheritable).to receive('[]').with(entry_key).and_return(specified) + + entry.compose!(deps) + + expect(entry[entry_key]).to eq(specified) + end + + context 'when entry is specified' do + let(:entry_specified) do + double('entry_specified', 'specified?' => true, value: 'specified', errors: []) + end + + it 'does not inherit value' do + entry.send(:entries)[entry_key] = entry_specified + + allow(inheritable).to receive('[]').with(entry_key).and_return(specified) + + expect do + # we ignore exceptions as `#overwrite_entry` + # can raise exception on duplicates + entry.compose!(deps) rescue described_class::InheritError + end.not_to change { entry[entry_key] } + end + end + end + + context 'when inheritable does not specify' do + it 'does not inherit value' do + entry.compose!(deps) + + expect(entry[entry_key]).to be_a( + Gitlab::Config::Entry::Undefined) + end + end + end + end +end |