summaryrefslogtreecommitdiff
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2021-07-26 09:09:00 +0000
committerGitLab Bot <gitlab-bot@gitlab.com>2021-07-26 09:09:00 +0000
commitec3483bd1831dfca0c7baec0f8aad9079d28907d (patch)
tree67b6f8eed91c44ab4054191d2a2fbf9d18cc695e /spec
parentd10e03ba6f8d5d425e53931d306a099404a5958b (diff)
downloadgitlab-ce-ec3483bd1831dfca0c7baec0f8aad9079d28907d.tar.gz
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/factories_spec.rb1
-rw-r--r--spec/frontend/sidebar/components/severity/sidebar_severity_spec.js57
-rw-r--r--spec/lib/gitlab/git/repository_spec.rb41
-rw-r--r--spec/lib/gitlab/gitaly_client/remote_service_spec.rb25
-rw-r--r--spec/lib/gitlab/github_import/importer/pull_requests_importer_spec.rb28
-rw-r--r--spec/models/project_spec.rb8
-rw-r--r--spec/models/remote_mirror_spec.rb80
-rw-r--r--spec/models/repository_spec.rb96
-rw-r--r--spec/services/notification_service_spec.rb4
-rw-r--r--spec/services/projects/update_remote_mirror_service_spec.rb21
-rw-r--r--spec/workers/repository_remove_remote_worker_spec.rb20
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