58 lines
1.8 KiB
Ruby
58 lines
1.8 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require 'spec_helper'
|
|
|
|
describe Gitlab::RepositoryUrlBuilder do
|
|
describe '.build' do
|
|
using RSpec::Parameterized::TableSyntax
|
|
|
|
where(:factory, :path_generator) do
|
|
:project | ->(project) { project.full_path }
|
|
:project_snippet | ->(snippet) { "#{snippet.project.full_path}/snippets/#{snippet.id}" }
|
|
:project_wiki | ->(wiki) { "#{wiki.container.full_path}.wiki" }
|
|
:group_wiki | ->(wiki) { "#{wiki.container.full_path}.wiki" }
|
|
|
|
:personal_snippet | ->(snippet) { "snippets/#{snippet.id}" }
|
|
end
|
|
|
|
with_them do
|
|
let(:container) { build_stubbed(factory) }
|
|
let(:repository) { container.repository }
|
|
let(:path) { path_generator.call(container) }
|
|
let(:url) { subject.build(repository.full_path, protocol: protocol) }
|
|
|
|
context 'when passing SSH protocol' do
|
|
let(:protocol) { :ssh }
|
|
|
|
it 'returns the SSH URL to the repository' do
|
|
expect(url).to eq("#{Gitlab.config.gitlab_shell.ssh_path_prefix}#{path}.git")
|
|
end
|
|
end
|
|
|
|
context 'when passing HTTP protocol' do
|
|
let(:protocol) { :http }
|
|
|
|
it 'returns the HTTP URL to the repo without a username' do
|
|
expect(url).to eq("#{Gitlab.config.gitlab.url}/#{path}.git")
|
|
expect(url).not_to include('@')
|
|
end
|
|
|
|
it 'includes the custom HTTP clone root if set' do
|
|
clone_root = 'https://git.example.com:51234/mygitlab'
|
|
stub_application_setting(custom_http_clone_url_root: clone_root)
|
|
|
|
expect(url).to eq("#{clone_root}/#{path}.git")
|
|
end
|
|
end
|
|
|
|
context 'when passing an unsupported protocol' do
|
|
let(:protocol) { :ftp }
|
|
|
|
it 'raises an exception' do
|
|
expect { url }.to raise_error(NotImplementedError)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|