Backport changes from gitlab-org/gitlab-ee!372
Mostly replaces several Spinach tests with RSpec Feature tests.
This commit is contained in:
parent
fad7b392dc
commit
f18ec70743
|
@ -209,7 +209,8 @@ module ProjectsHelper
|
|||
end
|
||||
|
||||
def default_url_to_repo(project = @project)
|
||||
if default_clone_protocol == "ssh"
|
||||
case default_clone_protocol
|
||||
when 'ssh'
|
||||
project.ssh_url_to_repo
|
||||
else
|
||||
project.http_url_to_repo
|
||||
|
|
|
@ -7,20 +7,8 @@ Feature: Project Create
|
|||
@javascript
|
||||
Scenario: User create a project
|
||||
Given I sign in as a user
|
||||
When I visit new project page
|
||||
And I have an ssh key
|
||||
When I visit new project page
|
||||
And fill project form with valid data
|
||||
Then I should see project page
|
||||
And I should see empty project instuctions
|
||||
|
||||
@javascript
|
||||
Scenario: Empty project instructions
|
||||
Given I sign in as a user
|
||||
And I have an ssh key
|
||||
When I visit new project page
|
||||
And fill project form with valid data
|
||||
Then I see empty project instuctions
|
||||
And I click on HTTP
|
||||
Then Remote url should update to http link
|
||||
And If I click on SSH
|
||||
Then Remote url should update to ssh link
|
||||
And I should see empty project instructions
|
||||
|
|
|
@ -13,33 +13,9 @@ class Spinach::Features::ProjectCreate < Spinach::FeatureSteps
|
|||
expect(current_path).to eq namespace_project_path(Project.last.namespace, Project.last)
|
||||
end
|
||||
|
||||
step 'I should see empty project instuctions' do
|
||||
step 'I should see empty project instructions' do
|
||||
expect(page).to have_content "git init"
|
||||
expect(page).to have_content "git remote"
|
||||
expect(page).to have_content Project.last.url_to_repo
|
||||
end
|
||||
|
||||
step 'I see empty project instuctions' do
|
||||
expect(page).to have_content "git init"
|
||||
expect(page).to have_content "git remote"
|
||||
expect(page).to have_content Project.last.url_to_repo
|
||||
end
|
||||
|
||||
step 'I click on HTTP' do
|
||||
find('#clone-dropdown').click
|
||||
find('.http-selector').click
|
||||
end
|
||||
|
||||
step 'Remote url should update to http link' do
|
||||
expect(page).to have_content "git remote add origin #{Project.last.http_url_to_repo}"
|
||||
end
|
||||
|
||||
step 'If I click on SSH' do
|
||||
find('#clone-dropdown').click
|
||||
find('.ssh-selector').click
|
||||
end
|
||||
|
||||
step 'Remote url should update to ssh link' do
|
||||
expect(page).to have_content "git remote add origin #{Project.last.url_to_repo}"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -61,6 +61,12 @@ FactoryGirl.define do
|
|||
trait :private do
|
||||
visibility_level Gitlab::VisibilityLevel::PRIVATE
|
||||
end
|
||||
|
||||
trait :empty_repo do
|
||||
after(:create) do |project|
|
||||
project.create_repository
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# Project with empty repository
|
||||
|
@ -68,9 +74,7 @@ FactoryGirl.define do
|
|||
# This is a case when you just created a project
|
||||
# but not pushed any code there yet
|
||||
factory :project_empty_repo, parent: :empty_project do
|
||||
after :create do |project|
|
||||
project.create_repository
|
||||
end
|
||||
empty_repo
|
||||
end
|
||||
|
||||
# Project with test repository
|
||||
|
|
|
@ -0,0 +1,63 @@
|
|||
require 'rails_helper'
|
||||
|
||||
feature 'Developer views empty project instructions', feature: true do
|
||||
let(:project) { create(:empty_project, :empty_repo) }
|
||||
let(:developer) { create(:user) }
|
||||
|
||||
background do
|
||||
project.team << [developer, :developer]
|
||||
|
||||
login_as(developer)
|
||||
end
|
||||
|
||||
context 'without an SSH key' do
|
||||
scenario 'defaults to HTTP' do
|
||||
visit_project
|
||||
|
||||
expect_instructions_for('http')
|
||||
end
|
||||
|
||||
scenario 'switches to SSH', js: true do
|
||||
visit_project
|
||||
|
||||
select_protocol('SSH')
|
||||
|
||||
expect_instructions_for('ssh')
|
||||
end
|
||||
end
|
||||
|
||||
context 'with an SSH key' do
|
||||
background do
|
||||
create(:personal_key, user: developer)
|
||||
end
|
||||
|
||||
scenario 'defaults to SSH' do
|
||||
visit_project
|
||||
|
||||
expect_instructions_for('ssh')
|
||||
end
|
||||
|
||||
scenario 'switches to HTTP', js: true do
|
||||
visit_project
|
||||
|
||||
select_protocol('HTTP')
|
||||
|
||||
expect_instructions_for('http')
|
||||
end
|
||||
end
|
||||
|
||||
def visit_project
|
||||
visit namespace_project_path(project.namespace, project)
|
||||
end
|
||||
|
||||
def select_protocol(protocol)
|
||||
find('#clone-dropdown').click
|
||||
find(".#{protocol.downcase}-selector").click
|
||||
end
|
||||
|
||||
def expect_instructions_for(protocol)
|
||||
msg = :"#{protocol.downcase}_url_to_repo"
|
||||
|
||||
expect(page).to have_content("git clone #{project.send(msg)}")
|
||||
end
|
||||
end
|
|
@ -88,18 +88,18 @@ describe ProjectsHelper do
|
|||
end
|
||||
|
||||
describe 'default_clone_protocol' do
|
||||
describe 'using HTTP' do
|
||||
context 'when user is not logged in and gitlab protocol is HTTP' do
|
||||
it 'returns HTTP' do
|
||||
expect(helper).to receive(:current_user).and_return(nil)
|
||||
allow(helper).to receive(:current_user).and_return(nil)
|
||||
|
||||
expect(helper.send(:default_clone_protocol)).to eq('http')
|
||||
end
|
||||
end
|
||||
|
||||
describe 'using HTTPS' do
|
||||
context 'when user is not logged in and gitlab protocol is HTTPS' do
|
||||
it 'returns HTTPS' do
|
||||
allow(Gitlab.config.gitlab).to receive(:protocol).and_return('https')
|
||||
expect(helper).to receive(:current_user).and_return(nil)
|
||||
stub_config_setting(protocol: 'https')
|
||||
allow(helper).to receive(:current_user).and_return(nil)
|
||||
|
||||
expect(helper.send(:default_clone_protocol)).to eq('https')
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue