diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-10-21 10:08:36 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-10-21 10:08:36 +0300 |
commit | 48aff82709769b098321c738f3444b9bdaa694c6 (patch) | |
tree | e00c7c43e2d9b603a5a6af576b1685e400410dee /spec/lib/gitlab/config/entry/composable_hash_spec.rb | |
parent | 879f5329ee916a948223f8f43d77fba4da6cd028 (diff) |
Add latest changes from gitlab-org/gitlab@13-5-stable-eev13.5.0-rc42
Diffstat (limited to 'spec/lib/gitlab/config/entry/composable_hash_spec.rb')
-rw-r--r-- | spec/lib/gitlab/config/entry/composable_hash_spec.rb | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/spec/lib/gitlab/config/entry/composable_hash_spec.rb b/spec/lib/gitlab/config/entry/composable_hash_spec.rb new file mode 100644 index 00000000000..15bbf2047c5 --- /dev/null +++ b/spec/lib/gitlab/config/entry/composable_hash_spec.rb @@ -0,0 +1,108 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe Gitlab::Config::Entry::ComposableHash, :aggregate_failures do + let(:valid_config) do + { + DATABASE_SECRET: 'passw0rd', + API_TOKEN: 'passw0rd2' + } + end + + let(:config) { valid_config } + + shared_examples 'composes a hash' do + describe '#valid?' do + it 'is valid' do + expect(entry).to be_valid + end + + context 'is invalid' do + let(:config) { %w[one two] } + + it { expect(entry).not_to be_valid } + end + end + + describe '#value' do + context 'when config is a hash' do + it 'returns key value' do + expect(entry.value).to eq config + end + end + end + + describe '#compose!' do + before do + entry.compose! + end + + it 'composes child entry with configured value' do + expect(entry.value).to eq(config) + end + + it 'composes child entries with configured values' do + expect(entry[:DATABASE_SECRET]).to be_a(Gitlab::Config::Entry::Node) + expect(entry[:DATABASE_SECRET].description).to eq('DATABASE_SECRET node definition') + expect(entry[:DATABASE_SECRET].key).to eq(:DATABASE_SECRET) + expect(entry[:DATABASE_SECRET].metadata).to eq(name: :DATABASE_SECRET) + expect(entry[:DATABASE_SECRET].parent.class).to eq(Gitlab::Config::Entry::ComposableHash) + expect(entry[:DATABASE_SECRET].value).to eq('passw0rd') + expect(entry[:API_TOKEN]).to be_a(Gitlab::Config::Entry::Node) + expect(entry[:API_TOKEN].description).to eq('API_TOKEN node definition') + expect(entry[:API_TOKEN].key).to eq(:API_TOKEN) + expect(entry[:API_TOKEN].metadata).to eq(name: :API_TOKEN) + expect(entry[:API_TOKEN].parent.class).to eq(Gitlab::Config::Entry::ComposableHash) + expect(entry[:API_TOKEN].value).to eq('passw0rd2') + end + + describe '#descendants' do + it 'creates descendant nodes' do + expect(entry.descendants.first).to be_a(Gitlab::Config::Entry::Node) + expect(entry.descendants.first.value).to eq('passw0rd') + expect(entry.descendants.second).to be_a(Gitlab::Config::Entry::Node) + expect(entry.descendants.second.value).to eq('passw0rd2') + end + end + end + end + + context 'when ComposableHash is instantiated' do + let(:entry) { described_class.new(config) } + + before do + allow(entry).to receive(:composable_class).and_return(Gitlab::Config::Entry::Node) + end + + it_behaves_like 'composes a hash' + end + + context 'when ComposableHash entry is configured in the parent class' do + let(:composable_hash_parent_class) do + Class.new(Gitlab::Config::Entry::Node) do + include ::Gitlab::Config::Entry::Configurable + + entry :secrets, ::Gitlab::Config::Entry::ComposableHash, + description: 'Configured secrets for this job', + inherit: false, + default: { hello: :world }, + metadata: { composable_class: Gitlab::Config::Entry::Node } + end + end + + let(:entry) do + parent_entry = composable_hash_parent_class.new(secrets: config) + parent_entry.compose! + + parent_entry[:secrets] + end + + it_behaves_like 'composes a hash' + + it 'creates entry with configuration from parent class' do + expect(entry.default).to eq({ hello: :world }) + expect(entry.metadata).to eq(composable_class: Gitlab::Config::Entry::Node) + end + end +end |