1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'shared/projects/_list' do
let_it_be(:user) { build(:user) }
let_it_be(:group) { create(:group) }
before do
allow(view).to receive(:projects).and_return(projects)
allow(view).to receive(:current_user) { user }
end
context 'with projects' do
let(:projects) { build_stubbed_list(:project, 1) }
it 'renders the list of projects' do
render
projects.each do |project|
expect(rendered).to have_content(project.name)
end
end
it "will not show elements a user shouldn't be able to see" do
allow(view).to receive(:can_show_last_commit_in_list?).and_return(false)
allow(view).to receive(:able_to_see_merge_requests?).and_return(false)
allow(view).to receive(:able_to_see_issues?).and_return(false)
render
expect(rendered).not_to have_css('a.commit-row-message')
expect(rendered).not_to have_css('a.issues')
expect(rendered).not_to have_css('a.merge-requests')
end
it 'renders list in list view' do
expect(rendered).not_to have_css('.gl-card')
end
end
context 'with projects in card mode' do
let(:projects) { build_stubbed_list(:project, 1) }
it 'renders card mode when set to true' do
render template: 'shared/projects/_list', locals: { card_mode: true }
expect(rendered).to have_css('.gl-card')
end
end
context 'without projects' do
let(:projects) { [] }
context 'when @contributed_projects is set' do
context 'and is empty' do
before do
@contributed_projects = []
end
it 'renders a no-content message' do
render
expect(rendered).to have_content(s_('UserProfile|This user hasn\'t contributed to any projects'))
end
end
end
context 'when @starred_projects is set' do
context 'and is empty' do
before do
@starred_projects = []
end
it 'renders a no-content message' do
render
expect(rendered).to have_content(s_('UserProfile|This user hasn\'t starred any projects'))
end
end
end
context 'and without a special instance variable' do
context 'for an explore_page' do
before do
allow(view).to receive(:explore_page).and_return(true)
end
it 'renders a no-content message' do
render
expect(rendered).to have_content(s_('UserProfile|Explore public groups to find projects to contribute to'))
end
end
context 'for a non-explore page' do
it 'renders a no-content message' do
render
expect(rendered).to have_content(s_('UserProfile|There are no projects available to be displayed here'))
end
end
end
context 'when projects_limit > 0' do
before do
allow(user).to receive(:projects_limit).and_return(1)
controller.params[:controller] = 'users'
controller.params[:username] = user.username
end
it 'renders `New project` button' do
render
expect(rendered).to have_link('New project')
expect(rendered).to have_content(
s_('UserProfile|Your projects can be available publicly, internally, or privately, at your choice.')
)
end
end
context 'when projects_limit is 0' do
before do
allow(user).to receive(:projects_limit).and_return(0)
controller.params[:controller] = 'users'
controller.params[:username] = user.username
end
it 'does not render `New project` button' do
render
expect(rendered).not_to have_link('New project')
expect(rendered).to have_content(
s_("UserProfile|You cannot create projects in your personal namespace. Contact your GitLab administrator.")
)
end
end
end
end
|