diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-09 06:42:22 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-11-09 06:42:22 +0300 |
commit | 7dd9256e5eac896fb422566376086a0befc79151 (patch) | |
tree | be65227875ddb0cff4961ae2d97380bbf64dd851 /spec/lib/gitlab/ci/variables/collection_spec.rb | |
parent | 2295d352f6073101497f9bf4e4981c7ae72706a3 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib/gitlab/ci/variables/collection_spec.rb')
-rw-r--r-- | spec/lib/gitlab/ci/variables/collection_spec.rb | 482 |
1 files changed, 196 insertions, 286 deletions
diff --git a/spec/lib/gitlab/ci/variables/collection_spec.rb b/spec/lib/gitlab/ci/variables/collection_spec.rb index 7ba98380986..6e3ed27bb44 100644 --- a/spec/lib/gitlab/ci/variables/collection_spec.rb +++ b/spec/lib/gitlab/ci/variables/collection_spec.rb @@ -358,302 +358,212 @@ RSpec.describe Gitlab::Ci::Variables::Collection do end describe '#sort_and_expand_all' do - context 'when FF :variable_inside_variable is disabled' do - let_it_be(:project_with_flag_disabled) { create(:project) } - let_it_be(:project_with_flag_enabled) { create(:project) } + let_it_be(:project) { create(:project) } - before do - stub_feature_flags(variable_inside_variable: [project_with_flag_enabled]) - end + context 'table tests' do + using RSpec::Parameterized::TableSyntax - context 'table tests' do - using RSpec::Parameterized::TableSyntax - - where do - { - "empty array": { - variables: [], - keep_undefined: false - }, - "simple expansions": { - variables: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result' }, - { key: 'variable3', value: 'key$variable$variable2' } - ], - keep_undefined: false - }, - "complex expansion": { - variables: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'key${variable}' } - ], - keep_undefined: false - }, - "out-of-order variable reference": { - variables: [ - { key: 'variable2', value: 'key${variable}' }, - { key: 'variable', value: 'value' } - ], - keep_undefined: false - }, - "complex expansions with raw variable": { - variables: [ - { key: 'variable3', value: 'key_${variable}_${variable2}' }, - { key: 'variable', value: '$variable2', raw: true }, - { key: 'variable2', value: 'value2' } - ], - keep_undefined: false - }, - "escaped characters in complex expansions are kept intact": { - variables: [ - { key: 'variable3', value: 'key_${variable}_$${HOME}_%%HOME%%' }, - { key: 'variable', value: '$variable2' }, - { key: 'variable2', value: 'value2' } - ], - keep_undefined: false - }, - "array with cyclic dependency": { - variables: [ - { key: 'variable', value: '$variable2' }, - { key: 'variable2', value: '$variable3' }, - { key: 'variable3', value: 'key$variable$variable2' } - ], - keep_undefined: true - } + where do + { + "empty array": { + variables: [], + keep_undefined: false, + result: [] + }, + "simple expansions": { + variables: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result' }, + { key: 'variable3', value: 'key$variable$variable2' }, + { key: 'variable4', value: 'key$variable$variable3' } + ], + keep_undefined: false, + result: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result' }, + { key: 'variable3', value: 'keyvalueresult' }, + { key: 'variable4', value: 'keyvaluekeyvalueresult' } + ] + }, + "complex expansion": { + variables: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'key${variable}' } + ], + keep_undefined: false, + result: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'keyvalue' } + ] + }, + "unused variables": { + variables: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result2' }, + { key: 'variable3', value: 'result3' }, + { key: 'variable4', value: 'key$variable$variable3' } + ], + keep_undefined: false, + result: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result2' }, + { key: 'variable3', value: 'result3' }, + { key: 'variable4', value: 'keyvalueresult3' } + ] + }, + "complex expansions": { + variables: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result' }, + { key: 'variable3', value: 'key${variable}${variable2}' } + ], + keep_undefined: false, + result: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result' }, + { key: 'variable3', value: 'keyvalueresult' } + ] + }, + "escaped characters in complex expansions keeping undefined are kept intact": { + variables: [ + { key: 'variable3', value: 'key_${variable}_$${HOME}_%%HOME%%' }, + { key: 'variable', value: '$variable2' }, + { key: 'variable2', value: 'value' } + ], + keep_undefined: true, + result: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'value' }, + { key: 'variable3', value: 'key_value_$${HOME}_%%HOME%%' } + ] + }, + "escaped characters in complex expansions discarding undefined are kept intact": { + variables: [ + { key: 'variable2', value: 'key_${variable4}_$${HOME}_%%HOME%%' }, + { key: 'variable', value: 'value_$${HOME}_%%HOME%%' } + ], + keep_undefined: false, + result: [ + { key: 'variable', value: 'value_$${HOME}_%%HOME%%' }, + { key: 'variable2', value: 'key__$${HOME}_%%HOME%%' } + ] + }, + "out-of-order expansion": { + variables: [ + { key: 'variable3', value: 'key$variable2$variable' }, + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result' } + ], + keep_undefined: false, + result: [ + { key: 'variable2', value: 'result' }, + { key: 'variable', value: 'value' }, + { key: 'variable3', value: 'keyresultvalue' } + ] + }, + "out-of-order complex expansion": { + variables: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result' }, + { key: 'variable3', value: 'key${variable2}${variable}' } + ], + keep_undefined: false, + result: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result' }, + { key: 'variable3', value: 'keyresultvalue' } + ] + }, + "missing variable discarding original": { + variables: [ + { key: 'variable2', value: 'key$variable' } + ], + keep_undefined: false, + result: [ + { key: 'variable2', value: 'key' } + ] + }, + "missing variable keeping original": { + variables: [ + { key: 'variable2', value: 'key$variable' } + ], + keep_undefined: true, + result: [ + { key: 'variable2', value: 'key$variable' } + ] + }, + "complex expansions with missing variable keeping original": { + variables: [ + { key: 'variable4', value: 'key${variable}${variable2}${variable3}' }, + { key: 'variable', value: 'value' }, + { key: 'variable3', value: 'value3' } + ], + keep_undefined: true, + result: [ + { key: 'variable', value: 'value' }, + { key: 'variable3', value: 'value3' }, + { key: 'variable4', value: 'keyvalue${variable2}value3' } + ] + }, + "complex expansions with raw variable": { + variables: [ + { key: 'variable3', value: 'key_${variable}_${variable2}' }, + { key: 'variable', value: '$variable2', raw: true }, + { key: 'variable2', value: 'value2' } + ], + keep_undefined: false, + result: [ + { key: 'variable', value: '$variable2', raw: true }, + { key: 'variable2', value: 'value2' }, + { key: 'variable3', value: 'key_$variable2_value2' } + ] + }, + "variable value referencing password with special characters": { + variables: [ + { key: 'VAR', value: '$PASSWORD' }, + { key: 'PASSWORD', value: 'my_password$$_%%_$A' }, + { key: 'A', value: 'value' } + ], + keep_undefined: false, + result: [ + { key: 'VAR', value: 'my_password$$_%%_value' }, + { key: 'PASSWORD', value: 'my_password$$_%%_value' }, + { key: 'A', value: 'value' } + ] + }, + "cyclic dependency causes original array to be returned": { + variables: [ + { key: 'variable', value: '$variable2' }, + { key: 'variable2', value: '$variable3' }, + { key: 'variable3', value: 'key$variable$variable2' } + ], + keep_undefined: false, + result: [ + { key: 'variable', value: '$variable2' }, + { key: 'variable2', value: '$variable3' }, + { key: 'variable3', value: 'key$variable$variable2' } + ] } - end - - with_them do - let(:collection) { Gitlab::Ci::Variables::Collection.new(variables, keep_undefined: keep_undefined) } - - subject { collection.sort_and_expand_all(project_with_flag_disabled) } - - it 'returns Collection' do - is_expected.to be_an_instance_of(Gitlab::Ci::Variables::Collection) - end - - it 'does not expand variables' do - var_hash = variables.pluck(:key, :value).to_h - expect(subject.to_hash).to eq(var_hash) - end - end + } end - end - context 'when FF :variable_inside_variable is enabled' do - let_it_be(:project_with_flag_disabled) { create(:project) } - let_it_be(:project_with_flag_enabled) { create(:project) } + with_them do + let(:collection) { Gitlab::Ci::Variables::Collection.new(variables) } - before do - stub_feature_flags(variable_inside_variable: [project_with_flag_enabled]) - end + subject { collection.sort_and_expand_all(project, keep_undefined: keep_undefined) } - context 'table tests' do - using RSpec::Parameterized::TableSyntax - - where do - { - "empty array": { - variables: [], - keep_undefined: false, - result: [] - }, - "simple expansions": { - variables: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result' }, - { key: 'variable3', value: 'key$variable$variable2' }, - { key: 'variable4', value: 'key$variable$variable3' } - ], - keep_undefined: false, - result: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result' }, - { key: 'variable3', value: 'keyvalueresult' }, - { key: 'variable4', value: 'keyvaluekeyvalueresult' } - ] - }, - "complex expansion": { - variables: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'key${variable}' } - ], - keep_undefined: false, - result: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'keyvalue' } - ] - }, - "unused variables": { - variables: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result2' }, - { key: 'variable3', value: 'result3' }, - { key: 'variable4', value: 'key$variable$variable3' } - ], - keep_undefined: false, - result: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result2' }, - { key: 'variable3', value: 'result3' }, - { key: 'variable4', value: 'keyvalueresult3' } - ] - }, - "complex expansions": { - variables: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result' }, - { key: 'variable3', value: 'key${variable}${variable2}' } - ], - keep_undefined: false, - result: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result' }, - { key: 'variable3', value: 'keyvalueresult' } - ] - }, - "escaped characters in complex expansions keeping undefined are kept intact": { - variables: [ - { key: 'variable3', value: 'key_${variable}_$${HOME}_%%HOME%%' }, - { key: 'variable', value: '$variable2' }, - { key: 'variable2', value: 'value' } - ], - keep_undefined: true, - result: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'value' }, - { key: 'variable3', value: 'key_value_$${HOME}_%%HOME%%' } - ] - }, - "escaped characters in complex expansions discarding undefined are kept intact": { - variables: [ - { key: 'variable2', value: 'key_${variable4}_$${HOME}_%%HOME%%' }, - { key: 'variable', value: 'value_$${HOME}_%%HOME%%' } - ], - keep_undefined: false, - result: [ - { key: 'variable', value: 'value_$${HOME}_%%HOME%%' }, - { key: 'variable2', value: 'key__$${HOME}_%%HOME%%' } - ] - }, - "out-of-order expansion": { - variables: [ - { key: 'variable3', value: 'key$variable2$variable' }, - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result' } - ], - keep_undefined: false, - result: [ - { key: 'variable2', value: 'result' }, - { key: 'variable', value: 'value' }, - { key: 'variable3', value: 'keyresultvalue' } - ] - }, - "out-of-order complex expansion": { - variables: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result' }, - { key: 'variable3', value: 'key${variable2}${variable}' } - ], - keep_undefined: false, - result: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result' }, - { key: 'variable3', value: 'keyresultvalue' } - ] - }, - "missing variable discarding original": { - variables: [ - { key: 'variable2', value: 'key$variable' } - ], - keep_undefined: false, - result: [ - { key: 'variable2', value: 'key' } - ] - }, - "missing variable keeping original": { - variables: [ - { key: 'variable2', value: 'key$variable' } - ], - keep_undefined: true, - result: [ - { key: 'variable2', value: 'key$variable' } - ] - }, - "complex expansions with missing variable keeping original": { - variables: [ - { key: 'variable4', value: 'key${variable}${variable2}${variable3}' }, - { key: 'variable', value: 'value' }, - { key: 'variable3', value: 'value3' } - ], - keep_undefined: true, - result: [ - { key: 'variable', value: 'value' }, - { key: 'variable3', value: 'value3' }, - { key: 'variable4', value: 'keyvalue${variable2}value3' } - ] - }, - "complex expansions with raw variable": { - variables: [ - { key: 'variable3', value: 'key_${variable}_${variable2}' }, - { key: 'variable', value: '$variable2', raw: true }, - { key: 'variable2', value: 'value2' } - ], - keep_undefined: false, - result: [ - { key: 'variable', value: '$variable2', raw: true }, - { key: 'variable2', value: 'value2' }, - { key: 'variable3', value: 'key_$variable2_value2' } - ] - }, - "variable value referencing password with special characters": { - variables: [ - { key: 'VAR', value: '$PASSWORD' }, - { key: 'PASSWORD', value: 'my_password$$_%%_$A' }, - { key: 'A', value: 'value' } - ], - keep_undefined: false, - result: [ - { key: 'VAR', value: 'my_password$$_%%_value' }, - { key: 'PASSWORD', value: 'my_password$$_%%_value' }, - { key: 'A', value: 'value' } - ] - }, - "cyclic dependency causes original array to be returned": { - variables: [ - { key: 'variable', value: '$variable2' }, - { key: 'variable2', value: '$variable3' }, - { key: 'variable3', value: 'key$variable$variable2' } - ], - keep_undefined: false, - result: [ - { key: 'variable', value: '$variable2' }, - { key: 'variable2', value: '$variable3' }, - { key: 'variable3', value: 'key$variable$variable2' } - ] - } - } + it 'returns Collection' do + is_expected.to be_an_instance_of(Gitlab::Ci::Variables::Collection) end - with_them do - let(:collection) { Gitlab::Ci::Variables::Collection.new(variables) } - - subject { collection.sort_and_expand_all(project_with_flag_enabled, keep_undefined: keep_undefined) } - - it 'returns Collection' do - is_expected.to be_an_instance_of(Gitlab::Ci::Variables::Collection) - end - - it 'expands variables' do - var_hash = result.to_h { |env| [env.fetch(:key), env.fetch(:value)] } - .with_indifferent_access - expect(subject.to_hash).to eq(var_hash) - end + it 'expands variables' do + var_hash = result.to_h { |env| [env.fetch(:key), env.fetch(:value)] } + .with_indifferent_access + expect(subject.to_hash).to eq(var_hash) + end - it 'preserves raw attribute' do - expect(subject.pluck(:key, :raw).to_h).to eq(collection.pluck(:key, :raw).to_h) - end + it 'preserves raw attribute' do + expect(subject.pluck(:key, :raw).to_h).to eq(collection.pluck(:key, :raw).to_h) end end end |