diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-20 13:49:51 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-02-20 13:49:51 +0000 |
commit | 71786ddc8e28fbd3cb3fcc4b3ff15e5962a1c82e (patch) | |
tree | 6a2d93ef3fb2d353bb7739e4b57e6541f51cdd71 /spec/models/concerns/ci/maskable_spec.rb | |
parent | a7253423e3403b8c08f8a161e5937e1488f5f407 (diff) | |
download | gitlab-ce-15.9.0-rc42.tar.gz |
Add latest changes from gitlab-org/gitlab@15-9-stable-eev15.9.0-rc42
Diffstat (limited to 'spec/models/concerns/ci/maskable_spec.rb')
-rw-r--r-- | spec/models/concerns/ci/maskable_spec.rb | 116 |
1 files changed, 89 insertions, 27 deletions
diff --git a/spec/models/concerns/ci/maskable_spec.rb b/spec/models/concerns/ci/maskable_spec.rb index 2b13fc21fe8..b57b2b15608 100644 --- a/spec/models/concerns/ci/maskable_spec.rb +++ b/spec/models/concerns/ci/maskable_spec.rb @@ -2,15 +2,16 @@ require 'spec_helper' -RSpec.describe Ci::Maskable do +RSpec.describe Ci::Maskable, feature_category: :pipeline_authoring do let(:variable) { build(:ci_variable) } describe 'masked value validations' do subject { variable } - context 'when variable is masked' do + context 'when variable is masked and expanded' do before do subject.masked = true + subject.raw = false end it { is_expected.not_to allow_value('hello').for(:value) } @@ -20,6 +21,37 @@ RSpec.describe Ci::Maskable do it { is_expected.to allow_value('helloworld').for(:value) } end + context 'when method :raw is not defined' do + let(:test_var_class) do + Struct.new(:masked?) do + include ActiveModel::Validations + include Ci::Maskable + end + end + + let(:variable) { test_var_class.new(true) } + + it 'evaluates masked variables as expanded' do + expect(subject).not_to be_masked_and_raw + expect(subject).to be_masked_and_expanded + end + end + + context 'when variable is masked and raw' do + before do + subject.masked = true + subject.raw = true + end + + it { is_expected.not_to allow_value('hello').for(:value) } + it { is_expected.not_to allow_value('hello world').for(:value) } + it { is_expected.to allow_value('hello\rworld').for(:value) } + it { is_expected.to allow_value('hello$VARIABLEworld').for(:value) } + it { is_expected.to allow_value('helloworld!!!').for(:value) } + it { is_expected.to allow_value('hell******world').for(:value) } + it { is_expected.to allow_value('helloworld123').for(:value) } + end + context 'when variable is not masked' do before do subject.masked = false @@ -33,40 +65,70 @@ RSpec.describe Ci::Maskable do end end - describe 'REGEX' do - subject { Ci::Maskable::REGEX } + describe 'Regexes' do + context 'with MASK_AND_RAW_REGEX' do + subject { Ci::Maskable::MASK_AND_RAW_REGEX } - it 'does not match strings shorter than 8 letters' do - expect(subject.match?('hello')).to eq(false) - end + it 'does not match strings shorter than 8 letters' do + expect(subject.match?('hello')).to eq(false) + end - it 'does not match strings with spaces' do - expect(subject.match?('hello world')).to eq(false) - end + it 'does not match strings with spaces' do + expect(subject.match?('hello world')).to eq(false) + end - it 'does not match strings with shell variables' do - expect(subject.match?('hello$VARIABLEworld')).to eq(false) - end + it 'does not match strings that span more than one line' do + string = <<~EOS + hello + world + EOS - it 'does not match strings with escape characters' do - expect(subject.match?('hello\rworld')).to eq(false) + expect(subject.match?(string)).to eq(false) + end + + it 'matches valid strings' do + expect(subject.match?('hello$VARIABLEworld')).to eq(true) + expect(subject.match?('Hello+World_123/@:-~.')).to eq(true) + expect(subject.match?('hello\rworld')).to eq(true) + expect(subject.match?('HelloWorld%#^')).to eq(true) + end end - it 'does not match strings that span more than one line' do - string = <<~EOS - hello - world - EOS + context 'with REGEX' do + subject { Ci::Maskable::REGEX } - expect(subject.match?(string)).to eq(false) - end + it 'does not match strings shorter than 8 letters' do + expect(subject.match?('hello')).to eq(false) + end - it 'does not match strings using unsupported characters' do - expect(subject.match?('HelloWorld%#^')).to eq(false) - end + it 'does not match strings with spaces' do + expect(subject.match?('hello world')).to eq(false) + end - it 'matches valid strings' do - expect(subject.match?('Hello+World_123/@:-~.')).to eq(true) + it 'does not match strings with shell variables' do + expect(subject.match?('hello$VARIABLEworld')).to eq(false) + end + + it 'does not match strings with escape characters' do + expect(subject.match?('hello\rworld')).to eq(false) + end + + it 'does not match strings that span more than one line' do + string = <<~EOS + hello + world + EOS + + expect(subject.match?(string)).to eq(false) + end + + it 'does not match strings using unsupported characters' do + expect(subject.match?('HelloWorld%#^')).to eq(false) + end + + it 'matches valid strings' do + expect(subject.match?('Hello+World_123/@:-~.')).to eq(true) + end end end |