diff options
Diffstat (limited to 'spec/lib/api/validations')
6 files changed, 198 insertions, 0 deletions
diff --git a/spec/lib/api/validations/validators/absence_spec.rb b/spec/lib/api/validations/validators/absence_spec.rb new file mode 100644 index 00000000000..31120979d4f --- /dev/null +++ b/spec/lib/api/validations/validators/absence_spec.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::Validations::Validators::Absence do + include ApiValidatorsHelpers + + subject do + described_class.new(['test'], {}, false, scope.new) + end + + context 'empty param' do + it 'does not raise a validation error' do + expect_no_validation_error({}) + end + end + + context 'invalid parameters' do + it 'raises a validation error' do + expect_validation_error('test' => 'some_value') + end + end +end diff --git a/spec/lib/api/validations/validators/array_none_any_spec.rb b/spec/lib/api/validations/validators/array_none_any_spec.rb new file mode 100644 index 00000000000..03f1c63b117 --- /dev/null +++ b/spec/lib/api/validations/validators/array_none_any_spec.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::Validations::Validators::ArrayNoneAny do + include ApiValidatorsHelpers + + subject do + described_class.new(['test'], {}, false, scope.new) + end + + context 'valid parameters' do + it 'does not raise a validation error' do + expect_no_validation_error('test' => []) + expect_no_validation_error('test' => [1, 2, 3]) + expect_no_validation_error('test' => 'None') + expect_no_validation_error('test' => 'Any') + expect_no_validation_error('test' => 'none') + expect_no_validation_error('test' => 'any') + end + end + + context 'invalid parameters' do + it 'raises a validation error' do + expect_validation_error('test' => 'some_other_string') + end + end +end diff --git a/spec/lib/api/validations/validators/file_path_spec.rb b/spec/lib/api/validations/validators/file_path_spec.rb new file mode 100644 index 00000000000..8679f102d23 --- /dev/null +++ b/spec/lib/api/validations/validators/file_path_spec.rb @@ -0,0 +1,36 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::Validations::Validators::FilePath do + include ApiValidatorsHelpers + + subject do + described_class.new(['test'], {}, false, scope.new) + end + + context 'valid file path' do + it 'does not raise a validation error' do + expect_no_validation_error('test' => './foo') + expect_no_validation_error('test' => './bar.rb') + expect_no_validation_error('test' => 'foo%2Fbar%2Fnew%2Ffile.rb') + expect_no_validation_error('test' => 'foo%2Fbar%2Fnew') + expect_no_validation_error('test' => 'foo%252Fbar%252Fnew%252Ffile.rb') + end + end + + context 'invalid file path' do + it 'raise a validation error' do + expect_validation_error('test' => '../foo') + expect_validation_error('test' => '../') + expect_validation_error('test' => 'foo/../../bar') + expect_validation_error('test' => 'foo/../') + expect_validation_error('test' => 'foo/..') + expect_validation_error('test' => '../') + expect_validation_error('test' => '..\\') + expect_validation_error('test' => '..\/') + expect_validation_error('test' => '%2e%2e%2f') + expect_validation_error('test' => '/etc/passwd') + end + end +end diff --git a/spec/lib/api/validations/validators/git_ref_spec.rb b/spec/lib/api/validations/validators/git_ref_spec.rb new file mode 100644 index 00000000000..84de6272fe1 --- /dev/null +++ b/spec/lib/api/validations/validators/git_ref_spec.rb @@ -0,0 +1,46 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::Validations::Validators::GitRef do + include ApiValidatorsHelpers + + subject do + described_class.new(['test'], {}, false, scope.new) + end + + context 'valid revision param' do + it 'does not raise a validation error' do + expect_no_validation_error('test' => '4e963fe') + expect_no_validation_error('test' => 'foo/bar/baz') + expect_no_validation_error('test' => "heads/fu\303\237") + expect_no_validation_error('test' => 'a' * 1024) + end + end + + context "revision param contains invalid chars" do + it 'raises a validation error' do + expect_validation_error('test' => '-4e963fe') + expect_validation_error('test' => '4e963fe..ed4ef') + expect_validation_error('test' => '4e96\3fe') + expect_validation_error('test' => '4e96@3fe') + expect_validation_error('test' => '4e9@{63fe') + expect_validation_error('test' => '4e963 fe') + expect_validation_error('test' => '4e96~3fe') + expect_validation_error('test' => '^4e963fe') + expect_validation_error('test' => '4:e963fe') + expect_validation_error('test' => '4e963fe.') + expect_validation_error('test' => 'heads/foo..bar') + expect_validation_error('test' => 'foo/bar/.') + expect_validation_error('test' => 'heads/v@{ation') + expect_validation_error('test' => 'refs/heads/foo.') + expect_validation_error('test' => 'heads/foo\bar') + expect_validation_error('test' => 'heads/f[/bar') + expect_validation_error('test' => "heads/foo\t") + expect_validation_error('test' => "heads/foo\177") + expect_validation_error('test' => "#{'a' * 1025}") + expect_validation_error('test' => nil) + expect_validation_error('test' => '') + end + end +end diff --git a/spec/lib/api/validations/validators/git_sha_spec.rb b/spec/lib/api/validations/validators/git_sha_spec.rb new file mode 100644 index 00000000000..39c2fe1dcf9 --- /dev/null +++ b/spec/lib/api/validations/validators/git_sha_spec.rb @@ -0,0 +1,37 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::Validations::Validators::GitSha do + include ApiValidatorsHelpers + + let(:sha) { RepoHelpers.sample_commit.id } + let(:short_sha) { sha[0, Gitlab::Git::Commit::MIN_SHA_LENGTH] } + let(:too_short_sha) { sha[0, Gitlab::Git::Commit::MIN_SHA_LENGTH - 1] } + + subject do + described_class.new(['test'], {}, false, scope.new) + end + + context 'valid sha' do + it 'does not raise a validation error' do + expect_no_validation_error('test' => sha) + expect_no_validation_error('test' => short_sha) + end + end + + context 'empty params' do + it 'raises a validation error' do + expect_validation_error('test' => nil) + expect_validation_error('test' => '') + end + end + + context 'invalid sha' do + it 'raises a validation error' do + expect_validation_error('test' => "#{sha}2") # Sha length > 40 + expect_validation_error('test' => 'somestring') + expect_validation_error('test' => too_short_sha) # sha length < MIN_SHA_LENGTH (7) + end + end +end diff --git a/spec/lib/api/validations/validators/integer_none_any_spec.rb b/spec/lib/api/validations/validators/integer_none_any_spec.rb new file mode 100644 index 00000000000..a42f69fd96e --- /dev/null +++ b/spec/lib/api/validations/validators/integer_none_any_spec.rb @@ -0,0 +1,28 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe API::Validations::Validators::IntegerNoneAny do + include ApiValidatorsHelpers + + subject do + described_class.new(['test'], {}, false, scope.new) + end + + context 'valid parameters' do + it 'does not raise a validation error' do + expect_no_validation_error('test' => 2) + expect_no_validation_error('test' => 100) + expect_no_validation_error('test' => 'None') + expect_no_validation_error('test' => 'Any') + expect_no_validation_error('test' => 'none') + expect_no_validation_error('test' => 'any') + end + end + + context 'invalid parameters' do + it 'raises a validation error' do + expect_validation_error({ 'test' => 'some_other_string' }) + end + end +end |