Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/spec/lib
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2020-03-17 15:09:52 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2020-03-17 15:09:52 +0300
commit8ae26d705abe341b03bc15d4373d6cd0c77c0baf (patch)
tree655ee03a968e340c975b8ab7d77cfd5ceaf3c969 /spec/lib
parentfc1df8c8307fc5022f9e8aae04164c089d8fdf2e (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec/lib')
-rw-r--r--spec/lib/gitlab/checks/project_created_spec.rb29
-rw-r--r--spec/lib/gitlab/checks/project_moved_spec.rb103
-rw-r--r--spec/lib/gitlab/repo_path_spec.rb39
3 files changed, 117 insertions, 54 deletions
diff --git a/spec/lib/gitlab/checks/project_created_spec.rb b/spec/lib/gitlab/checks/project_created_spec.rb
index 373fef2a240..bbc97155374 100644
--- a/spec/lib/gitlab/checks/project_created_spec.rb
+++ b/spec/lib/gitlab/checks/project_created_spec.rb
@@ -3,24 +3,29 @@
require 'spec_helper'
describe Gitlab::Checks::ProjectCreated, :clean_gitlab_redis_shared_state do
- let(:user) { create(:user) }
- let(:project) { create(:project) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project, :repository, namespace: user.namespace) }
+ let(:protocol) { 'http' }
+ let(:git_user) { user }
+ let(:repository) { project.repository }
+
+ subject { described_class.new(repository, git_user, 'http') }
describe '.fetch_message' do
context 'with a project created message queue' do
- let(:project_created) { described_class.new(project, user, 'http') }
-
before do
- project_created.add_message
+ subject.add_message
end
it 'returns project created message' do
- expect(described_class.fetch_message(user.id, project.id)).to eq(project_created.message)
+ expect(described_class.fetch_message(user.id, project.id)).to eq(subject.message)
end
it 'deletes the project created message from redis' do
expect(Gitlab::Redis::SharedState.with { |redis| redis.get("project_created:#{user.id}:#{project.id}") }).not_to be_nil
+
described_class.fetch_message(user.id, project.id)
+
expect(Gitlab::Redis::SharedState.with { |redis| redis.get("project_created:#{user.id}:#{project.id}") }).to be_nil
end
end
@@ -34,15 +39,15 @@ describe Gitlab::Checks::ProjectCreated, :clean_gitlab_redis_shared_state do
describe '#add_message' do
it 'queues a project created message' do
- project_created = described_class.new(project, user, 'http')
-
- expect(project_created.add_message).to eq('OK')
+ expect(subject.add_message).to eq('OK')
end
- it 'handles anonymous push' do
- project_created = described_class.new(nil, user, 'http')
+ context 'when user is nil' do
+ let(:git_user) { nil }
- expect(project_created.add_message).to be_nil
+ it 'handles anonymous push' do
+ expect(subject.add_message).to be_nil
+ end
end
end
end
diff --git a/spec/lib/gitlab/checks/project_moved_spec.rb b/spec/lib/gitlab/checks/project_moved_spec.rb
index 3de397760b4..1d1d6211088 100644
--- a/spec/lib/gitlab/checks/project_moved_spec.rb
+++ b/spec/lib/gitlab/checks/project_moved_spec.rb
@@ -3,24 +3,30 @@
require 'spec_helper'
describe Gitlab::Checks::ProjectMoved, :clean_gitlab_redis_shared_state do
- let(:user) { create(:user) }
- let(:project) { create(:project) }
+ let_it_be(:user) { create(:user) }
+ let_it_be(:project) { create(:project, :repository, :wiki_repo, namespace: user.namespace) }
+ let(:repository) { project.repository }
+ let(:protocol) { 'http' }
+ let(:git_user) { user }
+ let(:redirect_path) { 'foo/bar' }
+
+ subject { described_class.new(repository, git_user, protocol, redirect_path) }
describe '.fetch_message' do
context 'with a redirect message queue' do
- it 'returns the redirect message' do
- project_moved = described_class.new(project, user, 'http', 'foo/bar')
- project_moved.add_message
+ before do
+ subject.add_message
+ end
- expect(described_class.fetch_message(user.id, project.id)).to eq(project_moved.message)
+ it 'returns the redirect message' do
+ expect(described_class.fetch_message(user.id, project.id)).to eq(subject.message)
end
it 'deletes the redirect message from redis' do
- project_moved = described_class.new(project, user, 'http', 'foo/bar')
- project_moved.add_message
-
expect(Gitlab::Redis::SharedState.with { |redis| redis.get("redirect_namespace:#{user.id}:#{project.id}") }).not_to be_nil
+
described_class.fetch_message(user.id, project.id)
+
expect(Gitlab::Redis::SharedState.with { |redis| redis.get("redirect_namespace:#{user.id}:#{project.id}") }).to be_nil
end
end
@@ -34,29 +40,82 @@ describe Gitlab::Checks::ProjectMoved, :clean_gitlab_redis_shared_state do
describe '#add_message' do
it 'queues a redirect message' do
- project_moved = described_class.new(project, user, 'http', 'foo/bar')
- expect(project_moved.add_message).to eq("OK")
+ expect(subject.add_message).to eq("OK")
end
- it 'handles anonymous clones' do
- project_moved = described_class.new(project, nil, 'http', 'foo/bar')
+ context 'when user is nil' do
+ let(:git_user) { nil }
- expect(project_moved.add_message).to eq(nil)
+ it 'handles anonymous clones' do
+ expect(subject.add_message).to be_nil
+ end
end
end
describe '#message' do
- it 'returns a redirect message' do
- project_moved = described_class.new(project, user, 'http', 'foo/bar')
- message = <<~MSG
- Project 'foo/bar' was moved to '#{project.full_path}'.
+ shared_examples 'errors per protocol' do
+ shared_examples 'returns redirect message' do
+ it do
+ message = <<~MSG
+ Project '#{redirect_path}' was moved to '#{project.full_path}'.
+
+ Please update your Git remote:
+
+ git remote set-url origin #{url_to_repo}
+ MSG
+
+ expect(subject.message).to eq(message)
+ end
+ end
+
+ context 'when protocol is http' do
+ it_behaves_like 'returns redirect message' do
+ let(:url_to_repo) { http_url_to_repo }
+ end
+ end
+
+ context 'when protocol is ssh' do
+ let(:protocol) { 'ssh' }
- Please update your Git remote:
+ it_behaves_like 'returns redirect message' do
+ let(:url_to_repo) { ssh_url_to_repo }
+ end
+ end
+ end
+
+ context 'with project' do
+ it_behaves_like 'errors per protocol' do
+ let(:http_url_to_repo) { project.http_url_to_repo }
+ let(:ssh_url_to_repo) { project.ssh_url_to_repo }
+ end
+ end
+
+ context 'with wiki' do
+ let(:repository) { project.wiki.repository }
- git remote set-url origin #{project.http_url_to_repo}
- MSG
+ it_behaves_like 'errors per protocol' do
+ let(:http_url_to_repo) { project.wiki.http_url_to_repo }
+ let(:ssh_url_to_repo) { project.wiki.ssh_url_to_repo }
+ end
+ end
- expect(project_moved.message).to eq(message)
+ context 'with project snippet' do
+ let_it_be(:snippet) { create(:project_snippet, :repository, project: project, author: user) }
+ let(:repository) { snippet.repository }
+
+ it_behaves_like 'errors per protocol' do
+ let(:http_url_to_repo) { snippet.http_url_to_repo }
+ let(:ssh_url_to_repo) { snippet.ssh_url_to_repo }
+ end
+ end
+
+ context 'with personal snippet' do
+ let_it_be(:snippet) { create(:personal_snippet, :repository, author: user) }
+ let(:repository) { snippet.repository }
+
+ it 'returns nil' do
+ expect(subject.add_message).to be_nil
+ end
end
end
end
diff --git a/spec/lib/gitlab/repo_path_spec.rb b/spec/lib/gitlab/repo_path_spec.rb
index e72bdc01940..68571b9de20 100644
--- a/spec/lib/gitlab/repo_path_spec.rb
+++ b/spec/lib/gitlab/repo_path_spec.rb
@@ -8,7 +8,8 @@ describe ::Gitlab::RepoPath do
let_it_be(:project) { create(:project, :repository) }
let_it_be(:personal_snippet) { create(:personal_snippet) }
let_it_be(:project_snippet) { create(:project_snippet, project: project) }
- let_it_be(:redirect) { project.route.create_redirect('foo/bar/baz') }
+ let_it_be(:redirect_route) { 'foo/bar/baz' }
+ let_it_be(:redirect) { project.route.create_redirect(redirect_route) }
describe '.parse' do
context 'a repository storage path' do
@@ -43,22 +44,20 @@ describe ::Gitlab::RepoPath do
end
context 'of a redirected project' do
- let(:redirect) { project.route.create_redirect('foo/bar') }
-
it 'parses a relative repository path' do
- expect(described_class.parse(redirect.path + '.git')).to eq([project, project, Gitlab::GlRepository::PROJECT, 'foo/bar'])
+ expect(described_class.parse(redirect.path + '.git')).to eq([project, project, Gitlab::GlRepository::PROJECT, redirect_route])
end
it 'parses a relative wiki path' do
- expect(described_class.parse(redirect.path + '.wiki.git')).to eq([project, project, Gitlab::GlRepository::WIKI, 'foo/bar.wiki'])
+ expect(described_class.parse(redirect.path + '.wiki.git')).to eq([project, project, Gitlab::GlRepository::WIKI, redirect_route])
end
it 'parses a relative path starting with /' do
- expect(described_class.parse('/' + redirect.path + '.git')).to eq([project, project, Gitlab::GlRepository::PROJECT, 'foo/bar'])
+ expect(described_class.parse('/' + redirect.path + '.git')).to eq([project, project, Gitlab::GlRepository::PROJECT, redirect_route])
end
it 'parses a redirected project snippet repository path' do
- expect(described_class.parse(redirect.path + "/snippets/#{project_snippet.id}.git")).to eq([project_snippet, project, Gitlab::GlRepository::SNIPPET, "foo/bar/snippets/#{project_snippet.id}"])
+ expect(described_class.parse(redirect.path + "/snippets/#{project_snippet.id}.git")).to eq([project_snippet, project, Gitlab::GlRepository::SNIPPET, redirect_route])
end
end
end
@@ -71,8 +70,8 @@ describe ::Gitlab::RepoPath do
describe '.find_project' do
context 'when finding a project by its canonical path' do
context 'when the cases match' do
- it 'returns the project and false' do
- expect(described_class.find_project(project.full_path)).to eq([project, false])
+ it 'returns the project and nil' do
+ expect(described_class.find_project(project.full_path)).to eq([project, nil])
end
end
@@ -81,45 +80,45 @@ describe ::Gitlab::RepoPath do
# easy and safe to redirect someone to the correctly-cased URL. For git
# requests, we should accept wrongly-cased URLs because it is a pain to
# block people's git operations and force them to update remote URLs.
- it 'returns the project and false' do
- expect(described_class.find_project(project.full_path.upcase)).to eq([project, false])
+ it 'returns the project and nil' do
+ expect(described_class.find_project(project.full_path.upcase)).to eq([project, nil])
end
end
end
context 'when finding a project via a redirect' do
- it 'returns the project and true' do
- expect(described_class.find_project(redirect.path)).to eq([project, true])
+ it 'returns the project and nil' do
+ expect(described_class.find_project(redirect.path)).to eq([project, redirect.path])
end
end
end
describe '.find_snippet' do
it 'extracts path and id from personal snippet route' do
- expect(described_class.find_snippet("snippets/#{personal_snippet.id}")).to eq([personal_snippet, false])
+ expect(described_class.find_snippet("snippets/#{personal_snippet.id}")).to eq([personal_snippet, nil])
end
it 'extracts path and id from project snippet route' do
- expect(described_class.find_snippet("#{project.full_path}/snippets/#{project_snippet.id}")).to eq([project_snippet, false])
+ expect(described_class.find_snippet("#{project.full_path}/snippets/#{project_snippet.id}")).to eq([project_snippet, nil])
end
it 'returns nil for invalid snippet paths' do
aggregate_failures do
- expect(described_class.find_snippet("snippets/#{project_snippet.id}")).to eq([nil, false])
- expect(described_class.find_snippet("#{project.full_path}/snippets/#{personal_snippet.id}")).to eq([nil, false])
- expect(described_class.find_snippet('')).to eq([nil, false])
+ expect(described_class.find_snippet("snippets/#{project_snippet.id}")).to eq([nil, nil])
+ expect(described_class.find_snippet("#{project.full_path}/snippets/#{personal_snippet.id}")).to eq([nil, nil])
+ expect(described_class.find_snippet('')).to eq([nil, nil])
end
end
it 'returns nil for snippets not associated with the project' do
snippet = create(:project_snippet)
- expect(described_class.find_snippet("#{project.full_path}/snippets/#{snippet.id}")).to eq([nil, false])
+ expect(described_class.find_snippet("#{project.full_path}/snippets/#{snippet.id}")).to eq([nil, nil])
end
context 'when finding a project snippet via a redirect' do
it 'returns the project and true' do
- expect(described_class.find_snippet("#{redirect.path}/snippets/#{project_snippet.id}")).to eq([project_snippet, true])
+ expect(described_class.find_snippet("#{redirect.path}/snippets/#{project_snippet.id}")).to eq([project_snippet, redirect.path])
end
end
end