PageRenderTime 48ms CodeModel.GetById 17ms RepoModel.GetById 1ms app.codeStats 0ms

/spec/features/projects/new_project_spec.rb

https://bitbucket.org/terrchen/gitlab-ce
Ruby | 196 lines | 154 code | 42 blank | 0 comment | 0 complexity | ece8fbe93caa4554c102d05d004ca259 MD5 | raw file
Possible License(s): Apache-2.0, CC0-1.0
  1. require 'spec_helper'
  2. feature 'New project' do
  3. include Select2Helper
  4. let(:user) { create(:admin) }
  5. before do
  6. sign_in(user)
  7. end
  8. it 'shows "New project" page', :js do
  9. visit new_project_path
  10. expect(page).to have_content('Project path')
  11. expect(page).to have_content('Project name')
  12. find('#import-project-tab').click
  13. expect(page).to have_link('GitHub')
  14. expect(page).to have_link('Bitbucket')
  15. expect(page).to have_link('GitLab.com')
  16. expect(page).to have_link('Google Code')
  17. expect(page).to have_button('Repo by URL')
  18. expect(page).to have_link('GitLab export')
  19. end
  20. context 'Visibility level selector', :js do
  21. Gitlab::VisibilityLevel.options.each do |key, level|
  22. it "sets selector to #{key}" do
  23. stub_application_setting(default_project_visibility: level)
  24. visit new_project_path
  25. page.within('#blank-project-pane') do
  26. expect(find_field("project_visibility_level_#{level}")).to be_checked
  27. end
  28. end
  29. it "saves visibility level #{level} on validation error" do
  30. visit new_project_path
  31. choose(s_(key))
  32. click_button('Create project')
  33. page.within('#blank-project-pane') do
  34. expect(find_field("project_visibility_level_#{level}")).to be_checked
  35. end
  36. end
  37. end
  38. end
  39. context 'Namespace selector' do
  40. context 'with user namespace' do
  41. before do
  42. visit new_project_path
  43. end
  44. it 'selects the user namespace' do
  45. page.within('#blank-project-pane') do
  46. namespace = find('#project_namespace_id')
  47. expect(namespace.text).to eq user.username
  48. end
  49. end
  50. end
  51. context 'with group namespace' do
  52. let(:group) { create(:group, :private) }
  53. before do
  54. group.add_owner(user)
  55. visit new_project_path(namespace_id: group.id)
  56. end
  57. it 'selects the group namespace' do
  58. page.within('#blank-project-pane') do
  59. namespace = find('#project_namespace_id option[selected]')
  60. expect(namespace.text).to eq group.name
  61. end
  62. end
  63. end
  64. context 'with subgroup namespace' do
  65. let(:group) { create(:group) }
  66. let(:subgroup) { create(:group, parent: group) }
  67. before do
  68. group.add_master(user)
  69. visit new_project_path(namespace_id: subgroup.id)
  70. end
  71. it 'selects the group namespace' do
  72. page.within('#blank-project-pane') do
  73. namespace = find('#project_namespace_id option[selected]')
  74. expect(namespace.text).to eq subgroup.full_path
  75. end
  76. end
  77. end
  78. context 'when changing namespaces dynamically', :js do
  79. let(:public_group) { create(:group, :public) }
  80. let(:internal_group) { create(:group, :internal) }
  81. let(:private_group) { create(:group, :private) }
  82. before do
  83. public_group.add_owner(user)
  84. internal_group.add_owner(user)
  85. private_group.add_owner(user)
  86. visit new_project_path(namespace_id: public_group.id)
  87. end
  88. it 'enables the correct visibility options' do
  89. select2(user.namespace_id, from: '#project_namespace_id')
  90. expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
  91. expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
  92. expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).not_to be_disabled
  93. select2(public_group.id, from: '#project_namespace_id')
  94. expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
  95. expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
  96. expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).not_to be_disabled
  97. select2(internal_group.id, from: '#project_namespace_id')
  98. expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
  99. expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).not_to be_disabled
  100. expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).to be_disabled
  101. select2(private_group.id, from: '#project_namespace_id')
  102. expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PRIVATE}")).not_to be_disabled
  103. expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::INTERNAL}")).to be_disabled
  104. expect(find("#project_visibility_level_#{Gitlab::VisibilityLevel::PUBLIC}")).to be_disabled
  105. end
  106. end
  107. end
  108. context 'Import project options', :js do
  109. before do
  110. visit new_project_path
  111. find('#import-project-tab').click
  112. end
  113. context 'from git repository url, "Repo by URL"' do
  114. before do
  115. first('.js-import-git-toggle-button').click
  116. end
  117. it 'does not autocomplete sensitive git repo URL' do
  118. autocomplete = find('#project_import_url')['autocomplete']
  119. expect(autocomplete).to eq('off')
  120. end
  121. it 'shows import instructions' do
  122. git_import_instructions = first('.js-toggle-content')
  123. expect(git_import_instructions).to be_visible
  124. expect(git_import_instructions).to have_content 'Git repository URL'
  125. end
  126. it 'keeps "Import project" tab open after form validation error' do
  127. collision_project = create(:project, name: 'test-name-collision', namespace: user.namespace)
  128. fill_in 'project_import_url', with: collision_project.http_url_to_repo
  129. fill_in 'project_path', with: collision_project.path
  130. click_on 'Create project'
  131. expect(page).to have_css('#import-project-pane.active')
  132. expect(page).not_to have_css('.toggle-import-form.hide')
  133. end
  134. end
  135. context 'from GitHub' do
  136. before do
  137. first('.js-import-github').click
  138. end
  139. it 'shows import instructions' do
  140. expect(page).to have_content('Import repositories from GitHub')
  141. expect(current_path).to eq new_import_github_path
  142. end
  143. end
  144. context 'from Google Code' do
  145. before do
  146. first('.import_google_code').click
  147. end
  148. it 'shows import instructions' do
  149. expect(page).to have_content('Import projects from Google Code')
  150. expect(current_path).to eq new_import_google_code_path
  151. end
  152. end
  153. end
  154. end