diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-19 11:27:35 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-11-19 11:27:35 +0300 |
commit | 7e9c479f7de77702622631cff2628a9c8dcbc627 (patch) | |
tree | c8f718a08e110ad7e1894510980d2155a6549197 /spec/lib/expand_variables_spec.rb | |
parent | e852b0ae16db4052c1c567d9efa4facc81146e88 (diff) |
Add latest changes from gitlab-org/gitlab@13-6-stable-eev13.6.0-rc42
Diffstat (limited to 'spec/lib/expand_variables_spec.rb')
-rw-r--r-- | spec/lib/expand_variables_spec.rb | 280 |
1 files changed, 186 insertions, 94 deletions
diff --git a/spec/lib/expand_variables_spec.rb b/spec/lib/expand_variables_spec.rb index 4a5b70ff248..a994b4b92a6 100644 --- a/spec/lib/expand_variables_spec.rb +++ b/spec/lib/expand_variables_spec.rb @@ -3,106 +3,132 @@ require 'spec_helper' RSpec.describe ExpandVariables do + shared_examples 'common variable expansion' do |expander| + using RSpec::Parameterized::TableSyntax + + where do + { + "no expansion": { + value: 'key', + result: 'key', + variables: [] + }, + "simple expansion": { + value: 'key$variable', + result: 'keyvalue', + variables: [ + { key: 'variable', value: 'value' } + ] + }, + "simple with hash of variables": { + value: 'key$variable', + result: 'keyvalue', + variables: { + 'variable' => 'value' + } + }, + "complex expansion": { + value: 'key${variable}', + result: 'keyvalue', + variables: [ + { key: 'variable', value: 'value' } + ] + }, + "simple expansions": { + value: 'key$variable$variable2', + result: 'keyvalueresult', + variables: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result' } + ] + }, + "complex expansions": { + value: 'key${variable}${variable2}', + result: 'keyvalueresult', + variables: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result' } + ] + }, + "out-of-order expansion": { + value: 'key$variable2$variable', + result: 'keyresultvalue', + variables: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result' } + ] + }, + "out-of-order complex expansion": { + value: 'key${variable2}${variable}', + result: 'keyresultvalue', + variables: [ + { key: 'variable', value: 'value' }, + { key: 'variable2', value: 'result' } + ] + }, + "review-apps expansion": { + value: 'review/$CI_COMMIT_REF_NAME', + result: 'review/feature/add-review-apps', + variables: [ + { key: 'CI_COMMIT_REF_NAME', value: 'feature/add-review-apps' } + ] + }, + "do not lazily access variables when no expansion": { + value: 'key', + result: 'key', + variables: -> { raise NotImplementedError } + }, + "lazily access variables": { + value: 'key$variable', + result: 'keyvalue', + variables: -> { [{ key: 'variable', value: 'value' }] } + } + } + end + + with_them do + subject { expander.call(value, variables) } + + it { is_expected.to eq(result) } + end + end + describe '#expand' do context 'table tests' do - using RSpec::Parameterized::TableSyntax - - where do - { - "no expansion": { - value: 'key', - result: 'key', - variables: [] - }, - "missing variable": { - value: 'key$variable', - result: 'key', - variables: [] - }, - "simple expansion": { - value: 'key$variable', - result: 'keyvalue', - variables: [ - { key: 'variable', value: 'value' } - ] - }, - "simple with hash of variables": { - value: 'key$variable', - result: 'keyvalue', - variables: { - 'variable' => 'value' + it_behaves_like 'common variable expansion', described_class.method(:expand) + + context 'with missing variables' do + using RSpec::Parameterized::TableSyntax + + where do + { + "missing variable": { + value: 'key$variable', + result: 'key', + variables: [] + }, + "complex expansions with missing variable": { + value: 'key${variable}${variable2}', + result: 'keyvalue', + variables: [ + { key: 'variable', value: 'value' } + ] + }, + "complex expansions with missing variable for Windows": { + value: 'key%variable%%variable2%', + result: 'keyvalue', + variables: [ + { key: 'variable', value: 'value' } + ] } - }, - "complex expansion": { - value: 'key${variable}', - result: 'keyvalue', - variables: [ - { key: 'variable', value: 'value' } - ] - }, - "simple expansions": { - value: 'key$variable$variable2', - result: 'keyvalueresult', - variables: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result' } - ] - }, - "complex expansions": { - value: 'key${variable}${variable2}', - result: 'keyvalueresult', - variables: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result' } - ] - }, - "complex expansions with missing variable": { - value: 'key${variable}${variable2}', - result: 'keyvalue', - variables: [ - { key: 'variable', value: 'value' } - ] - }, - "out-of-order expansion": { - value: 'key$variable2$variable', - result: 'keyresultvalue', - variables: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result' } - ] - }, - "out-of-order complex expansion": { - value: 'key${variable2}${variable}', - result: 'keyresultvalue', - variables: [ - { key: 'variable', value: 'value' }, - { key: 'variable2', value: 'result' } - ] - }, - "review-apps expansion": { - value: 'review/$CI_COMMIT_REF_NAME', - result: 'review/feature/add-review-apps', - variables: [ - { key: 'CI_COMMIT_REF_NAME', value: 'feature/add-review-apps' } - ] - }, - "do not lazily access variables when no expansion": { - value: 'key', - result: 'key', - variables: -> { raise NotImplementedError } - }, - "lazily access variables": { - value: 'key$variable', - result: 'keyvalue', - variables: -> { [{ key: 'variable', value: 'value' }] } } - } - end + end - with_them do - subject { ExpandVariables.expand(value, variables) } + with_them do + subject { ExpandVariables.expand(value, variables) } - it { is_expected.to eq(result) } + it { is_expected.to eq(result) } + end end end @@ -132,4 +158,70 @@ RSpec.describe ExpandVariables do end end end + + describe '#expand_existing' do + context 'table tests' do + it_behaves_like 'common variable expansion', described_class.method(:expand_existing) + + context 'with missing variables' do + using RSpec::Parameterized::TableSyntax + + where do + { + "missing variable": { + value: 'key$variable', + result: 'key$variable', + variables: [] + }, + "complex expansions with missing variable": { + value: 'key${variable}${variable2}', + result: 'keyvalue${variable2}', + variables: [ + { key: 'variable', value: 'value' } + ] + }, + "complex expansions with missing variable for Windows": { + value: 'key%variable%%variable2%', + result: 'keyvalue%variable2%', + variables: [ + { key: 'variable', value: 'value' } + ] + } + } + end + + with_them do + subject { ExpandVariables.expand_existing(value, variables) } + + it { is_expected.to eq(result) } + end + end + end + + context 'lazily inits variables' do + let(:variables) { -> { [{ key: 'variable', value: 'result' }] } } + + subject { described_class.expand_existing(value, variables) } + + context 'when expanding variable' do + let(:value) { 'key$variable$variable2' } + + it 'calls block at most once' do + expect(variables).to receive(:call).once.and_call_original + + is_expected.to eq('keyresult$variable2') + end + end + + context 'when no expansion is needed' do + let(:value) { 'key' } + + it 'does not call block' do + expect(variables).not_to receive(:call) + + is_expected.to eq('key') + end + end + end + end end |