diff options
Diffstat (limited to 'spec/features/projects/members/group_members_spec.rb')
-rw-r--r-- | spec/features/projects/members/group_members_spec.rb | 243 |
1 files changed, 173 insertions, 70 deletions
diff --git a/spec/features/projects/members/group_members_spec.rb b/spec/features/projects/members/group_members_spec.rb index aa15f04bf24..1abd00421ec 100644 --- a/spec/features/projects/members/group_members_spec.rb +++ b/spec/features/projects/members/group_members_spec.rb @@ -3,6 +3,8 @@ require 'spec_helper' RSpec.describe 'Projects members', :js do + include Spec::Support::Helpers::Features::MembersHelpers + let(:user) { create(:user) } let(:developer) { create(:user) } let(:group) { create(:group, :public) } @@ -18,117 +20,218 @@ RSpec.describe 'Projects members', :js do sign_in(user) end - context 'with a group invitee' do - before do - group_invitee - visit project_project_members_path(project) - end + context 'when `vue_project_members_list` feature flag is enabled' do + context 'with a group invitee' do + before do + group_invitee + visit project_project_members_path(project) + end - it 'does not appear in the project members page' do - page.within first('.content-list') do - expect(page).not_to have_content('test2@abc.com') + it 'does not appear in the project members page' do + expect(members_table).not_to have_content('test2@abc.com') end end - end - context 'with a group' do - it 'shows group and project members by default' do - visit project_project_members_path(project) + context 'with a group' do + it 'shows group and project members by default' do + visit project_project_members_path(project) + + expect(members_table).to have_content(developer.name) + expect(members_table).to have_content(user.name) + expect(members_table).to have_content(group.name) + end + + it 'shows project members only if requested' do + visit project_project_members_path(project, with_inherited_permissions: 'exclude') + + expect(members_table).to have_content(developer.name) + expect(members_table).not_to have_content(user.name) + expect(members_table).not_to have_content(group.name) + end - page.within first('.content-list') do - expect(page).to have_content(developer.name) + it 'shows group members only if requested' do + visit project_project_members_path(project, with_inherited_permissions: 'only') - expect(page).to have_content(user.name) - expect(page).to have_content(group.name) + expect(members_table).not_to have_content(developer.name) + expect(members_table).to have_content(user.name) + expect(members_table).to have_content(group.name) end end - it 'shows project members only if requested' do - visit project_project_members_path(project, with_inherited_permissions: 'exclude') + 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 group owner' do + expect(members_table).to have_content(user.name) + expect(members_table).to have_content(group.name) + end + + it 'shows the project developer' do + expect(members_table).to have_content(developer.name) + end + + it 'shows the project invitee' do + click_link 'Invited' + + expect(members_table).to have_content('test1@abc.com') + expect(members_table).not_to have_content('test2@abc.com') + end - page.within first('.content-list') do - expect(page).to have_content(developer.name) + it 'shows the project requester' do + click_link 'Access requests' - expect(page).not_to have_content(user.name) - expect(page).not_to have_content(group.name) + expect(members_table).to have_content(project_requester.name) + expect(members_table).not_to have_content(group_requester.name) end end - it 'shows group members only if requested' do - visit project_project_members_path(project, with_inherited_permissions: 'only') + context 'with a group requester' do + before do + stub_feature_flags(invite_members_group_modal: false) + group.request_access(group_requester) + visit project_project_members_path(project) + end + + it 'does not appear in the project members page' do + expect(page).not_to have_link('Access requests') + expect(members_table).not_to have_content(group_requester.name) + end + end + + context 'showing status of members' do + it 'shows the status' do + create(:user_status, user: user, emoji: 'smirk', message: 'Authoring this object') - page.within first('.content-list') do - expect(page).not_to have_content(developer.name) + visit project_project_members_path(project) - expect(page).to have_content(user.name) - expect(page).to have_content(group.name) + expect(first_row).to have_selector('gl-emoji[data-name="smirk"]') end end end - context 'with a group, a project invitee, and a project requester' do + context 'when `vue_project_members_list` feature flag is disabled' do before do - group.request_access(group_requester) - project.request_access(project_requester) - group_invitee - project_invitee - visit project_project_members_path(project) + stub_feature_flags(vue_project_members_list: false) end - it 'shows the group owner' do - page.within first('.content-list') do - # Group owner - expect(page).to have_content(user.name) - expect(page).to have_content(group.name) + context 'with a group invitee' do + before do + group_invitee + visit project_project_members_path(project) end - end - it 'shows the project developer' do - page.within first('.content-list') do - # Project developer - expect(page).to have_content(developer.name) + it 'does not appear in the project members page' do + page.within first('.content-list') do + expect(page).not_to have_content('test2@abc.com') + end end end - it 'shows the project invitee' do - click_link 'Invited' + context 'with a group' do + it 'shows group and project members by default' do + visit project_project_members_path(project) - page.within first('.content-list') do - expect(page).to have_content('test1@abc.com') - expect(page).not_to have_content('test2@abc.com') + page.within first('.content-list') do + expect(page).to have_content(developer.name) + + expect(page).to have_content(user.name) + expect(page).to have_content(group.name) + end + end + + it 'shows project members only if requested' do + visit project_project_members_path(project, with_inherited_permissions: 'exclude') + + page.within first('.content-list') do + expect(page).to have_content(developer.name) + + expect(page).not_to have_content(user.name) + expect(page).not_to have_content(group.name) + end end - end - it 'shows the project requester' do - click_link 'Access requests' + it 'shows group members only if requested' do + visit project_project_members_path(project, with_inherited_permissions: 'only') - page.within first('.content-list') do - expect(page).to have_content(project_requester.name) - expect(page).not_to have_content(group_requester.name) + page.within first('.content-list') do + expect(page).not_to have_content(developer.name) + + expect(page).to have_content(user.name) + expect(page).to have_content(group.name) + end end end - end - context 'with a group requester' do - before do - stub_feature_flags(invite_members_group_modal: false) - group.request_access(group_requester) - visit project_project_members_path(project) + 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 group owner' do + page.within first('.content-list') do + # Group owner + expect(page).to have_content(user.name) + expect(page).to have_content(group.name) + end + end + + it 'shows the project developer' do + page.within first('.content-list') do + # Project developer + expect(page).to have_content(developer.name) + end + end + + 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 - 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).not_to have_content(group_requester.name) + context 'with a group requester' do + before do + stub_feature_flags(invite_members_group_modal: false) + group.request_access(group_requester) + visit project_project_members_path(project) + end + + 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).not_to have_content(group_requester.name) + end end end - end - describe 'showing status of members' do - it_behaves_like 'showing user status' do - let(:user_with_status) { developer } + context 'showing status of members' do + it_behaves_like 'showing user status' do + let(:user_with_status) { developer } - subject { visit project_project_members_path(project) } + subject { visit project_project_members_path(project) } + end end end end |