diff options
Diffstat (limited to 'spec/lib')
-rw-r--r-- | spec/lib/api/helpers/custom_validators_spec.rb | 193 | ||||
-rw-r--r-- | spec/lib/api/validations/validators/absence_spec.rb | 23 | ||||
-rw-r--r-- | spec/lib/api/validations/validators/array_none_any_spec.rb | 28 | ||||
-rw-r--r-- | spec/lib/api/validations/validators/file_path_spec.rb | 36 | ||||
-rw-r--r-- | spec/lib/api/validations/validators/git_ref_spec.rb | 46 | ||||
-rw-r--r-- | spec/lib/api/validations/validators/git_sha_spec.rb | 37 | ||||
-rw-r--r-- | spec/lib/api/validations/validators/integer_none_any_spec.rb | 28 | ||||
-rw-r--r-- | spec/lib/banzai/filter/autolink_filter_spec.rb | 5 | ||||
-rw-r--r-- | spec/lib/gitlab/git/blob_spec.rb | 42 |
9 files changed, 222 insertions, 216 deletions
diff --git a/spec/lib/api/helpers/custom_validators_spec.rb b/spec/lib/api/helpers/custom_validators_spec.rb deleted file mode 100644 index a4f2cd3452c..00000000000 --- a/spec/lib/api/helpers/custom_validators_spec.rb +++ /dev/null @@ -1,193 +0,0 @@ -# frozen_string_literal: true - -require 'spec_helper' - -describe API::Helpers::CustomValidators do - let(:scope) do - Struct.new(:opts) do - def full_name(attr_name) - attr_name - end - end - end - - describe API::Helpers::CustomValidators::Absence do - 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 - - describe API::Helpers::CustomValidators::GitSha do - 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 - - describe API::Helpers::CustomValidators::GitRef do - 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 - - describe API::Helpers::CustomValidators::FilePath do - 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 - - describe API::Helpers::CustomValidators::IntegerNoneAny do - 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 - - describe API::Helpers::CustomValidators::ArrayNoneAny do - 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 - - def expect_no_validation_error(params) - expect { validate_test_param!(params) }.not_to raise_error - end - - def expect_validation_error(params) - expect { validate_test_param!(params) }.to raise_error(Grape::Exceptions::Validation) - end - - def validate_test_param!(params) - subject.validate_param!('test', params) - end -end 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 diff --git a/spec/lib/banzai/filter/autolink_filter_spec.rb b/spec/lib/banzai/filter/autolink_filter_spec.rb index 8fba72a23f6..be6192f9ead 100644 --- a/spec/lib/banzai/filter/autolink_filter_spec.rb +++ b/spec/lib/banzai/filter/autolink_filter_spec.rb @@ -192,11 +192,6 @@ describe Banzai::Filter::AutolinkFilter do expect(doc.text).to eq "See <<<#{link}>>>" end - it 'accepts link_attr options' do - doc = filter("See #{link}", link_attr: { class: 'custom' }) - expect(doc.at_css('a')['class']).to eq 'custom' - end - it 'escapes RTLO and other characters' do # rendered text looks like "http://example.com/evilexe.mp3" evil_link = "#{link}evil\u202E3pm.exe" diff --git a/spec/lib/gitlab/git/blob_spec.rb b/spec/lib/gitlab/git/blob_spec.rb index 9c2f0e910b1..f25383ef416 100644 --- a/spec/lib/gitlab/git/blob_spec.rb +++ b/spec/lib/gitlab/git/blob_spec.rb @@ -409,37 +409,43 @@ describe Gitlab::Git::Blob, :seed_helper do end end - describe 'encoding' do + describe 'encoding', :aggregate_failures do context 'file with russian text' do let(:blob) { Gitlab::Git::Blob.find(repository, SeedRepo::Commit::ID, "encoding/russian.rb") } - it { expect(blob.name).to eq("russian.rb") } - it { expect(blob.data.lines.first).to eq("Хороший файл") } - it { expect(blob.size).to eq(23) } - it { expect(blob.truncated?).to be_falsey } - # Run it twice since data is encoded after the first run - it { expect(blob.truncated?).to be_falsey } - it { expect(blob.mode).to eq("100755") } + it 'has the correct blob attributes' do + expect(blob.name).to eq("russian.rb") + expect(blob.data.lines.first).to eq("Хороший файл") + expect(blob.size).to eq(23) + expect(blob.truncated?).to be_falsey + # Run it twice since data is encoded after the first run + expect(blob.truncated?).to be_falsey + expect(blob.mode).to eq("100755") + end end context 'file with Japanese text' do let(:blob) { Gitlab::Git::Blob.find(repository, SeedRepo::Commit::ID, "encoding/テスト.txt") } - it { expect(blob.name).to eq("テスト.txt") } - it { expect(blob.data).to include("これはテスト") } - it { expect(blob.size).to eq(340) } - it { expect(blob.mode).to eq("100755") } - it { expect(blob.truncated?).to be_falsey } + it 'has the correct blob attributes' do + expect(blob.name).to eq("テスト.txt") + expect(blob.data).to include("これはテスト") + expect(blob.size).to eq(340) + expect(blob.mode).to eq("100755") + expect(blob.truncated?).to be_falsey + end end context 'file with ISO-8859 text' do let(:blob) { Gitlab::Git::Blob.find(repository, SeedRepo::LastCommit::ID, "encoding/iso8859.txt") } - it { expect(blob.name).to eq("iso8859.txt") } - it { expect(blob.loaded_size).to eq(4) } - it { expect(blob.size).to eq(4) } - it { expect(blob.mode).to eq("100644") } - it { expect(blob.truncated?).to be_falsey } + it 'has the correct blob attributes' do + expect(blob.name).to eq("iso8859.txt") + expect(blob.loaded_size).to eq(4) + expect(blob.size).to eq(4) + expect(blob.mode).to eq("100644") + expect(blob.truncated?).to be_falsey + end end end |