debian-mirror-gitlab/spec/features/projects/new_project_spec.rb

275 lines
8.7 KiB
Ruby
Raw Normal View History

2017-09-10 17:25:29 +05:30
require 'spec_helper'
2016-11-24 13:41:30 +05:30
2018-11-08 19:23:39 +05:30
describe 'New project' do
2018-03-17 18:26:18 +05:30
include Select2Helper
2017-08-17 22:00:37 +05:30
let(:user) { create(:admin) }
2016-11-24 13:41:30 +05:30
2017-08-17 22:00:37 +05:30
before do
2017-09-10 17:25:29 +05:30
sign_in(user)
2017-08-17 22:00:37 +05:30
end
2016-11-24 13:41:30 +05:30
2018-03-17 18:26:18 +05:30
it 'shows "New project" page', :js do
2017-09-10 17:25:29 +05:30
visit new_project_path
expect(page).to have_content('Project name')
2018-11-20 20:47:30 +05:30
expect(page).to have_content('Project URL')
expect(page).to have_content('Project slug')
2017-09-10 17:25:29 +05:30
2018-03-17 18:26:18 +05:30
find('#import-project-tab').click
2017-09-10 17:25:29 +05:30
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
2018-11-18 11:00:15 +05:30
describe 'manifest import option' do
before do
visit new_project_path
find('#import-project-tab').click
end
context 'when using postgres', :postgresql do
it { expect(page).to have_link('Manifest file') }
end
context 'when using mysql', :mysql do
it { expect(page).not_to have_link('Manifest file') }
end
end
2018-03-17 18:26:18 +05:30
context 'Visibility level selector', :js do
2016-11-24 13:41:30 +05:30
Gitlab::VisibilityLevel.options.each do |key, level|
it "sets selector to #{key}" do
stub_application_setting(default_project_visibility: level)
visit new_project_path
2018-03-17 18:26:18 +05:30
page.within('#blank-project-pane') do
expect(find_field("project_visibility_level_#{level}")).to be_checked
end
2016-11-24 13:41:30 +05:30
end
2017-08-17 22:00:37 +05:30
2017-09-10 17:25:29 +05:30
it "saves visibility level #{level} on validation error" do
2017-08-17 22:00:37 +05:30
visit new_project_path
2017-09-10 17:25:29 +05:30
choose(s_(key))
2017-08-17 22:00:37 +05:30
click_button('Create project')
2018-03-17 18:26:18 +05:30
page.within('#blank-project-pane') do
expect(find_field("project_visibility_level_#{level}")).to be_checked
end
2017-08-17 22:00:37 +05:30
end
end
end
2018-11-08 19:23:39 +05:30
context 'Readme selector' do
2018-12-05 23:21:45 +05:30
it 'shows the initialize with Readme checkbox on "Blank project" tab' do
2018-11-08 19:23:39 +05:30
visit new_project_path
expect(page).to have_css('input#project_initialize_with_readme')
expect(page).to have_content('Initialize repository with a README')
end
2018-12-05 23:21:45 +05:30
it 'does not show the initialize with Readme checkbox on "Create from template" tab' do
visit new_project_path
find('#create-from-template-pane').click
first('.choose-template').click
page.within '.project-fields-form' do
expect(page).not_to have_css('input#project_initialize_with_readme')
expect(page).not_to have_content('Initialize repository with a README')
end
end
it 'does not show the initialize with Readme checkbox on "Import project" tab' do
visit new_project_path
find('#import-project-tab').click
first('.js-import-git-toggle-button').click
page.within '.toggle-import-form' do
expect(page).not_to have_css('input#project_initialize_with_readme')
expect(page).not_to have_content('Initialize repository with a README')
end
end
2018-11-08 19:23:39 +05:30
end
2017-09-10 17:25:29 +05:30
context 'Namespace selector' do
context 'with user namespace' do
2017-08-17 22:00:37 +05:30
before do
visit new_project_path
end
2017-09-10 17:25:29 +05:30
it 'selects the user namespace' do
2018-03-17 18:26:18 +05:30
page.within('#blank-project-pane') do
namespace = find('#project_namespace_id')
2017-08-17 22:00:37 +05:30
2018-03-17 18:26:18 +05:30
expect(namespace.text).to eq user.username
end
2017-08-17 22:00:37 +05:30
end
end
2017-09-10 17:25:29 +05:30
context 'with group namespace' do
2018-10-15 14:42:47 +05:30
let(:group) { create(:group, :private) }
2017-08-17 22:00:37 +05:30
before do
group.add_owner(user)
visit new_project_path(namespace_id: group.id)
end
2017-09-10 17:25:29 +05:30
it 'selects the group namespace' do
2018-03-17 18:26:18 +05:30
page.within('#blank-project-pane') do
2017-09-10 17:25:29 +05:30
namespace = find('#project_namespace_id option[selected]')
2017-08-17 22:00:37 +05:30
expect(namespace.text).to eq group.name
end
end
end
2017-09-10 17:25:29 +05:30
context 'with subgroup namespace' do
2018-10-15 14:42:47 +05:30
let(:group) { create(:group) }
2017-08-17 22:00:37 +05:30
let(:subgroup) { create(:group, parent: group) }
before do
2018-11-18 11:00:15 +05:30
group.add_maintainer(user)
2017-08-17 22:00:37 +05:30
visit new_project_path(namespace_id: subgroup.id)
end
2017-09-10 17:25:29 +05:30
it 'selects the group namespace' do
2018-03-17 18:26:18 +05:30
page.within('#blank-project-pane') do
namespace = find('#project_namespace_id option[selected]')
expect(namespace.text).to eq subgroup.full_path
end
end
end
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
2017-08-17 22:00:37 +05:30
2018-03-17 18:26:18 +05:30
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
2017-08-17 22:00:37 +05:30
end
end
end
2018-03-17 18:26:18 +05:30
context 'Import project options', :js do
2017-08-17 22:00:37 +05:30
before do
visit new_project_path
2018-03-17 18:26:18 +05:30
find('#import-project-tab').click
2017-08-17 22:00:37 +05:30
end
2018-03-27 19:54:05 +05:30
context 'from git repository url, "Repo by URL"' do
2017-09-10 17:25:29 +05:30
before do
2018-03-27 19:54:05 +05:30
first('.js-import-git-toggle-button').click
2017-09-10 17:25:29 +05:30
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-08-17 22:00:37 +05:30
2017-09-10 17:25:29 +05:30
expect(git_import_instructions).to be_visible
expect(git_import_instructions).to have_content 'Git repository URL'
end
2018-03-27 19:54:05 +05:30
it 'keeps "Import project" tab open after form validation error' do
collision_project = create(:project, name: 'test-name-collision', namespace: user.namespace)
fill_in 'project_import_url', with: collision_project.http_url_to_repo
2018-11-20 20:47:30 +05:30
fill_in 'project_name', with: collision_project.name
2018-03-27 19:54:05 +05:30
click_on 'Create project'
expect(page).to have_css('#import-project-pane.active')
expect(page).not_to have_css('.toggle-import-form.hide')
end
2017-09-10 17:25:29 +05:30
end
context 'from GitHub' do
before do
2018-03-27 19:54:05 +05:30
first('.js-import-github').click
2017-09-10 17:25:29 +05:30
end
it 'shows import instructions' do
2018-03-27 19:54:05 +05:30
expect(page).to have_content('Import repositories from GitHub')
2017-09-10 17:25:29 +05:30
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
2016-11-24 13:41:30 +05:30
end
2018-11-18 11:00:15 +05:30
context 'from manifest file', :postgresql do
before do
first('.import_manifest').click
end
it 'shows import instructions' do
expect(page).to have_content('Manifest file import')
expect(current_path).to eq new_import_manifest_path
end
end
2016-11-24 13:41:30 +05:30
end
2019-05-18 00:54:41 +05:30
context 'Namespace selector' do
context 'with group with DEVELOPER_MAINTAINER_PROJECT_ACCESS project_creation_level' do
let(:group) { create(:group, project_creation_level: ::Gitlab::Access::DEVELOPER_MAINTAINER_PROJECT_ACCESS) }
before do
group.add_developer(user)
visit new_project_path(namespace_id: group.id)
end
it 'selects the group namespace' do
page.within('#blank-project-pane') do
namespace = find('#project_namespace_id option[selected]')
expect(namespace.text).to eq group.full_path
end
end
end
end
2016-11-24 13:41:30 +05:30
end