Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/features/groups')
-rw-r--r--spec/features/groups/group_page_with_external_authorization_service_spec.rb6
-rw-r--r--spec/features/groups/issues_spec.rb2
-rw-r--r--spec/features/groups/members/manage_groups_spec.rb42
-rw-r--r--spec/features/groups/members/manage_members_spec.rb110
-rw-r--r--spec/features/groups/members/master_adds_member_with_expiration_date_spec.rb12
-rw-r--r--spec/features/groups/milestone_spec.rb4
-rw-r--r--spec/features/groups/milestones/gfm_autocomplete_spec.rb80
-rw-r--r--spec/features/groups/navbar_spec.rb62
-rw-r--r--spec/features/groups/settings/packages_and_registries_spec.rb31
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