diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2022-04-20 13:00:54 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2022-04-20 13:00:54 +0300 |
commit | 3cccd102ba543e02725d247893729e5c73b38295 (patch) | |
tree | f36a04ec38517f5deaaacb5acc7d949688d1e187 /spec/support/shared_examples/features/inviting_members_shared_examples.rb | |
parent | 205943281328046ef7b4528031b90fbda70c75ac (diff) |
Add latest changes from gitlab-org/gitlab@14-10-stable-eev14.10.0-rc42
Diffstat (limited to 'spec/support/shared_examples/features/inviting_members_shared_examples.rb')
-rw-r--r-- | spec/support/shared_examples/features/inviting_members_shared_examples.rb | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/spec/support/shared_examples/features/inviting_members_shared_examples.rb b/spec/support/shared_examples/features/inviting_members_shared_examples.rb new file mode 100644 index 00000000000..58357b262f5 --- /dev/null +++ b/spec/support/shared_examples/features/inviting_members_shared_examples.rb @@ -0,0 +1,175 @@ +# frozen_string_literal: true + +RSpec.shared_examples 'inviting members' do |snowplow_invite_label| + before_all do + group.add_owner(user1) + end + + it 'adds user as member', :js, :snowplow, :aggregate_failures do + visit members_page_path + + invite_member(user2.name, role: 'Reporter') + + page.within find_member_row(user2) do + expect(page).to have_button('Reporter') + end + + expect_snowplow_event( + category: 'Members::InviteService', + action: 'create_member', + label: snowplow_invite_label, + property: 'existing_user', + user: user1 + ) + end + + it 'invites user by email', :js, :snowplow, :aggregate_failures do + visit members_page_path + + invite_member('test@example.com', role: 'Reporter') + + click_link 'Invited' + + page.within find_invited_member_row('test@example.com') do + expect(page).to have_button('Reporter') + end + + expect_snowplow_event( + category: 'Members::InviteService', + action: 'create_member', + label: snowplow_invite_label, + property: 'net_new_user', + user: user1 + ) + end + + it 'invites user by username and invites user by email', :js, :aggregate_failures do + visit members_page_path + + invite_member([user2.name, 'test@example.com'], role: 'Reporter') + + page.within find_member_row(user2) do + expect(page).to have_button('Reporter') + end + + click_link 'Invited' + + page.within find_invited_member_row('test@example.com') do + expect(page).to have_button('Reporter') + end + end + + context 'when member is already a member by username' do + it 'updates the member for that user', :js do + visit members_page_path + + invite_member(user2.name, role: 'Developer') + + invite_member(user2.name, role: 'Reporter', refresh: false) + + expect(page).not_to have_selector(invite_modal_selector) + + page.refresh + + page.within find_invited_member_row(user2.name) do + expect(page).to have_button('Reporter') + end + end + end + + context 'when member is already a member by email' do + it 'fails with an error', :js do + visit members_page_path + + invite_member('test@example.com', role: 'Developer') + + invite_member('test@example.com', role: 'Reporter', refresh: false) + + expect(page).to have_selector(invite_modal_selector) + expect(page).to have_content("The member's email address has already been taken") + + page.refresh + + click_link 'Invited' + + page.within find_invited_member_row('test@example.com') do + expect(page).to have_button('Developer') + end + end + end + + context 'when inviting a parent group member to the sub-entity' do + before_all do + group.add_owner(user1) + group.add_developer(user2) + end + + context 'when role is higher than parent group membership' do + let(:role) { 'Maintainer' } + + it 'adds the user as a member on sub-entity with higher access level', :js do + visit subentity_members_page_path + + invite_member(user2.name, role: role, refresh: false) + + expect(page).not_to have_selector(invite_modal_selector) + + page.refresh + + page.within find_invited_member_row(user2.name) do + expect(page).to have_button(role) + end + end + end + + context 'when role is lower than parent group membership' do + let(:role) { 'Reporter' } + + it 'fails with an error', :js do + visit subentity_members_page_path + + invite_member(user2.name, role: role, refresh: false) + + expect(page).to have_selector(invite_modal_selector) + expect(page).to have_content "Access level should be greater than or equal to Developer inherited membership " \ + "from group #{group.name}" + + page.refresh + + page.within find_invited_member_row(user2.name) do + expect(page).to have_content('Developer') + expect(page).not_to have_button('Developer') + end + end + + context 'when there are multiple users invited with errors' do + let_it_be(:user3) { create(:user) } + + before do + group.add_maintainer(user3) + end + + it 'only shows the first user error', :js do + visit subentity_members_page_path + + invite_member([user2.name, user3.name], role: role, refresh: false) + + expect(page).to have_selector(invite_modal_selector) + expect(page).to have_text("Access level should be greater than or equal to", count: 1) + + page.refresh + + page.within find_invited_member_row(user2.name) do + expect(page).to have_content('Developer') + expect(page).not_to have_button('Developer') + end + + page.within find_invited_member_row(user3.name) do + expect(page).to have_content('Maintainer') + expect(page).not_to have_button('Maintainer') + end + end + end + end + end +end |