diff options
Diffstat (limited to 'spec/features/groups')
9 files changed, 265 insertions, 84 deletions
diff --git a/spec/features/groups/group_page_with_external_authorization_service_spec.rb b/spec/features/groups/group_page_with_external_authorization_service_spec.rb index 187d878472e..59a7feb813b 100644 --- a/spec/features/groups/group_page_with_external_authorization_service_spec.rb +++ b/spec/features/groups/group_page_with_external_authorization_service_spec.rb @@ -15,8 +15,7 @@ RSpec.describe 'The group page' do def expect_all_sidebar_links within('.nav-sidebar') do - expect(page).to have_link('Group overview') - expect(page).to have_link('Details') + expect(page).to have_link('Group information') expect(page).to have_link('Activity') expect(page).to have_link('Issues') expect(page).to have_link('Merge requests') @@ -44,8 +43,7 @@ RSpec.describe 'The group page' do visit group_path(group) within('.nav-sidebar') do - expect(page).to have_link('Group overview') - expect(page).to have_link('Details') + expect(page).to have_link('Group information') expect(page).not_to have_link('Activity') expect(page).not_to have_link('Contribution') diff --git a/spec/features/groups/issues_spec.rb b/spec/features/groups/issues_spec.rb index b0d2f90145f..21b39d2da46 100644 --- a/spec/features/groups/issues_spec.rb +++ b/spec/features/groups/issues_spec.rb @@ -217,7 +217,7 @@ RSpec.describe 'Group issues page' do it 'first pagination item is active' do page.within('.gl-pagination') do - expect(find('.active')).to have_content('1') + expect(find('li.active')).to have_content('1') end end end diff --git a/spec/features/groups/members/manage_groups_spec.rb b/spec/features/groups/members/manage_groups_spec.rb index e9bbe9de3c9..40cd54c1e33 100644 --- a/spec/features/groups/members/manage_groups_spec.rb +++ b/spec/features/groups/members/manage_groups_spec.rb @@ -5,6 +5,7 @@ require 'spec_helper' RSpec.describe 'Groups > Members > Manage groups', :js do include Select2Helper include Spec::Support::Helpers::Features::MembersHelpers + include Spec::Support::Helpers::Features::InviteMembersModalHelper let_it_be(:user) { create(:user) } @@ -12,18 +13,43 @@ RSpec.describe 'Groups > Members > Manage groups', :js do sign_in(user) end - context 'when group link does not exist' do - let_it_be(:group) { create(:group) } - let_it_be(:group_to_add) { create(:group) } - + context 'with invite_members_group_modal disabled' do before do stub_feature_flags(invite_members_group_modal: false) - group.add_owner(user) - visit group_group_members_path(group) end - it 'add group to group' do - add_group(group_to_add.id, 'Reporter') + context 'when group link does not exist' do + let_it_be(:group) { create(:group) } + let_it_be(:group_to_add) { create(:group) } + + before do + group.add_owner(user) + group_to_add.add_owner(user) + visit group_group_members_path(group) + end + + it 'can share group with group' do + add_group(group_to_add.id, 'Reporter') + + click_groups_tab + + page.within(first_row) do + expect(page).to have_content(group_to_add.name) + expect(page).to have_content('Reporter') + end + end + end + end + + context 'when group link does not exist' do + it 'can share a group with group' do + group = create(:group) + group_to_add = create(:group) + group.add_owner(user) + group_to_add.add_owner(user) + + visit group_group_members_path(group) + invite_group(group_to_add.name, role: 'Reporter') click_groups_tab diff --git a/spec/features/groups/members/manage_members_spec.rb b/spec/features/groups/members/manage_members_spec.rb index 3b637a10abe..c5e6479ec51 100644 --- a/spec/features/groups/members/manage_members_spec.rb +++ b/spec/features/groups/members/manage_members_spec.rb @@ -5,13 +5,13 @@ require 'spec_helper' RSpec.describe 'Groups > Members > Manage members' do include Select2Helper include Spec::Support::Helpers::Features::MembersHelpers + include Spec::Support::Helpers::Features::InviteMembersModalHelper let(:user1) { create(:user, name: 'John Doe') } let(:user2) { create(:user, name: 'Mary Jane') } let(:group) { create(:group) } before do - stub_feature_flags(invite_members_group_modal: false) sign_in(user1) end @@ -26,16 +26,28 @@ RSpec.describe 'Groups > Members > Manage members' do end end - context 'when Invite Members modal is enabled' do - before do - stub_feature_flags(invite_members_group_modal: true) + shared_examples 'does not include either invite modal or either invite form' do + it 'does not include either of the invite members or invite group modal buttons' do + expect(page).not_to have_selector '.js-invite-members-modal' + expect(page).not_to have_selector '.js-invite-group-modal' end + it 'does not include either of the invite users or invite group forms' do + expect(page).not_to have_selector '.invite-users-form' + expect(page).not_to have_selector '.invite-group-form' + end + end + + context 'when Invite Members modal is enabled' do it_behaves_like 'includes the correct Invite link', '.js-invite-members-trigger', '.invite-users-form' it_behaves_like 'includes the correct Invite link', '.js-invite-group-trigger', '.invite-group-form' end context 'when Invite Members modal is disabled' do + before do + stub_feature_flags(invite_members_group_modal: false) + end + it_behaves_like 'includes the correct Invite link', '.invite-users-form', '.js-invite-members-trigger' it_behaves_like 'includes the correct Invite link', '.invite-group-form', '.js-invite-group-trigger' end @@ -59,7 +71,7 @@ RSpec.describe 'Groups > Members > Manage members' do visit group_group_members_path(group) - add_user(user2.id, 'Reporter') + invite_member(user2.name, role: 'Reporter') page.within(second_row) do expect(page).to have_content(user2.name) @@ -73,21 +85,46 @@ RSpec.describe 'Groups > Members > Manage members' do visit group_group_members_path(group) - find('.select2-container').click - select_input = find('.select2-input') + click_on 'Invite members' + fill_in 'Select members or type email addresses', with: '@gitlab.com' - select_input.send_keys('@gitlab.com') wait_for_requests expect(page).to have_content('No matches found') - select_input.native.clear - select_input.send_keys('undisclosed_email@gitlab.com') + fill_in 'Select members or type email addresses', with: 'undisclosed_email@gitlab.com' wait_for_requests expect(page).to have_content("Jane 'invisible' Doe") end + context 'when Invite Members modal is disabled' do + before do + stub_feature_flags(invite_members_group_modal: false) + end + + it 'do not disclose email addresses', :js do + group.add_owner(user1) + create(:user, email: 'undisclosed_email@gitlab.com', name: "Jane 'invisible' Doe") + + visit group_group_members_path(group) + + find('.select2-container').click + select_input = find('.select2-input') + + select_input.send_keys('@gitlab.com') + wait_for_requests + + expect(page).to have_content('No matches found') + + select_input.native.clear + select_input.send_keys('undisclosed_email@gitlab.com') + wait_for_requests + + expect(page).to have_content("Jane 'invisible' Doe") + end + end + it 'remove user from group', :js do group.add_owner(user1) group.add_developer(user2) @@ -115,7 +152,7 @@ RSpec.describe 'Groups > Members > Manage members' do visit group_group_members_path(group) - add_user(user1.id, 'Reporter') + invite_member(user1.name, role: 'Reporter') page.within(first_row) do expect(page).to have_content(user1.name) @@ -128,7 +165,7 @@ RSpec.describe 'Groups > Members > Manage members' do visit group_group_members_path(group) - add_user('test@example.com', 'Reporter') + invite_member('test@example.com', role: 'Reporter') expect(page).to have_link 'Invited' click_link 'Invited' @@ -140,29 +177,46 @@ RSpec.describe 'Groups > Members > Manage members' do end end - it 'guest can not manage other users', :js do - group.add_guest(user1) - group.add_developer(user2) + context 'as a guest', :js do + before do + group.add_guest(user1) + group.add_developer(user2) - visit group_group_members_path(group) + visit group_group_members_path(group) + end - expect(page).not_to have_selector '.invite-users-form' - expect(page).not_to have_selector '.invite-group-form' + it_behaves_like 'does not include either invite modal or either invite form' - page.within(second_row) do - # Can not modify user2 role - expect(page).not_to have_button 'Developer' + it 'does not include a button on the members page list to manage or remove the existing member', :js do + page.within(second_row) do + # Can not modify user2 role + expect(page).not_to have_button 'Developer' - # Can not remove user2 - expect(page).not_to have_selector 'button[title="Remove member"]' + # Can not remove user2 + expect(page).not_to have_selector 'button[title="Remove member"]' + end end end - def add_user(id, role) - page.within ".invite-users-form" do - select2(id, from: "#user_ids", multiple: true) - select(role, from: "access_level") - click_button "Invite" + context 'As a guest when the :invite_members_group_modal feature flag is disabled', :js do + before do + stub_feature_flags(invite_members_group_modal: false) + group.add_guest(user1) + group.add_developer(user2) + + visit group_group_members_path(group) + end + + it_behaves_like 'does not include either invite modal or either invite form' + + it 'does not include a button on the members page list to manage or remove the existing member', :js do + page.within(second_row) do + # Can not modify user2 role + expect(page).not_to have_button 'Developer' + + # Can not remove user2 + expect(page).not_to have_selector 'button[title="Remove member"]' + end end end end diff --git a/spec/features/groups/members/master_adds_member_with_expiration_date_spec.rb b/spec/features/groups/members/master_adds_member_with_expiration_date_spec.rb index d31a7977f66..ddf3c6d8f9b 100644 --- a/spec/features/groups/members/master_adds_member_with_expiration_date_spec.rb +++ b/spec/features/groups/members/master_adds_member_with_expiration_date_spec.rb @@ -3,8 +3,8 @@ require 'spec_helper' RSpec.describe 'Groups > Members > Owner adds member with expiration date', :js do - include Select2Helper include Spec::Support::Helpers::Features::MembersHelpers + include Spec::Support::Helpers::Features::InviteMembersModalHelper let_it_be(:user1) { create(:user, name: 'John Doe') } let_it_be(:group) { create(:group) } @@ -12,7 +12,6 @@ RSpec.describe 'Groups > Members > Owner adds member with expiration date', :js let(:new_member) { create(:user, name: 'Mary Jane') } before do - stub_feature_flags(invite_members_group_modal: false) group.add_owner(user1) sign_in(user1) end @@ -20,14 +19,7 @@ RSpec.describe 'Groups > Members > Owner adds member with expiration date', :js it 'expiration date is displayed in the members list' do visit group_group_members_path(group) - page.within invite_users_form do - select2(new_member.id, from: '#user_ids', multiple: true) - - fill_in 'expires_at', with: 5.days.from_now.to_date - find_field('expires_at').native.send_keys :enter - - click_on 'Invite' - end + invite_member(new_member.name, role: 'Guest', expires_at: 5.days.from_now.to_date) page.within second_row do expect(page).to have_content(/in \d days/) diff --git a/spec/features/groups/milestone_spec.rb b/spec/features/groups/milestone_spec.rb index 1d9ac5ee1e9..c51ee250331 100644 --- a/spec/features/groups/milestone_spec.rb +++ b/spec/features/groups/milestone_spec.rb @@ -54,11 +54,11 @@ RSpec.describe 'Group milestones' do expect(find('.start_date')).to have_content(Date.today.at_beginning_of_month.strftime('%b %-d, %Y')) end - it 'description input does not support autocomplete' do + it 'description input support autocomplete' do description = find('.note-textarea') description.native.send_keys('!') - expect(page).not_to have_selector('.atwho-view') + expect(page).to have_selector('.atwho-view') end end diff --git a/spec/features/groups/milestones/gfm_autocomplete_spec.rb b/spec/features/groups/milestones/gfm_autocomplete_spec.rb new file mode 100644 index 00000000000..85a14123294 --- /dev/null +++ b/spec/features/groups/milestones/gfm_autocomplete_spec.rb @@ -0,0 +1,80 @@ +# frozen_string_literal: true + +require 'spec_helper' + +RSpec.describe 'GFM autocomplete', :js do + let_it_be(:user) { create(:user, name: '💃speciąl someone💃', username: 'someone.special') } + let_it_be(:group) { create(:group, name: 'Ancestor') } + let_it_be(:project) { create(:project, :repository, group: group) } + let_it_be(:issue) { create(:issue, project: project, assignees: [user], title: 'My special issue') } + let_it_be(:label) { create(:group_label, group: group, title: 'special+') } + let_it_be(:milestone) { create(:milestone, resource_parent: group, title: "group milestone") } + let_it_be(:merge_request) { create(:merge_request, source_project: project) } + + shared_examples 'displays autocomplete menu for all entities' do + it 'autocompletes all available entities' do + fill_in 'Description', with: User.reference_prefix + wait_for_requests + expect(find_autocomplete_menu).to be_visible + expect_autocomplete_entry(group.name) + + fill_in 'Description', with: Label.reference_prefix + wait_for_requests + expect(find_autocomplete_menu).to be_visible + expect_autocomplete_entry(label.title) + + fill_in 'Description', with: Milestone.reference_prefix + wait_for_requests + expect(find_autocomplete_menu).to be_visible + expect_autocomplete_entry(milestone.title) + + fill_in 'Description', with: Issue.reference_prefix + wait_for_requests + expect(find_autocomplete_menu).to be_visible + expect_autocomplete_entry(issue.title) + + fill_in 'Description', with: MergeRequest.reference_prefix + wait_for_requests + expect(find_autocomplete_menu).to be_visible + expect_autocomplete_entry(merge_request.title) + end + end + + before_all do + group.add_maintainer(user) + end + + describe 'new milestone page' do + before do + sign_in(user) + visit new_group_milestone_path(group) + + wait_for_requests + end + + it_behaves_like 'displays autocomplete menu for all entities' + end + + describe 'update milestone page' do + before do + sign_in(user) + visit edit_group_milestone_path(group, milestone) + + wait_for_requests + end + + it_behaves_like 'displays autocomplete menu for all entities' + end + + private + + def find_autocomplete_menu + find('.atwho-view ul', visible: true) + end + + def expect_autocomplete_entry(entry) + page.within('.atwho-container') do + expect(page).to have_content(entry) + end + end +end diff --git a/spec/features/groups/navbar_spec.rb b/spec/features/groups/navbar_spec.rb index 021b1af54d4..b46d4dae87a 100644 --- a/spec/features/groups/navbar_spec.rb +++ b/spec/features/groups/navbar_spec.rb @@ -13,21 +13,10 @@ RSpec.describe 'Group navbar' do let(:structure) do [ - { - nav_item: _('Group overview'), - nav_sub_items: [ - _('Details'), - _('Activity') - ] - }, + group_information_nav_item, { nav_item: _('Issues'), - nav_sub_items: [ - _('List'), - _('Board'), - _('Labels'), - _('Milestones') - ] + nav_sub_items: issues_nav_items }, { nav_item: _('Merge requests'), @@ -40,11 +29,12 @@ RSpec.describe 'Group navbar' do nav_sub_items: [] }, (analytics_nav_item if Gitlab.ee?), - { - nav_item: _('Members'), - nav_sub_items: [] - } - ] + members_nav_item + ].compact + end + + let(:members_nav_item) do + nil end before do @@ -87,4 +77,40 @@ RSpec.describe 'Group navbar' do it_behaves_like 'verified navigation bar' end + + context 'when feature flag :sidebar_refactor is disabled' do + let(:group_information_nav_item) do + { + nav_item: _('Group overview'), + nav_sub_items: [ + _('Details'), + _('Activity') + ] + } + end + + let(:members_nav_item) do + { + nav_item: _('Members'), + nav_sub_items: [] + } + end + + let(:issues_nav_items) do + [ + _('List'), + _('Board'), + _('Labels'), + _('Milestones') + ] + end + + before do + stub_feature_flags(sidebar_refactor: false) + + visit group_path(group) + end + + it_behaves_like 'verified navigation bar' + end end diff --git a/spec/features/groups/settings/packages_and_registries_spec.rb b/spec/features/groups/settings/packages_and_registries_spec.rb index 45ea77e3868..551a0bc5375 100644 --- a/spec/features/groups/settings/packages_and_registries_spec.rb +++ b/spec/features/groups/settings/packages_and_registries_spec.rb @@ -66,28 +66,31 @@ RSpec.describe 'Group Packages & Registries settings' do it 'automatically saves changes to the server', :js do visit_settings_page - expect(page).to have_content('Allow duplicates') + within '[data-testid="maven-settings"]' do + expect(page).to have_content('Allow duplicates') - find('.gl-toggle').click + find('.gl-toggle').click - expect(page).to have_content('Do not allow duplicates') + expect(page).to have_content('Do not allow duplicates') - visit_settings_page + visit_settings_page - expect(page).to have_content('Do not allow duplicates') + expect(page).to have_content('Do not allow duplicates') + end end it 'shows an error on wrong regex', :js do visit_settings_page - expect(page).to have_content('Allow duplicates') - - find('.gl-toggle').click + within '[data-testid="maven-settings"]' do + expect(page).to have_content('Allow duplicates') - expect(page).to have_content('Do not allow duplicates') + find('.gl-toggle').click - fill_in 'Exceptions', with: ')' + expect(page).to have_content('Do not allow duplicates') + fill_in 'Exceptions', with: ')' + end # simulate blur event find('body').click @@ -98,11 +101,13 @@ RSpec.describe 'Group Packages & Registries settings' do it 'works correctly', :js do visit_sub_group_settings_page - expect(page).to have_content('Allow duplicates') + within '[data-testid="maven-settings"]' do + expect(page).to have_content('Allow duplicates') - find('.gl-toggle').click + find('.gl-toggle').click - expect(page).to have_content('Do not allow duplicates') + expect(page).to have_content('Do not allow duplicates') + end end end end |