/spec/features/projects/show/user_sees_git_instructions_spec.rb

https://gitlab.com/tnir/gitlab-ce · Ruby · 174 lines · 130 code · 43 blank · 1 comment · 0 complexity · fca629393fa148c696a7fb0a40de9533 MD5 · raw file

  1. # frozen_string_literal: true
  2. require 'spec_helper'
  3. describe 'Projects > Show > User sees Git instructions' do
  4. let_it_be(:user) { create(:user) }
  5. shared_examples_for 'redirects to the sign in page' do
  6. it 'redirects to the sign in page' do
  7. expect(current_path).to eq(new_user_session_path)
  8. end
  9. end
  10. shared_examples_for 'shows details of empty project with no repo' do
  11. it 'shows Git command line instructions' do
  12. click_link 'Create empty repository'
  13. page.within '.empty-wrapper' do
  14. expect(page).to have_content('Command line instructions')
  15. end
  16. end
  17. end
  18. shared_examples_for 'shows details of empty project' do
  19. let(:user_has_ssh_key) { false }
  20. it 'shows details' do
  21. expect(page).not_to have_content('Git global setup')
  22. page.all(:css, '.git-empty .clone').each do |element|
  23. expect(element.text).to include(project.http_url_to_repo)
  24. end
  25. expect(page).to have_field('http_project_clone', with: project.http_url_to_repo) unless user_has_ssh_key
  26. end
  27. end
  28. shared_examples_for 'shows details of non empty project' do
  29. let(:user_has_ssh_key) { false }
  30. it 'shows details' do
  31. page.within('.breadcrumbs .breadcrumb-item-text') do
  32. expect(page).to have_content(project.title)
  33. end
  34. expect(page).to have_field('http_project_clone', with: project.http_url_to_repo) unless user_has_ssh_key
  35. end
  36. end
  37. context 'when project is public' do
  38. context 'when project has no repo' do
  39. let_it_be(:project) { create(:project, :public) }
  40. before do
  41. sign_in(project.owner)
  42. visit project_path(project)
  43. end
  44. include_examples 'shows details of empty project with no repo'
  45. end
  46. context 'when project is empty' do
  47. let_it_be(:project) { create(:project_empty_repo, :public) }
  48. context 'when not signed in' do
  49. before do
  50. visit(project_path(project))
  51. end
  52. include_examples 'shows details of empty project'
  53. end
  54. context 'when signed in' do
  55. before do
  56. sign_in(user)
  57. end
  58. context 'when user does not have ssh keys' do
  59. before do
  60. visit(project_path(project))
  61. end
  62. include_examples 'shows details of empty project'
  63. end
  64. context 'when user has ssh keys' do
  65. before do
  66. create(:personal_key, user: user)
  67. visit(project_path(project))
  68. end
  69. include_examples 'shows details of empty project' do
  70. let(:user_has_ssh_key) { true }
  71. end
  72. end
  73. end
  74. end
  75. context 'when project is not empty' do
  76. let_it_be(:project) { create(:project, :public, :repository) }
  77. before do
  78. visit(project_path(project))
  79. end
  80. context 'when not signed in' do
  81. before do
  82. allow(Gitlab.config.gitlab).to receive(:host).and_return('www.example.com')
  83. end
  84. include_examples 'shows details of non empty project'
  85. end
  86. context 'when signed in' do
  87. before do
  88. sign_in(user)
  89. end
  90. context 'when user does not have ssh keys' do
  91. before do
  92. visit(project_path(project))
  93. end
  94. include_examples 'shows details of non empty project'
  95. end
  96. context 'when user has ssh keys' do
  97. before do
  98. create(:personal_key, user: user)
  99. visit(project_path(project))
  100. end
  101. include_examples 'shows details of non empty project' do
  102. let(:user_has_ssh_key) { true }
  103. end
  104. end
  105. end
  106. end
  107. end
  108. context 'when project is internal' do
  109. let_it_be(:project) { create(:project, :internal, :repository) }
  110. context 'when not signed in' do
  111. before do
  112. visit(project_path(project))
  113. end
  114. include_examples 'redirects to the sign in page'
  115. end
  116. context 'when signed in' do
  117. before do
  118. sign_in(user)
  119. visit(project_path(project))
  120. end
  121. include_examples 'shows details of non empty project'
  122. end
  123. end
  124. context 'when project is private' do
  125. let_it_be(:project) { create(:project, :private) }
  126. before do
  127. visit(project_path(project))
  128. end
  129. include_examples 'redirects to the sign in page'
  130. end
  131. end