diff options
Diffstat (limited to 'spec/lib')
-rw-r--r-- | spec/lib/banzai/filter/issue_reference_filter_spec.rb | 16 | ||||
-rw-r--r-- | spec/lib/gitlab/auth_spec.rb | 24 | ||||
-rw-r--r-- | spec/lib/gitlab/encoding_helper_spec.rb | 1 | ||||
-rw-r--r-- | spec/lib/gitlab/fake_application_settings_spec.rb | 10 | ||||
-rw-r--r-- | spec/lib/gitlab/git/repository_spec.rb | 36 | ||||
-rw-r--r-- | spec/lib/gitlab/git/user_spec.rb | 17 | ||||
-rw-r--r-- | spec/lib/gitlab/github_import/importer/repository_importer_spec.rb | 41 | ||||
-rw-r--r-- | spec/lib/gitlab/import_export/all_models.yml | 1 | ||||
-rw-r--r-- | spec/lib/gitlab/import_export/project_tree_restorer_spec.rb | 6 | ||||
-rw-r--r-- | spec/lib/gitlab/import_export/uploads_restorer_spec.rb | 55 | ||||
-rw-r--r-- | spec/lib/gitlab/import_export/uploads_saver_spec.rb | 61 | ||||
-rw-r--r-- | spec/lib/gitlab/metrics/method_call_spec.rb | 58 | ||||
-rw-r--r-- | spec/lib/gitlab/usage_data_spec.rb | 2 |
13 files changed, 242 insertions, 86 deletions
diff --git a/spec/lib/banzai/filter/issue_reference_filter_spec.rb b/spec/lib/banzai/filter/issue_reference_filter_spec.rb index 3c98b18f99b..f70c69ef588 100644 --- a/spec/lib/banzai/filter/issue_reference_filter_spec.rb +++ b/spec/lib/banzai/filter/issue_reference_filter_spec.rb @@ -343,7 +343,9 @@ describe Banzai::Filter::IssueReferenceFilter do reference = "#{project.full_path}##{issue.iid}" doc = reference_filter("See #{reference}", context) - expect(doc.css('a').first.attr('href')).to eq helper.url_for_issue(issue.iid, project) + link = doc.css('a').first + expect(link.attr('href')).to eq(helper.url_for_issue(issue.iid, project)) + expect(link.text).to include("#{project.full_path}##{issue.iid}") end it 'ignores reference for shorthand cross-reference' do @@ -358,7 +360,9 @@ describe Banzai::Filter::IssueReferenceFilter do doc = reference_filter("See #{reference}", context) - expect(doc.css('a').first.attr('href')).to eq(helper.url_for_issue(issue.iid, project) + "#note_123") + link = doc.css('a').first + expect(link.attr('href')).to eq(helper.url_for_issue(issue.iid, project) + "#note_123") + expect(link.text).to include("#{project.full_path}##{issue.iid}") end it 'links to a valid reference for cross-reference in link href' do @@ -367,7 +371,9 @@ describe Banzai::Filter::IssueReferenceFilter do doc = reference_filter("See #{reference_link}", context) - expect(doc.css('a').first.attr('href')).to eq helper.url_for_issue(issue.iid, project) + "#note_123" + link = doc.css('a').first + expect(link.attr('href')).to eq(helper.url_for_issue(issue.iid, project) + "#note_123") + expect(link.text).to include('Reference') end it 'links to a valid reference for issue reference in the link href' do @@ -375,7 +381,9 @@ describe Banzai::Filter::IssueReferenceFilter do reference_link = %{<a href="#{reference}">Reference</a>} doc = reference_filter("See #{reference_link}", context) - expect(doc.css('a').first.attr('href')).to eq helper.url_for_issue(issue.iid, project) + link = doc.css('a').first + expect(link.attr('href')).to eq(helper.url_for_issue(issue.iid, project)) + expect(link.text).to include('Reference') end end diff --git a/spec/lib/gitlab/auth_spec.rb b/spec/lib/gitlab/auth_spec.rb index 3164d2ebf04..a6fbec295b5 100644 --- a/spec/lib/gitlab/auth_spec.rb +++ b/spec/lib/gitlab/auth_spec.rb @@ -207,7 +207,7 @@ describe Gitlab::Auth do end it 'limits abilities based on scope' do - personal_access_token = create(:personal_access_token, scopes: ['read_user']) + personal_access_token = create(:personal_access_token, scopes: %w[read_user sudo]) expect(gl_auth).to receive(:rate_limit!).with('ip', success: true, login: '') expect(gl_auth.find_for_git_client('', personal_access_token.token, project: nil, ip: 'ip')).to eq(Gitlab::Auth::Result.new(personal_access_token.user, nil, :personal_access_token, [])) @@ -251,7 +251,7 @@ describe Gitlab::Auth do end it 'throws an error suggesting user create a PAT when internal auth is disabled' do - allow_any_instance_of(ApplicationSetting).to receive(:password_authentication_enabled?) { false } + allow_any_instance_of(ApplicationSetting).to receive(:password_authentication_enabled_for_git?) { false } expect { gl_auth.find_for_git_client('foo', 'bar', project: nil, ip: 'ip') }.to raise_error(Gitlab::Auth::MissingPersonalAccessTokenError) end @@ -324,6 +324,26 @@ describe Gitlab::Auth do gl_auth.find_with_user_password('ldap_user', 'password') end end + + context "with password authentication disabled for Git" do + before do + stub_application_setting(password_authentication_enabled_for_git: false) + end + + it "does not find user by valid login/password" do + expect(gl_auth.find_with_user_password(username, password)).to be_nil + end + + context "with ldap enabled" do + before do + allow(Gitlab::LDAP::Config).to receive(:enabled?).and_return(true) + end + + it "does not find non-ldap user by valid login/password" do + expect(gl_auth.find_with_user_password(username, password)).to be_nil + end + end + end end private diff --git a/spec/lib/gitlab/encoding_helper_spec.rb b/spec/lib/gitlab/encoding_helper_spec.rb index 9151c66afb3..f6e5c55240f 100644 --- a/spec/lib/gitlab/encoding_helper_spec.rb +++ b/spec/lib/gitlab/encoding_helper_spec.rb @@ -9,6 +9,7 @@ describe Gitlab::EncodingHelper do ["nil", nil, nil], ["empty string", "".encode("ASCII-8BIT"), "".encode("UTF-8")], ["invalid utf-8 encoded string", "my bad string\xE5".force_encoding("UTF-8"), "my bad string"], + ["frozen non-ascii string", "é".force_encoding("ASCII-8BIT").freeze, "é".encode("UTF-8")], [ 'leaves ascii only string as is', 'ascii only string', diff --git a/spec/lib/gitlab/fake_application_settings_spec.rb b/spec/lib/gitlab/fake_application_settings_spec.rb index 34322c2a693..af12e13d36d 100644 --- a/spec/lib/gitlab/fake_application_settings_spec.rb +++ b/spec/lib/gitlab/fake_application_settings_spec.rb @@ -1,25 +1,25 @@ require 'spec_helper' describe Gitlab::FakeApplicationSettings do - let(:defaults) { { password_authentication_enabled: false, foobar: 'asdf', signup_enabled: true, 'test?' => 123 } } + let(:defaults) { { password_authentication_enabled_for_web: false, foobar: 'asdf', signup_enabled: true, 'test?' => 123 } } subject { described_class.new(defaults) } it 'wraps OpenStruct variables properly' do - expect(subject.password_authentication_enabled).to be_falsey + expect(subject.password_authentication_enabled_for_web).to be_falsey expect(subject.signup_enabled).to be_truthy expect(subject.foobar).to eq('asdf') end it 'defines predicate methods' do - expect(subject.password_authentication_enabled?).to be_falsey + expect(subject.password_authentication_enabled_for_web?).to be_falsey expect(subject.signup_enabled?).to be_truthy end it 'predicate method changes when value is updated' do - subject.password_authentication_enabled = true + subject.password_authentication_enabled_for_web = true - expect(subject.password_authentication_enabled?).to be_truthy + expect(subject.password_authentication_enabled_for_web?).to be_truthy end it 'does not define a predicate method' do diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb index f0da77c61bb..2f49bd1bcf2 100644 --- a/spec/lib/gitlab/git/repository_spec.rb +++ b/spec/lib/gitlab/git/repository_spec.rb @@ -588,12 +588,12 @@ describe Gitlab::Git::Repository, seed_helper: true do end end - describe '#fetch_mirror' do + describe '#fetch_as_mirror_without_shell' do let(:new_repository) do Gitlab::Git::Repository.new('default', 'my_project.git', '') end - subject { new_repository.fetch_mirror(repository.path) } + subject { new_repository.fetch_as_mirror_without_shell(repository.path) } before do Gitlab::Shell.new.add_repository('default', 'my_project') @@ -1211,12 +1211,21 @@ describe Gitlab::Git::Repository, seed_helper: true do end context 'when no branch names are specified' do - it 'returns all merged branch names' do + before do + repository.create_branch('identical', 'master') + end + + after do + ensure_seeds + end + + it 'returns all merged branch names except for identical one' do names = repository.merged_branch_names expect(names).to include('merge-test') expect(names).to include('fix-mode') expect(names).not_to include('feature') + expect(names).not_to include('identical') end end end @@ -1643,15 +1652,15 @@ describe Gitlab::Git::Repository, seed_helper: true do end end - describe '#fetch' do + describe '#fetch_remote_without_shell' do let(:git_path) { Gitlab.config.git.bin_path } let(:remote_name) { 'my_remote' } - subject { repository.fetch(remote_name) } + subject { repository.fetch_remote_without_shell(remote_name) } it 'fetches the remote and returns true if the command was successful' do expect(repository).to receive(:popen) - .with(%W(#{git_path} fetch #{remote_name}), repository.path) + .with(%W(#{git_path} fetch #{remote_name}), repository.path, {}) .and_return(['', 0]) expect(subject).to be(true) @@ -1768,21 +1777,6 @@ describe Gitlab::Git::Repository, seed_helper: true do end end - describe '#fetch' do - let(:git_path) { Gitlab.config.git.bin_path } - let(:remote_name) { 'my_remote' } - - subject { repository.fetch(remote_name) } - - it 'fetches the remote and returns true if the command was successful' do - expect(repository).to receive(:popen) - .with(%W(#{git_path} fetch #{remote_name}), repository.path) - .and_return(['', 0]) - - expect(subject).to be(true) - end - end - describe '#delete_all_refs_except' do let(:repository) do Gitlab::Git::Repository.new('default', TEST_MUTABLE_REPO_PATH, '') diff --git a/spec/lib/gitlab/git/user_spec.rb b/spec/lib/gitlab/git/user_spec.rb index eb8db819045..99d850e1df9 100644 --- a/spec/lib/gitlab/git/user_spec.rb +++ b/spec/lib/gitlab/git/user_spec.rb @@ -1,9 +1,9 @@ require 'spec_helper' describe Gitlab::Git::User do - let(:username) { 'janedo' } - let(:name) { 'Jane Doe' } - let(:email) { 'janedoe@example.com' } + let(:username) { 'janedoe' } + let(:name) { 'Jane Doé' } + let(:email) { 'janedoé@example.com' } let(:gl_id) { 'user-123' } let(:user) do described_class.new(username, name, email, gl_id) @@ -13,7 +13,7 @@ describe Gitlab::Git::User do describe '.from_gitaly' do let(:gitaly_user) do - Gitaly::User.new(gl_username: username, name: name, email: email, gl_id: gl_id) + Gitaly::User.new(gl_username: username, name: name.b, email: email.b, gl_id: gl_id) end subject { described_class.from_gitaly(gitaly_user) } @@ -48,8 +48,13 @@ describe Gitlab::Git::User do it 'creates a Gitaly::User with the correct data' do expect(subject).to be_a(Gitaly::User) expect(subject.gl_username).to eq(username) - expect(subject.name).to eq(name) - expect(subject.email).to eq(email) + + expect(subject.name).to eq(name.b) + expect(subject.name).to be_a_binary_string + + expect(subject.email).to eq(email.b) + expect(subject.email).to be_a_binary_string + expect(subject.gl_id).to eq(gl_id) end end diff --git a/spec/lib/gitlab/github_import/importer/repository_importer_spec.rb b/spec/lib/gitlab/github_import/importer/repository_importer_spec.rb index 80539807711..168e5d07504 100644 --- a/spec/lib/gitlab/github_import/importer/repository_importer_spec.rb +++ b/spec/lib/gitlab/github_import/importer/repository_importer_spec.rb @@ -164,12 +164,9 @@ describe Gitlab::GithubImport::Importer::RepositoryImporter do expect(project) .to receive(:ensure_repository) - expect(importer) - .to receive(:configure_repository_remote) - expect(repository) - .to receive(:fetch_remote) - .with('github', forced: true) + .to receive(:fetch_as_mirror) + .with(project.import_url, refmap: Gitlab::GithubImport.refmap, forced: true, remote_name: 'github') expect(importer.import_repository).to eq(true) end @@ -186,40 +183,6 @@ describe Gitlab::GithubImport::Importer::RepositoryImporter do end end - describe '#configure_repository_remote' do - it 'configures the remote details' do - expect(repository) - .to receive(:remote_exists?) - .with('github') - .and_return(false) - - expect(repository) - .to receive(:add_remote) - .with('github', 'foo.git') - - expect(repository) - .to receive(:set_import_remote_as_mirror) - .with('github') - - expect(repository) - .to receive(:add_remote_fetch_config) - - importer.configure_repository_remote - end - - it 'does not configure the remote if already configured' do - expect(repository) - .to receive(:remote_exists?) - .with('github') - .and_return(true) - - expect(repository) - .not_to receive(:add_remote) - - importer.configure_repository_remote - end - end - describe '#import_wiki_repository' do it 'imports the wiki repository' do expect(importer.gitlab_shell) diff --git a/spec/lib/gitlab/import_export/all_models.yml b/spec/lib/gitlab/import_export/all_models.yml index bf1e97654e5..0ecb50f7110 100644 --- a/spec/lib/gitlab/import_export/all_models.yml +++ b/spec/lib/gitlab/import_export/all_models.yml @@ -88,6 +88,7 @@ merge_requests: - metrics - timelogs - head_pipeline +- latest_merge_request_diff merge_request_diff: - merge_request - merge_request_diff_commits diff --git a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb index c2bda6f8821..4d78a4b9b13 100644 --- a/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb +++ b/spec/lib/gitlab/import_export/project_tree_restorer_spec.rb @@ -117,6 +117,12 @@ describe Gitlab::ImportExport::ProjectTreeRestorer do expect(st_commits.first[:committed_date]).to be_kind_of(Time) end + it 'has the correct data for merge request latest_merge_request_diff' do + MergeRequest.find_each do |merge_request| + expect(merge_request.latest_merge_request_diff_id).to eq(merge_request.merge_request_diffs.maximum(:id)) + end + end + it 'has labels associated to label links, associated to issues' do expect(Label.first.label_links.first.target).not_to be_nil end diff --git a/spec/lib/gitlab/import_export/uploads_restorer_spec.rb b/spec/lib/gitlab/import_export/uploads_restorer_spec.rb new file mode 100644 index 00000000000..63992ea8ab8 --- /dev/null +++ b/spec/lib/gitlab/import_export/uploads_restorer_spec.rb @@ -0,0 +1,55 @@ +require 'spec_helper' + +describe Gitlab::ImportExport::UploadsRestorer do + describe 'bundle a project Git repo' do + let(:export_path) { "#{Dir.tmpdir}/uploads_saver_spec" } + let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: project.full_path) } + let(:uploads_path) { FileUploader.dynamic_path_segment(project) } + + before do + allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path) + FileUtils.mkdir_p(File.join(shared.export_path, 'uploads/random')) + FileUtils.touch(File.join(shared.export_path, 'uploads/random', "dummy.txt")) + end + + after do + FileUtils.rm_rf(export_path) + end + + describe 'legacy storage' do + let(:project) { create(:project) } + + subject(:restorer) { described_class.new(project: project, shared: shared) } + + it 'saves the uploads successfully' do + expect(restorer.restore).to be true + end + + it 'copies the uploads to the project path' do + restorer.restore + + uploads = Dir.glob(File.join(uploads_path, '**/*')).map { |file| File.basename(file) } + + expect(uploads).to include('dummy.txt') + end + end + + describe 'hashed storage' do + let(:project) { create(:project, :hashed) } + + subject(:restorer) { described_class.new(project: project, shared: shared) } + + it 'saves the uploads successfully' do + expect(restorer.restore).to be true + end + + it 'copies the uploads to the project path' do + restorer.restore + + uploads = Dir.glob(File.join(uploads_path, '**/*')).map { |file| File.basename(file) } + + expect(uploads).to include('dummy.txt') + end + end + end +end diff --git a/spec/lib/gitlab/import_export/uploads_saver_spec.rb b/spec/lib/gitlab/import_export/uploads_saver_spec.rb new file mode 100644 index 00000000000..e8948de1f3a --- /dev/null +++ b/spec/lib/gitlab/import_export/uploads_saver_spec.rb @@ -0,0 +1,61 @@ +require 'spec_helper' + +describe Gitlab::ImportExport::UploadsSaver do + describe 'bundle a project Git repo' do + let(:export_path) { "#{Dir.tmpdir}/uploads_saver_spec" } + let(:file) { fixture_file_upload(Rails.root + 'spec/fixtures/banana_sample.gif', 'image/gif') } + let(:shared) { Gitlab::ImportExport::Shared.new(relative_path: project.full_path) } + + before do + allow_any_instance_of(Gitlab::ImportExport).to receive(:storage_path).and_return(export_path) + end + + after do + FileUtils.rm_rf(export_path) + end + + describe 'legacy storage' do + let(:project) { create(:project) } + + subject(:saver) { described_class.new(shared: shared, project: project) } + + before do + UploadService.new(project, file, FileUploader).execute + end + + it 'saves the uploads successfully' do + expect(saver.save).to be true + end + + it 'copies the uploads to the export path' do + saver.save + + uploads = Dir.glob(File.join(shared.export_path, 'uploads', '**/*')).map { |file| File.basename(file) } + + expect(uploads).to include('banana_sample.gif') + end + end + + describe 'hashed storage' do + let(:project) { create(:project, :hashed) } + + subject(:saver) { described_class.new(shared: shared, project: project) } + + before do + UploadService.new(project, file, FileUploader).execute + end + + it 'saves the uploads successfully' do + expect(saver.save).to be true + end + + it 'copies the uploads to the export path' do + saver.save + + uploads = Dir.glob(File.join(shared.export_path, 'uploads', '**/*')).map { |file| File.basename(file) } + + expect(uploads).to include('banana_sample.gif') + end + end + end +end diff --git a/spec/lib/gitlab/metrics/method_call_spec.rb b/spec/lib/gitlab/metrics/method_call_spec.rb index f1e9e414e0d..5341addf911 100644 --- a/spec/lib/gitlab/metrics/method_call_spec.rb +++ b/spec/lib/gitlab/metrics/method_call_spec.rb @@ -13,16 +13,52 @@ describe Gitlab::Metrics::MethodCall do expect(method_call.call_count).to eq(1) end - it 'observes the performance of the supplied block' do - expect(described_class.call_real_duration_histogram) - .to receive(:observe) - .with({ module: :Foo, method: '#bar' }, be_a_kind_of(Numeric)) + context 'when measurement is above threshold' do + before do + allow(method_call).to receive(:above_threshold?).and_return(true) + end - expect(described_class.call_cpu_duration_histogram) - .to receive(:observe) - .with({ module: :Foo, method: '#bar' }, be_a_kind_of(Numeric)) + context 'prometheus instrumentation is enabled' do + before do + Feature.get(:prometheus_metrics_method_instrumentation).enable + end - method_call.measure { 'foo' } + it 'observes the performance of the supplied block' do + expect(described_class.call_duration_histogram) + .to receive(:observe) + .with({ module: :Foo, method: '#bar' }, be_a_kind_of(Numeric)) + + method_call.measure { 'foo' } + end + end + + context 'prometheus instrumentation is disabled' do + before do + Feature.get(:prometheus_metrics_method_instrumentation).disable + end + + it 'does not observe the performance' do + expect(described_class.call_duration_histogram) + .not_to receive(:observe) + + method_call.measure { 'foo' } + end + end + end + + context 'when measurement is below threshold' do + before do + allow(method_call).to receive(:above_threshold?).and_return(false) + + Feature.get(:prometheus_metrics_method_instrumentation).enable + end + + it 'does not observe the performance' do + expect(described_class.call_duration_histogram) + .not_to receive(:observe) + + method_call.measure { 'foo' } + end end end @@ -43,7 +79,13 @@ describe Gitlab::Metrics::MethodCall do end describe '#above_threshold?' do + before do + allow(Gitlab::Metrics).to receive(:method_call_threshold).and_return(100) + end + it 'returns false when the total call time is not above the threshold' do + expect(method_call).to receive(:real_time).and_return(9) + expect(method_call.above_threshold?).to eq(false) end diff --git a/spec/lib/gitlab/usage_data_spec.rb b/spec/lib/gitlab/usage_data_spec.rb index a4c1113ae37..b5f2a15ada3 100644 --- a/spec/lib/gitlab/usage_data_spec.rb +++ b/spec/lib/gitlab/usage_data_spec.rb @@ -103,7 +103,7 @@ describe Gitlab::UsageData do subject { described_class.features_usage_data_ce } it 'gathers feature usage data' do - expect(subject[:signup]).to eq(current_application_settings.signup_enabled?) + expect(subject[:signup]).to eq(current_application_settings.allow_signup?) expect(subject[:ldap]).to eq(Gitlab.config.ldap.enabled) expect(subject[:gravatar]).to eq(current_application_settings.gravatar_enabled?) expect(subject[:omniauth]).to eq(Gitlab.config.omniauth.enabled) |