2017-06-29 06:30:33 -04:00
|
|
|
require 'spec_helper'
|
2016-11-03 09:47:15 -04:00
|
|
|
|
2017-06-29 06:30:33 -04:00
|
|
|
feature 'New project' do
|
2017-08-26 02:50:12 -04:00
|
|
|
include Select2Helper
|
|
|
|
|
2017-01-30 12:43:13 -05:00
|
|
|
let(:user) { create(:admin) }
|
2016-11-03 09:47:15 -04:00
|
|
|
|
2017-01-30 12:43:13 -05:00
|
|
|
before do
|
2017-06-29 06:30:33 -04:00
|
|
|
sign_in(user)
|
2017-01-30 12:43:13 -05:00
|
|
|
end
|
2016-11-03 09:47:15 -04:00
|
|
|
|
2017-10-11 05:07:19 -04:00
|
|
|
it 'shows "New project" page', :js do
|
2017-06-29 06:30:33 -04:00
|
|
|
visit new_project_path
|
|
|
|
|
|
|
|
expect(page).to have_content('Project path')
|
|
|
|
expect(page).to have_content('Project name')
|
|
|
|
|
2017-10-23 06:55:15 -04:00
|
|
|
find('#import-project-tab').click
|
2017-10-11 05:07:19 -04:00
|
|
|
|
2017-06-29 06:30:33 -04:00
|
|
|
expect(page).to have_link('GitHub')
|
|
|
|
expect(page).to have_link('Bitbucket')
|
|
|
|
expect(page).to have_link('GitLab.com')
|
|
|
|
expect(page).to have_link('Google Code')
|
|
|
|
expect(page).to have_button('Repo by URL')
|
|
|
|
expect(page).to have_link('GitLab export')
|
|
|
|
end
|
|
|
|
|
2017-10-11 05:07:19 -04:00
|
|
|
context 'Visibility level selector', :js do
|
2016-11-03 09:47:15 -04:00
|
|
|
Gitlab::VisibilityLevel.options.each do |key, level|
|
|
|
|
it "sets selector to #{key}" do
|
|
|
|
stub_application_setting(default_project_visibility: level)
|
|
|
|
|
|
|
|
visit new_project_path
|
2017-10-11 05:07:19 -04:00
|
|
|
page.within('#blank-project-pane') do
|
|
|
|
expect(find_field("project_visibility_level_#{level}")).to be_checked
|
|
|
|
end
|
2016-11-03 09:47:15 -04:00
|
|
|
end
|
2017-03-11 08:59:09 -05:00
|
|
|
|
2017-06-07 16:13:44 -04:00
|
|
|
it "saves visibility level #{level} on validation error" do
|
2017-03-11 16:01:43 -05:00
|
|
|
visit new_project_path
|
2017-03-11 08:59:09 -05:00
|
|
|
|
2017-06-07 16:13:44 -04:00
|
|
|
choose(s_(key))
|
2017-03-11 16:01:43 -05:00
|
|
|
click_button('Create project')
|
2017-10-11 05:07:19 -04:00
|
|
|
page.within('#blank-project-pane') do
|
|
|
|
expect(find_field("project_visibility_level_#{level}")).to be_checked
|
|
|
|
end
|
2017-03-11 08:59:09 -05:00
|
|
|
end
|
2016-11-03 09:47:15 -04:00
|
|
|
end
|
|
|
|
end
|
2017-01-30 12:43:13 -05:00
|
|
|
|
2017-06-29 06:30:33 -04:00
|
|
|
context 'Namespace selector' do
|
|
|
|
context 'with user namespace' do
|
2017-02-20 12:01:37 -05:00
|
|
|
before do
|
|
|
|
visit new_project_path
|
|
|
|
end
|
|
|
|
|
2017-06-29 06:30:33 -04:00
|
|
|
it 'selects the user namespace' do
|
2017-10-11 05:07:19 -04:00
|
|
|
page.within('#blank-project-pane') do
|
|
|
|
namespace = find('#project_namespace_id')
|
2017-02-20 12:01:37 -05:00
|
|
|
|
2017-10-11 05:07:19 -04:00
|
|
|
expect(namespace.text).to eq user.username
|
|
|
|
end
|
2017-02-20 12:01:37 -05:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2017-06-29 06:30:33 -04:00
|
|
|
context 'with group namespace' do
|
2017-02-20 12:01:37 -05:00
|
|
|
let(:group) { create(:group, :private, owner: user) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
group.add_owner(user)
|
|
|
|
visit new_project_path(namespace_id: group.id)
|
|
|
|
end
|
|
|
|
|
2017-06-29 06:30:33 -04:00
|
|
|
it 'selects the group namespace' do
|
2017-10-11 05:07:19 -04:00
|
|
|
page.within('#blank-project-pane') do
|
|
|
|
namespace = find('#project_namespace_id option[selected]')
|
2017-02-20 12:01:37 -05:00
|
|
|
|
2017-10-11 05:07:19 -04:00
|
|
|
expect(namespace.text).to eq group.name
|
|
|
|
end
|
2017-02-20 12:01:37 -05:00
|
|
|
end
|
|
|
|
end
|
2017-04-05 13:20:11 -04:00
|
|
|
|
2017-06-29 06:30:33 -04:00
|
|
|
context 'with subgroup namespace' do
|
2017-08-25 12:57:16 -04:00
|
|
|
let(:group) { create(:group, owner: user) }
|
2017-04-05 13:20:11 -04:00
|
|
|
let(:subgroup) { create(:group, parent: group) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
group.add_master(user)
|
|
|
|
visit new_project_path(namespace_id: subgroup.id)
|
|
|
|
end
|
|
|
|
|
2017-06-29 06:30:33 -04:00
|
|
|
it 'selects the group namespace' do
|
2017-10-11 05:07:19 -04:00
|
|
|
page.within('#blank-project-pane') do
|
|
|
|
namespace = find('#project_namespace_id option[selected]')
|
2017-04-05 13:20:11 -04:00
|
|
|
|
2017-10-11 05:07:19 -04:00
|
|
|
expect(namespace.text).to eq subgroup.full_path
|
|
|
|
end
|
2017-04-05 13:20:11 -04:00
|
|
|
end
|
|
|
|
end
|
2017-08-26 02:50:12 -04:00
|
|
|
|
|
|
|
context 'when changing namespaces dynamically', :js do
|
|
|
|
let(:public_group) { create(:group, :public) }
|
|
|
|
let(:internal_group) { create(:group, :internal) }
|
|
|
|
let(:private_group) { create(:group, :private) }
|
|
|
|
|
|
|
|
before do
|
|
|
|
public_group.add_owner(user)
|
|
|
|
internal_group.add_owner(user)
|
|
|
|
private_group.add_owner(user)
|
|
|
|
visit new_project_path(namespace_id: public_group.id)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'enables the correct visibility options' do
|
|
|
|
select2(user.namespace_id, from: '#project_namespace_id')
|
|
|
|
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
|
|
|
|
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
|
|
|
|
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).not_to be_disabled
|
|
|
|
|
|
|
|
select2(public_group.id, from: '#project_namespace_id')
|
|
|
|
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
|
|
|
|
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
|
|
|
|
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).not_to be_disabled
|
|
|
|
|
|
|
|
select2(internal_group.id, from: '#project_namespace_id')
|
|
|
|
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
|
|
|
|
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
|
|
|
|
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).to be_disabled
|
|
|
|
|
|
|
|
select2(private_group.id, from: '#project_namespace_id')
|
|
|
|
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
|
|
|
|
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).to be_disabled
|
|
|
|
expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).to be_disabled
|
|
|
|
end
|
|
|
|
end
|
2017-02-20 12:01:37 -05:00
|
|
|
end
|
|
|
|
|
2017-10-11 05:07:19 -04:00
|
|
|
context 'Import project options', :js do
|
2017-01-30 12:43:13 -05:00
|
|
|
before do
|
|
|
|
visit new_project_path
|
2017-10-23 06:55:15 -04:00
|
|
|
find('#import-project-tab').click
|
2017-01-30 12:43:13 -05:00
|
|
|
end
|
|
|
|
|
2017-06-29 06:30:33 -04:00
|
|
|
context 'from git repository url' do
|
|
|
|
before do
|
|
|
|
first('.import_git').click
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'does not autocomplete sensitive git repo URL' do
|
|
|
|
autocomplete = find('#project_import_url')['autocomplete']
|
|
|
|
|
|
|
|
expect(autocomplete).to eq('off')
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows import instructions' do
|
|
|
|
git_import_instructions = first('.js-toggle-content')
|
2017-01-30 12:43:13 -05:00
|
|
|
|
2017-06-29 06:30:33 -04:00
|
|
|
expect(git_import_instructions).to be_visible
|
|
|
|
expect(git_import_instructions).to have_content 'Git repository URL'
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'from GitHub' do
|
|
|
|
before do
|
|
|
|
first('.import_github').click
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows import instructions' do
|
|
|
|
expect(page).to have_content('Import Projects from GitHub')
|
|
|
|
expect(current_path).to eq new_import_github_path
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
context 'from Google Code' do
|
|
|
|
before do
|
|
|
|
first('.import_google_code').click
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'shows import instructions' do
|
|
|
|
expect(page).to have_content('Import projects from Google Code')
|
|
|
|
expect(current_path).to eq new_import_google_code_path
|
|
|
|
end
|
2017-01-30 12:43:13 -05:00
|
|
|
end
|
|
|
|
end
|
2016-11-03 09:47:15 -04:00
|
|
|
end
|