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 140 141
|
# frozen_string_literal: true
require 'spec_helper'
RSpec.describe 'Explore Groups page', :js, feature_category: :groups_and_projects do
let_it_be(:user) { create(:user) }
context 'when there are groups to show' do
let_it_be(:group) { create(:group, created_at: 5.days.ago) }
let_it_be(:public_group) { create(:group, :public, created_at: 4.days.ago) }
let_it_be(:private_group) { create(:group, :private, created_at: 3.days.ago) }
let_it_be(:empty_project) { create(:project, group: public_group) }
before do
group.add_owner(user)
sign_in(user)
visit explore_groups_path
wait_for_requests
end
it 'shows groups user is member of' do
expect(page).to have_content(group.full_name)
expect(page).to have_content(public_group.full_name)
expect(page).not_to have_content(private_group.full_name)
end
it 'filters groups' do
search(group.name)
click_button 'Search'
wait_for_requests
expect(page).to have_content(group.full_name)
expect(page).not_to have_content(public_group.full_name)
expect(page).not_to have_content(private_group.full_name)
end
it 'resets search when user cleans the input' do
search(group.name)
click_button 'Search'
wait_for_requests
expect(page).to have_content(group.full_name)
expect(page).not_to have_content(public_group.full_name)
click_button 'Clear'
wait_for_requests
expect(page).to have_content(group.full_name)
expect(page).to have_content(public_group.full_name)
expect(page).not_to have_content(private_group.full_name)
expect(page.all('[data-testid="groups-list-tree-container"] .groups-list li').length).to eq 2
end
it 'shows non-archived projects count' do
# Initially project is not archived
expect(
find('[data-testid="groups-list-tree-container"] .groups-list li:first-child .stats .number-projects')
).to have_text("1")
# Archive project
::Projects::UpdateService.new(empty_project, user, archived: true).execute
visit explore_groups_path
# Check project count
expect(
find('[data-testid="groups-list-tree-container"] .groups-list li:first-child .stats .number-projects')
).to have_text("0")
# Unarchive project
::Projects::UpdateService.new(empty_project, user, archived: false).execute
visit explore_groups_path
# Check project count
expect(
find('[data-testid="groups-list-tree-container"] .groups-list li:first-child .stats .number-projects')
).to have_text("1")
end
it 'renders page description' do
expect(page).to have_content(
'Below you will find all the groups that are public or internal. Contribute by requesting to join a group.'
)
end
context 'when using pagination' do
before do
group.add_owner(user)
public_group.add_owner(user)
allow(Kaminari.config).to receive(:default_per_page).and_return(1)
sign_in(user)
visit explore_groups_path
wait_for_requests
end
it 'loads results for next page' do
expect(page).to have_selector('.gl-pagination a', count: 3)
# Check first page
expect(page).to have_content(public_group.full_name)
expect(page).to have_selector("#group-#{public_group.id}")
expect(page).not_to have_content(group.full_name)
expect(page).not_to have_selector("#group-#{group.id}")
# Go to next page
find_by_testid('gl-pagination-next').click
wait_for_requests
# Check second page
expect(page).to have_content(group.full_name)
expect(page).to have_selector("#group-#{group.id}")
expect(page).not_to have_content(public_group.full_name)
expect(page).not_to have_selector("#group-#{public_group.id}")
end
end
end
context 'when there are no groups to show' do
before do
sign_in(user)
visit explore_groups_path
wait_for_requests
end
it 'shows empty state' do
expect(page).to have_content(_('No public or internal groups'))
end
end
def search(term)
filter_input = find_by_testid('filtered-search-term-input')
filter_input.click
filter_input.set(term)
click_button 'Search'
end
end
|