/spec/features/users/user_browses_projects_on_user_page_spec.rb

https://gitlab.com/tnir/gitlab-ce · Ruby · 148 lines · 112 code · 35 blank · 1 comment · 0 complexity · 34815856fa2403bb60bf0d53afaa33df MD5 · raw file

  1. # frozen_string_literal: true
  2. require 'spec_helper'
  3. describe 'Users > User browses projects on user page', :js do
  4. let!(:user) { create :user }
  5. let!(:private_project) do
  6. create :project, :private, name: 'private', namespace: user.namespace do |project|
  7. project.add_maintainer(user)
  8. end
  9. end
  10. let!(:internal_project) do
  11. create :project, :internal, name: 'internal', namespace: user.namespace do |project|
  12. project.add_maintainer(user)
  13. end
  14. end
  15. let!(:public_project) do
  16. create :project, :public, name: 'public', namespace: user.namespace do |project|
  17. project.add_maintainer(user)
  18. end
  19. end
  20. def click_nav_link(name)
  21. page.within '.nav-links' do
  22. click_link name
  23. end
  24. end
  25. it 'hides loading spinner after load', :js do
  26. visit user_path(user)
  27. click_nav_link('Personal projects')
  28. wait_for_requests
  29. expect(page).not_to have_selector('.loading-status .loading', visible: true)
  30. end
  31. it 'paginates projects', :js do
  32. project = create(:project, namespace: user.namespace, updated_at: 2.minutes.since)
  33. project2 = create(:project, namespace: user.namespace, updated_at: 1.minute.since)
  34. allow(Project).to receive(:default_per_page).and_return(1)
  35. sign_in(user)
  36. visit user_path(user)
  37. click_nav_link('Personal projects')
  38. wait_for_requests
  39. expect(page).to have_content(project.name)
  40. click_link('Next')
  41. expect(page).to have_content(project2.name)
  42. end
  43. it 'does not have incorrectly interpolated message', :js do
  44. project = create(:project, namespace: user.namespace, updated_at: 2.minutes.since)
  45. sign_in(user)
  46. visit user_path(user)
  47. click_nav_link('Personal projects')
  48. wait_for_requests
  49. expect(page).to have_content(project.name)
  50. expect(page).not_to have_content("_('Updated')")
  51. end
  52. context 'when not signed in' do
  53. it 'renders user public project' do
  54. visit user_path(user)
  55. click_nav_link('Personal projects')
  56. expect(page).to have_css('.tab-content #projects.active')
  57. expect(title).to start_with(user.name)
  58. expect(page).to have_content(public_project.name)
  59. expect(page).not_to have_content(private_project.name)
  60. expect(page).not_to have_content(internal_project.name)
  61. end
  62. end
  63. context 'when signed in as another user' do
  64. let(:another_user) { create :user }
  65. before do
  66. sign_in(another_user)
  67. end
  68. it 'renders user public and internal projects' do
  69. visit user_path(user)
  70. click_nav_link('Personal projects')
  71. expect(title).to start_with(user.name)
  72. expect(page).not_to have_content(private_project.name)
  73. expect(page).to have_content(public_project.name)
  74. expect(page).to have_content(internal_project.name)
  75. end
  76. end
  77. context 'when signed in as user' do
  78. before do
  79. sign_in(user)
  80. end
  81. describe 'personal projects' do
  82. it 'renders all user projects' do
  83. visit user_path(user)
  84. click_nav_link('Personal projects')
  85. expect(title).to start_with(user.name)
  86. expect(page).to have_content(private_project.name)
  87. expect(page).to have_content(public_project.name)
  88. expect(page).to have_content(internal_project.name)
  89. end
  90. end
  91. describe 'contributed projects' do
  92. context 'when user has contributions' do
  93. let(:contributed_project) do
  94. create :project, :public, :empty_repo
  95. end
  96. before do
  97. Issues::CreateService.new(contributed_project, user, { title: 'Bug in old browser' }).execute
  98. event = create(:push_event, project: contributed_project, author: user)
  99. create(:push_event_payload, event: event, commit_count: 3)
  100. end
  101. it 'renders contributed project' do
  102. visit user_path(user)
  103. expect(title).to start_with(user.name)
  104. expect(page).to have_css('.js-contrib-calendar')
  105. click_nav_link('Contributed projects')
  106. page.within '#contributed' do
  107. expect(page).to have_content(contributed_project.name)
  108. end
  109. end
  110. end
  111. end
  112. end
  113. end