summaryrefslogtreecommitdiff
path: root/spec/features/projects/members/invite_group_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/features/projects/members/invite_group_spec.rb')
-rw-r--r--spec/features/projects/members/invite_group_spec.rb126
1 files changed, 94 insertions, 32 deletions
diff --git a/spec/features/projects/members/invite_group_spec.rb b/spec/features/projects/members/invite_group_spec.rb
index b674cad0312..066e0b0d20f 100644
--- a/spec/features/projects/members/invite_group_spec.rb
+++ b/spec/features/projects/members/invite_group_spec.rb
@@ -8,7 +8,7 @@ RSpec.describe 'Project > Members > Invite group', :js do
include Spec::Support::Helpers::Features::MembersHelpers
include Spec::Support::Helpers::Features::InviteMembersModalHelper
- let(:maintainer) { create(:user) }
+ let_it_be(:maintainer) { create(:user) }
using RSpec::Parameterized::TableSyntax
@@ -190,17 +190,26 @@ RSpec.describe 'Project > Members > Invite group', :js do
end
describe 'the groups dropdown' do
- context 'with multiple groups to choose from' do
- let(:project) { create(:project) }
+ let_it_be(:parent_group) { create(:group, :public) }
+ let_it_be(:project_group) { create(:group, :public, parent: parent_group) }
+ let_it_be(:public_sub_subgroup) { create(:group, :public, parent: project_group) }
+ let_it_be(:public_sibbling_group) { create(:group, :public, parent: parent_group) }
+ let_it_be(:private_sibbling_group) { create(:group, :private, parent: parent_group) }
+ let_it_be(:private_membership_group) { create(:group, :private) }
+ let_it_be(:public_membership_group) { create(:group, :public) }
+ let_it_be(:project) { create(:project, group: project_group) }
- it 'includes multiple groups' do
- project.add_maintainer(maintainer)
- sign_in(maintainer)
+ before do
+ private_membership_group.add_guest(maintainer)
+ public_membership_group.add_maintainer(maintainer)
+
+ sign_in(maintainer)
+ end
- group1 = create(:group)
- group1.add_owner(maintainer)
- group2 = create(:group)
- group2.add_owner(maintainer)
+ context 'for a project in a nested group' do
+ it 'does not show the groups inherited from projects' do
+ project.add_maintainer(maintainer)
+ public_sibbling_group.add_maintainer(maintainer)
visit project_project_members_path(project)
@@ -208,37 +217,90 @@ RSpec.describe 'Project > Members > Invite group', :js do
click_on 'Select a group'
wait_for_requests
- expect(page).to have_button(group1.name)
- expect(page).to have_button(group2.name)
- end
- end
-
- context 'for a project in a nested group' do
- let(:group) { create(:group) }
- let!(:nested_group) { create(:group, parent: group) }
- let!(:group_to_share_with) { create(:group) }
- let!(:project) { create(:project, namespace: nested_group) }
+ page.within('[data-testid="group-select-dropdown"]') do
+ expect_to_have_group(public_membership_group)
+ expect_to_have_group(public_sibbling_group)
+ expect_to_have_group(private_membership_group)
- before do
- project.add_maintainer(maintainer)
- sign_in(maintainer)
- group.add_maintainer(maintainer)
- group_to_share_with.add_maintainer(maintainer)
+ expect_not_to_have_group(public_sub_subgroup)
+ expect_not_to_have_group(private_sibbling_group)
+ expect_not_to_have_group(parent_group)
+ expect_not_to_have_group(project_group)
+ end
end
- # This behavior should be changed to exclude the ancestor and project
- # group from the options once issue is fixed for the modal:
- # https://gitlab.com/gitlab-org/gitlab/-/issues/329835
- it 'the groups dropdown does show ancestors and the project group' do
+ it 'does not show the ancestors or project group', :aggregate_failures do
+ parent_group.add_maintainer(maintainer)
+
visit project_project_members_path(project)
click_on 'Invite a group'
click_on 'Select a group'
wait_for_requests
- expect(page).to have_button(group_to_share_with.name)
- expect(page).to have_button(group.name)
- expect(page).to have_button(nested_group.name)
+ page.within('[data-testid="group-select-dropdown"]') do
+ expect_to_have_group(public_membership_group)
+ expect_to_have_group(public_sibbling_group)
+ expect_to_have_group(private_membership_group)
+ expect_to_have_group(public_sub_subgroup)
+ expect_to_have_group(private_sibbling_group)
+
+ expect_not_to_have_group(parent_group)
+ expect_not_to_have_group(project_group)
+ end
+ end
+
+ context 'when invite_members_group_modal feature disabled' do
+ let(:group_invite_dropdown) { find('#select2-results-2') }
+
+ before do
+ stub_feature_flags(invite_members_group_modal: false)
+ end
+
+ it 'does not show the groups inherited from projects', :aggregate_failures do
+ project.add_maintainer(maintainer)
+ public_sibbling_group.add_maintainer(maintainer)
+
+ visit project_project_members_path(project)
+
+ click_on 'Invite group'
+ click_on 'Search for a group'
+ wait_for_requests
+
+ expect(group_invite_dropdown).to have_text(public_membership_group.full_path)
+ expect(group_invite_dropdown).to have_text(public_sibbling_group.full_path)
+ expect(group_invite_dropdown).to have_text(private_membership_group.full_path)
+ expect(group_invite_dropdown).not_to have_text(public_sub_subgroup.full_path)
+ expect(group_invite_dropdown).not_to have_text(private_sibbling_group.full_path)
+ expect(group_invite_dropdown).not_to have_text(parent_group.full_path, exact: true)
+ expect(group_invite_dropdown).not_to have_text(project_group.full_path, exact: true)
+ end
+
+ it 'does not show the ancestors or project group', :aggregate_failures do
+ parent_group.add_maintainer(maintainer)
+
+ visit project_project_members_path(project)
+
+ click_on 'Invite group'
+ click_on 'Search for a group'
+ wait_for_requests
+
+ expect(group_invite_dropdown).to have_text(public_membership_group.full_path)
+ expect(group_invite_dropdown).to have_text(public_sub_subgroup.full_path)
+ expect(group_invite_dropdown).to have_text(public_sibbling_group.full_path)
+ expect(group_invite_dropdown).to have_text(private_sibbling_group.full_path)
+ expect(group_invite_dropdown).to have_text(private_membership_group.full_path)
+ expect(group_invite_dropdown).not_to have_text(parent_group.full_path, exact: true)
+ expect(group_invite_dropdown).not_to have_text(project_group.full_path, exact: true)
+ end
+ end
+
+ def expect_to_have_group(group)
+ expect(page).to have_selector("[entity-id='#{group.id}']")
+ end
+
+ def expect_not_to_have_group(group)
+ expect(page).not_to have_selector("[entity-id='#{group.id}']")
end
end
end