diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2021-07-26 09:09:00 +0000 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2021-07-26 09:09:00 +0000 |
commit | ec3483bd1831dfca0c7baec0f8aad9079d28907d (patch) | |
tree | 67b6f8eed91c44ab4054191d2a2fbf9d18cc695e /spec | |
parent | d10e03ba6f8d5d425e53931d306a099404a5958b (diff) | |
download | gitlab-ce-ec3483bd1831dfca0c7baec0f8aad9079d28907d.tar.gz |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r-- | spec/factories_spec.rb | 1 | ||||
-rw-r--r-- | spec/frontend/sidebar/components/severity/sidebar_severity_spec.js | 57 | ||||
-rw-r--r-- | spec/lib/gitlab/git/repository_spec.rb | 41 | ||||
-rw-r--r-- | spec/lib/gitlab/gitaly_client/remote_service_spec.rb | 25 | ||||
-rw-r--r-- | spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb | 28 | ||||
-rw-r--r-- | spec/models/project_spec.rb | 8 | ||||
-rw-r--r-- | spec/models/remote_mirror_spec.rb | 80 | ||||
-rw-r--r-- | spec/models/repository_spec.rb | 96 | ||||
-rw-r--r-- | spec/services/notification_service_spec.rb | 4 | ||||
-rw-r--r-- | spec/services/projects/update_remote_mirror_service_spec.rb | 21 | ||||
-rw-r--r-- | spec/workers/repository_remove_remote_worker_spec.rb | 20 |
11 files changed, 71 insertions, 310 deletions
diff --git a/spec/factories_spec.rb b/spec/factories_spec.rb index 80e94fa1628..2b308c9080e 100644 --- a/spec/factories_spec.rb +++ b/spec/factories_spec.rb @@ -30,7 +30,6 @@ RSpec.describe 'factories' do [:pages_domain, :with_trusted_expired_chain], [:pages_domain, :explicit_ecdsa], [:project_member, :blocked], - [:project, :remote_mirror], [:remote_mirror, :ssh], [:user_preference, :only_comments], [:ci_pipeline_artifact, :remote_store] diff --git a/spec/frontend/sidebar/components/severity/sidebar_severity_spec.js b/spec/frontend/sidebar/components/severity/sidebar_severity_spec.js index 747d370e1cf..6116bc68927 100644 --- a/spec/frontend/sidebar/components/severity/sidebar_severity_spec.js +++ b/spec/frontend/sidebar/components/severity/sidebar_severity_spec.js @@ -1,5 +1,6 @@ import { GlDropdown, GlDropdownItem, GlLoadingIcon, GlTooltip, GlSprintf } from '@gitlab/ui'; -import { shallowMount } from '@vue/test-utils'; +import { nextTick } from 'vue'; +import { shallowMountExtended } from 'helpers/vue_test_utils_helper'; import waitForPromises from 'helpers/wait_for_promises'; import createFlash from '~/flash'; import { INCIDENT_SEVERITY, ISSUABLE_TYPES } from '~/sidebar/components/severity/constants'; @@ -15,6 +16,7 @@ describe('SidebarSeverity', () => { const projectPath = 'gitlab-org/gitlab-test'; const iid = '1'; const severity = 'CRITICAL'; + let canUpdate = true; function createComponent(props = {}) { const propsData = { @@ -25,8 +27,11 @@ describe('SidebarSeverity', () => { ...props, }; mutate = jest.fn(); - wrapper = shallowMount(SidebarSeverity, { + wrapper = shallowMountExtended(SidebarSeverity, { propsData, + provide: { + canUpdate, + }, mocks: { $apollo: { mutate, @@ -45,22 +50,34 @@ describe('SidebarSeverity', () => { afterEach(() => { if (wrapper) { wrapper.destroy(); - wrapper = null; } }); - const findSeverityToken = () => wrapper.findAll(SeverityToken); - const findEditBtn = () => wrapper.find('[data-testid="editButton"]'); - const findDropdown = () => wrapper.find(GlDropdown); - const findCriticalSeverityDropdownItem = () => wrapper.find(GlDropdownItem); - const findLoadingIcon = () => wrapper.find(GlLoadingIcon); - const findTooltip = () => wrapper.find(GlTooltip); + const findSeverityToken = () => wrapper.findAllComponents(SeverityToken); + const findEditBtn = () => wrapper.findByTestId('editButton'); + const findDropdown = () => wrapper.findComponent(GlDropdown); + const findCriticalSeverityDropdownItem = () => wrapper.findComponent(GlDropdownItem); + const findLoadingIcon = () => wrapper.findComponent(GlLoadingIcon); + const findTooltip = () => wrapper.findComponent(GlTooltip); const findCollapsedSeverity = () => wrapper.find({ ref: 'severity' }); - it('renders severity widget', () => { - expect(findEditBtn().exists()).toBe(true); - expect(findSeverityToken().exists()).toBe(true); - expect(findDropdown().exists()).toBe(true); + describe('Severity widget', () => { + it('renders severity dropdown and token', () => { + expect(findSeverityToken().exists()).toBe(true); + expect(findDropdown().exists()).toBe(true); + }); + + describe('edit button', () => { + it('is rendered when `canUpdate` provided as `true`', () => { + expect(findEditBtn().exists()).toBe(true); + }); + + it('is NOT rendered when `canUpdate` provided as `false`', () => { + canUpdate = false; + createComponent(); + expect(findEditBtn().exists()).toBe(false); + }); + }); }); describe('Update severity', () => { @@ -100,7 +117,7 @@ describe('SidebarSeverity', () => { ); findCriticalSeverityDropdownItem().vm.$emit('click'); - await wrapper.vm.$nextTick(); + await nextTick(); expect(findLoadingIcon().exists()).toBe(true); resolvePromise(); @@ -128,27 +145,29 @@ describe('SidebarSeverity', () => { it('should expand the dropdown on collapsed icon click', async () => { wrapper.vm.isDropdownShowing = false; - await wrapper.vm.$nextTick(); + await nextTick(); expect(findDropdown().classes(HIDDDEN_CLASS)).toBe(true); findCollapsedSeverity().trigger('click'); - await wrapper.vm.$nextTick(); + await nextTick(); expect(findDropdown().classes(SHOWN_CLASS)).toBe(true); }); }); describe('expanded', () => { it('toggles dropdown with edit button', async () => { + canUpdate = true; + createComponent(); wrapper.vm.isDropdownShowing = false; - await wrapper.vm.$nextTick(); + await nextTick(); expect(findDropdown().classes(HIDDDEN_CLASS)).toBe(true); findEditBtn().vm.$emit('click'); - await wrapper.vm.$nextTick(); + await nextTick(); expect(findDropdown().classes(SHOWN_CLASS)).toBe(true); findEditBtn().vm.$emit('click'); - await wrapper.vm.$nextTick(); + await nextTick(); expect(findDropdown().classes(HIDDDEN_CLASS)).toBe(true); }); }); diff --git a/spec/lib/gitlab/git/repository_spec.rb b/spec/lib/gitlab/git/repository_spec.rb index 706bcdea291..9b3d8c8ef3a 100644 --- a/spec/lib/gitlab/git/repository_spec.rb +++ b/spec/lib/gitlab/git/repository_spec.rb @@ -2001,47 +2001,6 @@ RSpec.describe Gitlab::Git::Repository, :seed_helper do end end - describe 'remotes' do - let(:repository) { mutable_repository } - let(:remote_name) { 'my-remote' } - let(:url) { 'http://my-repo.git' } - - after do - ensure_seeds - end - - describe '#add_remote' do - let(:mirror_refmap) { '+refs/*:refs/*' } - - it 'added the remote' do - begin - repository_rugged.remotes.delete(remote_name) - rescue Rugged::ConfigError - end - - repository.add_remote(remote_name, url, mirror_refmap: mirror_refmap) - - expect(repository_rugged.remotes[remote_name]).not_to be_nil - expect(repository_rugged.config["remote.#{remote_name}.mirror"]).to eq('true') - expect(repository_rugged.config["remote.#{remote_name}.prune"]).to eq('true') - expect(repository_rugged.config["remote.#{remote_name}.fetch"]).to eq(mirror_refmap) - end - end - - describe '#remove_remote' do - it 'removes the remote' do - repository_rugged.remotes.create(remote_name, url) - - expect(repository.remove_remote(remote_name)).to be true - - # Since we deleted the remote via Gitaly, Rugged doesn't know - # this changed underneath it. Let's refresh the Rugged repo. - repository_rugged = Rugged::Repository.new(repository_path) - expect(repository_rugged.remotes[remote_name]).to be_nil - end - end - end - describe '#bundle_to_disk' do let(:save_path) { File.join(Dir.tmpdir, "repo-#{SecureRandom.hex}.bundle") } diff --git a/spec/lib/gitlab/gitaly_client/remote_service_spec.rb b/spec/lib/gitlab/gitaly_client/remote_service_spec.rb index 2ec5f70be76..cdbd48e106a 100644 --- a/spec/lib/gitlab/gitaly_client/remote_service_spec.rb +++ b/spec/lib/gitlab/gitaly_client/remote_service_spec.rb @@ -9,31 +9,6 @@ RSpec.describe Gitlab::GitalyClient::RemoteService do let(:remote_name) { 'my-remote' } let(:client) { described_class.new(project.repository) } - describe '#add_remote' do - let(:url) { 'http://my-repo.git' } - let(:mirror_refmap) { :all_refs } - - it 'sends an add_remote message' do - expect_any_instance_of(Gitaly::RemoteService::Stub) - .to receive(:add_remote) - .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash)) - .and_return(double(:add_remote_response)) - - client.add_remote(remote_name, url, mirror_refmap) - end - end - - describe '#remove_remote' do - it 'sends an remove_remote message and returns the result value' do - expect_any_instance_of(Gitaly::RemoteService::Stub) - .to receive(:remove_remote) - .with(gitaly_request_with_path(storage_name, relative_path), kind_of(Hash)) - .and_return(double(result: true)) - - expect(client.remove_remote(remote_name)).to be(true) - end - end - describe '#find_remote_root_ref' do let(:remote) { 'origin' } let(:url) { 'http://git.example.com/my-repo.git' } diff --git a/spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb b/spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb index 133d515246a..3fa2ca1f57c 100644 --- a/spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb +++ b/spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb @@ -148,7 +148,7 @@ RSpec.describe Gitlab::GithubImport::Importer::PullRequestsImporter do end end - shared_examples '#update_repository' do + describe '#update_repository' do it 'updates the repository' do importer = described_class.new(project, client) @@ -162,34 +162,16 @@ RSpec.describe Gitlab::GithubImport::Importer::PullRequestsImporter do .to receive(:increment) .and_call_original - freeze_time do - importer.update_repository - - expect(project.last_repository_updated_at).to be_like_time(Time.zone.now) - end - end - end - - describe '#update_repository with :fetch_remote_params enabled' do - before do - stub_feature_flags(fetch_remote_params: true) expect(project.repository) .to receive(:fetch_remote) .with('github', forced: false, url: url, refmap: Gitlab::GithubImport.refmap) - end - it_behaves_like '#update_repository' - end + freeze_time do + importer.update_repository - describe '#update_repository with :fetch_remote_params disabled' do - before do - stub_feature_flags(fetch_remote_params: false) - expect(project.repository) - .to receive(:fetch_remote) - .with('github', forced: false) + expect(project.last_repository_updated_at).to be_like_time(Time.zone.now) + end end - - it_behaves_like '#update_repository' end describe '#update_repository?' do diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb index 70a396b3a14..ec99e094a03 100644 --- a/spec/models/project_spec.rb +++ b/spec/models/project_spec.rb @@ -2914,10 +2914,6 @@ RSpec.describe Project, factory_default: :keep do subject { project.has_remote_mirror? } - before do - allow_any_instance_of(RemoteMirror).to receive(:refresh_remote) - end - it 'returns true when a remote mirror is enabled' do is_expected.to be_truthy end @@ -2934,10 +2930,6 @@ RSpec.describe Project, factory_default: :keep do delegate :update_remote_mirrors, to: :project - before do - allow_any_instance_of(RemoteMirror).to receive(:refresh_remote) - end - it 'syncs enabled remote mirror' do expect_any_instance_of(RemoteMirror).to receive(:sync) diff --git a/spec/models/remote_mirror_spec.rb b/spec/models/remote_mirror_spec.rb index a64b01967ef..058cc2c5925 100644 --- a/spec/models/remote_mirror_spec.rb +++ b/spec/models/remote_mirror_spec.rb @@ -93,22 +93,14 @@ RSpec.describe RemoteMirror, :mailer do expect(mirror.credentials).to eq({ user: 'foo', password: 'bar' }) end - it 'updates the remote config if credentials changed' do + it 'does not update the repository config if credentials changed' do mirror = create_mirror(url: 'http://foo:bar@test.com') repo = mirror.project.repository + old_config = rugged_repo(repo).config mirror.update_attribute(:url, 'http://foo:baz@test.com') - config = rugged_repo(repo).config - expect(config["remote.#{mirror.remote_name}.url"]).to eq('http://foo:baz@test.com') - end - - it 'removes previous remote' do - mirror = create_mirror(url: 'http://foo:bar@test.com') - - expect(RepositoryRemoveRemoteWorker).to receive(:perform_async).with(mirror.project.id, mirror.remote_name).and_call_original - - mirror.update(url: 'http://test.com') + expect(rugged_repo(repo).config.to_hash).to eq(old_config.to_hash) end end end @@ -157,34 +149,20 @@ RSpec.describe RemoteMirror, :mailer do end describe '#update_repository' do - shared_examples 'an update' do - it 'performs update including options' do - git_remote_mirror = stub_const('Gitlab::Git::RemoteMirror', spy) - mirror = build(:remote_mirror) - - expect(mirror).to receive(:options_for_update).and_return(keep_divergent_refs: true) - mirror.update_repository(inmemory_remote: inmemory) - - expect(git_remote_mirror).to have_received(:new).with( - mirror.project.repository.raw, - mirror.remote_name, - inmemory ? mirror.url : nil, - keep_divergent_refs: true - ) - expect(git_remote_mirror).to have_received(:update) - end - end + it 'performs update including options' do + git_remote_mirror = stub_const('Gitlab::Git::RemoteMirror', spy) + mirror = build(:remote_mirror) - context 'with inmemory remote' do - let(:inmemory) { true } + expect(mirror).to receive(:options_for_update).and_return(keep_divergent_refs: true) + mirror.update_repository - it_behaves_like 'an update' - end - - context 'with on-disk remote' do - let(:inmemory) { false } - - it_behaves_like 'an update' + expect(git_remote_mirror).to have_received(:new).with( + mirror.project.repository.raw, + mirror.remote_name, + mirror.url, + keep_divergent_refs: true + ) + expect(git_remote_mirror).to have_received(:update) end end @@ -303,10 +281,10 @@ RSpec.describe RemoteMirror, :mailer do end context 'when remote mirror gets destroyed' do - it 'removes remote' do + it 'does not remove the remote' do mirror = create_mirror(url: 'http://foo:bar@test.com') - expect(RepositoryRemoveRemoteWorker).to receive(:perform_async).with(mirror.project.id, mirror.remote_name).and_call_original + expect(RepositoryRemoveRemoteWorker).not_to receive(:perform_async) mirror.destroy! end @@ -402,30 +380,6 @@ RSpec.describe RemoteMirror, :mailer do end end - describe '#ensure_remote!' do - let(:remote_mirror) { create(:project, :repository, :remote_mirror).remote_mirrors.first } - let(:project) { remote_mirror.project } - let(:repository) { project.repository } - - it 'adds a remote multiple times with no errors' do - expect(repository).to receive(:add_remote).with(remote_mirror.remote_name, remote_mirror.url).twice.and_call_original - - 2.times do - remote_mirror.ensure_remote! - end - end - - context 'SSH public-key authentication' do - it 'omits the password from the URL' do - remote_mirror.update!(auth_method: 'ssh_public_key', url: 'ssh://git:pass@example.com') - - expect(repository).to receive(:add_remote).with(remote_mirror.remote_name, 'ssh://git@example.com') - - remote_mirror.ensure_remote! - end - end - end - describe '#url=' do let(:remote_mirror) { create(:project, :repository, :remote_mirror).remote_mirrors.first } diff --git a/spec/models/repository_spec.rb b/spec/models/repository_spec.rb index 452eafe733f..7e68886a0cb 100644 --- a/spec/models/repository_spec.rb +++ b/spec/models/repository_spec.rb @@ -1094,99 +1094,17 @@ RSpec.describe Repository do end end - describe '#async_remove_remote' do - before do - masterrev = repository.find_branch('master').dereferenced_target - create_remote_branch('joe', 'remote_branch', masterrev) - end - - context 'when worker is scheduled successfully' do - before do - masterrev = repository.find_branch('master').dereferenced_target - create_remote_branch('remote_name', 'remote_branch', masterrev) - - allow(RepositoryRemoveRemoteWorker).to receive(:perform_async).and_return('1234') - end - - it 'returns job_id' do - expect(repository.async_remove_remote('joe')).to eq('1234') - end - end - - context 'when worker does not schedule successfully' do - before do - allow(RepositoryRemoveRemoteWorker).to receive(:perform_async).and_return(nil) - end - - it 'returns nil' do - expect(Gitlab::AppLogger).to receive(:info).with("Remove remote job failed to create for #{project.id} with remote name joe.") - - expect(repository.async_remove_remote('joe')).to be_nil - end - end - end - describe '#fetch_as_mirror' do let(:url) { "http://example.com" } + let(:remote_name) { "remote-name" } - context 'when :fetch_remote_params is enabled' do - let(:remote_name) { "remote-name" } - - before do - stub_feature_flags(fetch_remote_params: true) - end - - it 'fetches the URL without creating a remote' do - expect(repository).not_to receive(:add_remote) - expect(repository) - .to receive(:fetch_remote) - .with(remote_name, url: url, forced: false, prune: true, refmap: :all_refs) - .and_return(nil) - - repository.fetch_as_mirror(url, remote_name: remote_name) - end - end - - context 'when :fetch_remote_params is disabled' do - before do - stub_feature_flags(fetch_remote_params: false) - end - - shared_examples 'a fetch' do - it 'adds and fetches a remote' do - expect(repository) - .to receive(:add_remote) - .with(expected_remote, url, mirror_refmap: :all_refs) - .and_return(nil) - expect(repository) - .to receive(:fetch_remote) - .with(expected_remote, forced: false, prune: true) - .and_return(nil) - - repository.fetch_as_mirror(url, remote_name: remote_name) - end - end - - context 'with temporary remote' do - let(:remote_name) { nil } - let(:expected_remote_suffix) { "123456" } - let(:expected_remote) { "tmp-#{expected_remote_suffix}" } - - before do - expect(repository) - .to receive(:async_remove_remote).with(expected_remote).and_return(nil) - allow(SecureRandom).to receive(:hex).and_return(expected_remote_suffix) - end - - it_behaves_like 'a fetch' - end - - context 'with remote name' do - let(:remote_name) { "foo" } - let(:expected_remote) { "foo" } + it 'fetches the URL without creating a remote' do + expect(repository) + .to receive(:fetch_remote) + .with(remote_name, url: url, forced: false, prune: true, refmap: :all_refs) + .and_return(nil) - it_behaves_like 'a fetch' - end + repository.fetch_as_mirror(url, remote_name: remote_name) end end diff --git a/spec/services/notification_service_spec.rb b/spec/services/notification_service_spec.rb index ac82e4c025f..4e2a056a641 100644 --- a/spec/services/notification_service_spec.rb +++ b/spec/services/notification_service_spec.rb @@ -3368,10 +3368,6 @@ RSpec.describe NotificationService, :mailer do project.add_maintainer(u_maintainer2) project.add_developer(u_developer) - # Mock remote update - allow(project.repository).to receive(:async_remove_remote) - allow(project.repository).to receive(:add_remote) - reset_delivered_emails! end diff --git a/spec/services/projects/update_remote_mirror_service_spec.rb b/spec/services/projects/update_remote_mirror_service_spec.rb index feb70ddaa46..686b204c726 100644 --- a/spec/services/projects/update_remote_mirror_service_spec.rb +++ b/spec/services/projects/update_remote_mirror_service_spec.rb @@ -13,38 +13,17 @@ RSpec.describe Projects::UpdateRemoteMirrorService do describe '#execute' do let(:retries) { 0 } - let(:inmemory) { true } subject(:execute!) { service.execute(remote_mirror, retries) } before do - stub_feature_flags(update_remote_mirror_inmemory: inmemory) project.repository.add_branch(project.owner, 'existing-branch', 'master') allow(remote_mirror) .to receive(:update_repository) - .with(inmemory_remote: inmemory) .and_return(double(divergent_refs: [])) end - context 'with in-memory remote disabled' do - let(:inmemory) { false } - - it 'ensures the remote exists' do - expect(remote_mirror).to receive(:ensure_remote!) - - execute! - end - end - - context 'with in-memory remote enabled' do - it 'does not ensure the remote exists' do - expect(remote_mirror).not_to receive(:ensure_remote!) - - execute! - end - end - it 'does not fetch the remote repository' do # See https://gitlab.com/gitlab-org/gitaly/-/issues/2670 expect(project.repository).not_to receive(:fetch_remote) diff --git a/spec/workers/repository_remove_remote_worker_spec.rb b/spec/workers/repository_remove_remote_worker_spec.rb index 758f7f75e03..11081ec9b37 100644 --- a/spec/workers/repository_remove_remote_worker_spec.rb +++ b/spec/workers/repository_remove_remote_worker_spec.rb @@ -24,37 +24,25 @@ RSpec.describe RepositoryRemoveRemoteWorker do .and_return(project) end - it 'does not remove remote when cannot obtain lease' do + it 'does nothing when cannot obtain lease' do stub_exclusive_lease_taken(lease_key, timeout: lease_timeout) expect(project.repository) .not_to receive(:remove_remote) - expect(subject) - .to receive(:log_error) - .with("Cannot obtain an exclusive lease for #{lease_key}. There must be another instance already in execution.") + .not_to receive(:log_error) subject.perform(project.id, remote_name) end - it 'removes remote from repository when obtain a lease' do + it 'does nothing when obtain a lease' do stub_exclusive_lease(lease_key, timeout: lease_timeout) - masterrev = project.repository.find_branch('master').dereferenced_target - create_remote_branch(remote_name, 'remote_branch', masterrev) expect(project.repository) - .to receive(:remove_remote) - .with(remote_name) - .and_call_original + .not_to receive(:remove_remote) subject.perform(project.id, remote_name) end end end - - def create_remote_branch(remote_name, branch_name, target) - rugged = rugged_repo(project.repository) - - rugged.references.create("refs/remotes/#{remote_name}/#{branch_name}", target.id) - end end |