diff options
Diffstat (limited to 'spec/features/projects/members')
6 files changed, 125 insertions, 36 deletions
diff --git a/spec/features/projects/members/group_members_spec.rb b/spec/features/projects/members/group_members_spec.rb index 3060d2c6a43..aa15f04bf24 100644 --- a/spec/features/projects/members/group_members_spec.rb +++ b/spec/features/projects/members/group_members_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe 'Projects members' do +RSpec.describe 'Projects members', :js do let(:user) { create(:user) } let(:developer) { create(:user) } let(:group) { create(:group, :public) } @@ -66,62 +66,61 @@ RSpec.describe 'Projects members' do end end - context 'with a group and a project invitee' do + context 'with a group, a project invitee, and a project requester' do before do + group.request_access(group_requester) + project.request_access(project_requester) group_invitee project_invitee visit project_project_members_path(project) end - it 'shows the project invitee, the project developer, and the group owner' do + it 'shows the group owner' do page.within first('.content-list') do - expect(page).to have_content('test1@abc.com') - expect(page).not_to have_content('test2@abc.com') - - # Project developer - expect(page).to have_content(developer.name) - # Group owner expect(page).to have_content(user.name) expect(page).to have_content(group.name) end end - end - context 'with a group requester' do - before do - group.request_access(group_requester) - visit project_project_members_path(project) + it 'shows the project developer' do + page.within first('.content-list') do + # Project developer + expect(page).to have_content(developer.name) + end end - it 'does not appear in the project members page' do + it 'shows the project invitee' do + click_link 'Invited' + page.within first('.content-list') do + expect(page).to have_content('test1@abc.com') + expect(page).not_to have_content('test2@abc.com') + end + end + + it 'shows the project requester' do + click_link 'Access requests' + + page.within first('.content-list') do + expect(page).to have_content(project_requester.name) expect(page).not_to have_content(group_requester.name) end end end - context 'with a group and a project requesters' do + context 'with a group requester' do before do + stub_feature_flags(invite_members_group_modal: false) group.request_access(group_requester) - project.request_access(project_requester) visit project_project_members_path(project) end - it 'shows the project requester, the project developer, and the group owner' do + it 'does not appear in the project members page' do + expect(page).not_to have_link('Access requests') page.within first('.content-list') do - expect(page).to have_content(project_requester.name) expect(page).not_to have_content(group_requester.name) end - - page.within all('.content-list').last do - # Project developer - expect(page).to have_content(developer.name) - - # Group owner - expect(page).to have_content(user.name) - expect(page).to have_content(group.name) - end end end diff --git a/spec/features/projects/members/groups_with_access_list_spec.rb b/spec/features/projects/members/groups_with_access_list_spec.rb index d59f8eb4b1d..686d86b1783 100644 --- a/spec/features/projects/members/groups_with_access_list_spec.rb +++ b/spec/features/projects/members/groups_with_access_list_spec.rb @@ -16,6 +16,7 @@ RSpec.describe 'Projects > Members > Groups with access list', :js do project.add_maintainer(user) sign_in(user) visit project_project_members_path(project) + click_groups_tab end it 'updates group access level' do @@ -29,6 +30,8 @@ RSpec.describe 'Projects > Members > Groups with access list', :js do visit project_project_members_path(project) + click_groups_tab + expect(first('.group_member')).to have_content('Guest') end @@ -71,23 +74,31 @@ RSpec.describe 'Projects > Members > Groups with access list', :js do expect(page).not_to have_selector('.group_member') end - context 'search in existing members (yes, this filters the groups list as well)' do + context 'search in existing members' do it 'finds no results' do page.within '.user-search-form' do - fill_in 'search', with: 'testing 123' + fill_in 'search_groups', with: 'testing 123' find('.user-search-btn').click end + click_groups_tab + expect(page).not_to have_selector('.group_member') end it 'finds results' do page.within '.user-search-form' do - fill_in 'search', with: group.name + fill_in 'search_groups', with: group.name find('.user-search-btn').click end + click_groups_tab + expect(page).to have_selector('.group_member', count: 1) end end + + def click_groups_tab + click_link 'Groups' + end end diff --git a/spec/features/projects/members/invite_group_spec.rb b/spec/features/projects/members/invite_group_spec.rb index 30e32ad1366..bb56ae348fb 100644 --- a/spec/features/projects/members/invite_group_spec.rb +++ b/spec/features/projects/members/invite_group_spec.rb @@ -39,7 +39,7 @@ RSpec.describe 'Project > Members > Invite group', :js do it 'the project can be shared with another group' do visit project_project_members_path(project) - expect(page).not_to have_css('.project-members-groups') + expect(page).not_to have_link 'Groups' click_on 'invite-group-tab' @@ -47,7 +47,9 @@ RSpec.describe 'Project > Members > Invite group', :js do page.find('body').click find('.btn-success').click - page.within('.project-members-groups') do + click_link 'Groups' + + page.within('[data-testid="project-member-groups"]') do expect(page).to have_content(group_to_share_with.name) end end @@ -132,7 +134,9 @@ RSpec.describe 'Project > Members > Invite group', :js do end it 'the group link shows the expiration time with a warning class' do - page.within('.project-members-groups') do + click_link 'Groups' + + page.within('[data-testid="project-member-groups"]') do # Using distance_of_time_in_words_to_now because it is not the same as # subtraction, and this way avoids time zone issues as well expires_in_text = distance_of_time_in_words_to_now(project.project_group_links.first.expires_at) diff --git a/spec/features/projects/members/list_spec.rb b/spec/features/projects/members/list_spec.rb index 36ff461aac2..62115f2dce6 100644 --- a/spec/features/projects/members/list_spec.rb +++ b/spec/features/projects/members/list_spec.rb @@ -12,6 +12,7 @@ RSpec.describe 'Project members list' do let(:project) { create(:project, namespace: group) } before do + stub_feature_flags(invite_members_group_modal: false) sign_in(user1) group.add_owner(user1) end @@ -82,7 +83,9 @@ RSpec.describe 'Project members list' do add_user('test@example.com', 'Reporter') - page.within(second_row) do + click_link 'Invited' + + page.within(first_row) do expect(page).to have_content('test@example.com') expect(page).to have_content('Invited') expect(page).to have_button('Reporter') diff --git a/spec/features/projects/members/master_manages_access_requests_spec.rb b/spec/features/projects/members/master_manages_access_requests_spec.rb index 2fdc75dca91..4c3eaa93352 100644 --- a/spec/features/projects/members/master_manages_access_requests_spec.rb +++ b/spec/features/projects/members/master_manages_access_requests_spec.rb @@ -4,7 +4,6 @@ require 'spec_helper' RSpec.describe 'Projects > Members > Maintainer manages access requests' do it_behaves_like 'Maintainer manages access requests' do - let(:has_tabs) { false } let(:entity) { create(:project, :public) } let(:members_page_path) { project_project_members_path(entity) } end diff --git a/spec/features/projects/members/tabs_spec.rb b/spec/features/projects/members/tabs_spec.rb new file mode 100644 index 00000000000..bdcf02c82a4 --- /dev/null +++ b/spec/features/projects/members/tabs_spec.rb @@ -0,0 +1,73 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'Projects > Members > Tabs' do + using RSpec::Parameterized::TableSyntax + + let_it_be(:user) { create(:user) } + let_it_be(:project) { create(:project, creator: user, namespace: user.namespace) } + let_it_be(:group) { create(:group) } + let_it_be(:project_members) { create_list(:project_member, 2, project: project) } + let_it_be(:access_requests) { create_list(:project_member, 2, :access_request, project: project) } + let_it_be(:invites) { create_list(:project_member, 2, :invited, project: project) } + let_it_be(:project_group_links) { create_list(:project_group_link, 2, project: project) } + + shared_examples 'active "Members" tab' do + it 'displays "Members" tab' do + expect(page).to have_selector('.nav-link.active', text: 'Members') + end + end + + before do + allow(Kaminari.config).to receive(:default_per_page).and_return(1) + + sign_in(user) + visit project_project_members_path(project) + end + + where(:tab, :count) do + 'Members' | 3 + 'Invited' | 2 + 'Groups' | 2 + 'Access requests' | 2 + end + + with_them do + it "renders #{params[:tab]} tab" do + expect(page).to have_selector('.nav-link', text: "#{tab} #{count}") + end + end + + context 'displays "Members" tab by default' do + it_behaves_like 'active "Members" tab' + end + + context 'when searching "Groups"', :js do + before do + click_link 'Groups' + + page.within '[data-testid="group-link-search-form"]' do + fill_in 'search_groups', with: 'group' + find('button[type="submit"]').click + end + end + + it 'displays "Groups" tab' do + expect(page).to have_selector('.nav-link.active', text: 'Groups') + end + + context 'and then searching "Members"' do + before do + click_link 'Members 3' + + page.within '[data-testid="user-search-form"]' do + fill_in 'search', with: 'user' + find('button[type="submit"]').click + end + end + + it_behaves_like 'active "Members" tab' + end + end +end |