diff --git a/app/helpers/sidebars_helper.rb b/app/helpers/sidebars_helper.rb index 0d4dd17895ccd348051f973114ebd4f410481566..37152fba98e65284853b2a021aec4b92db20773c 100644 --- a/app/helpers/sidebars_helper.rb +++ b/app/helpers/sidebars_helper.rb @@ -106,7 +106,7 @@ def super_sidebar_logged_in_context(user, group:, project:, panel:, panel_type:) gitlab_com_and_canary: Gitlab.com_and_canary?, canary_toggle_com_url: Gitlab::Saas.canary_toggle_com_url, current_context: super_sidebar_current_context(project: project, group: group), - pinned_items: user.pinned_nav_items[panel_type] || super_sidebar_default_pins(panel_type, user), + pinned_items: pinned_items(user, panel_type, group: group), update_pins_url: pins_path, is_impersonating: impersonating?, stop_impersonation_path: admin_impersonation_path, @@ -433,6 +433,14 @@ def shortcut_links(user: nil, project: nil) shortcut_links end + # overridden on EE + # rubocop:disable Lint/UnusedMethodArgument -- group is used on EE + def pinned_items(user, panel_type, group: nil) + user.pinned_nav_items[panel_type]&.map(&:to_s) || + super_sidebar_default_pins(panel_type, user) + end + # rubocop:enable Lint/UnusedMethodArgument + def super_sidebar_default_pins(panel_type, user) case panel_type when 'project' @@ -445,11 +453,11 @@ def super_sidebar_default_pins(panel_type, user) end def project_default_pins(_user) - [:project_issue_list, :project_merge_request_list] + %w[project_issue_list project_merge_request_list] end def group_default_pins(_user) - [:group_issue_list, :group_merge_request_list] + %w[group_issue_list group_merge_request_list] end def terms_link diff --git a/ee/app/helpers/ee/sidebars_helper.rb b/ee/app/helpers/ee/sidebars_helper.rb index c767fec38a69e73b714814b0cd5ffd8f48d5d534..53469e2a4a9fa3ba3094c430195ec7b48472c162 100644 --- a/ee/app/helpers/ee/sidebars_helper.rb +++ b/ee/app/helpers/ee/sidebars_helper.rb @@ -97,18 +97,33 @@ def user_in_experiment(user) end end + # Avoid duplicating "Work Items" on the frontend now that + # :group_issue_list and :group_epic_list are translated in the frontend. + override :pinned_items + def pinned_items(user, panel_type, group: nil) + items = super + + return items unless group&.work_items_consolidated_list_enabled? + + if items.include?("group_issue_list") && items.include?("group_epic_list") + items.excluding("group_epic_list") + else + items + end + end + override :project_default_pins def project_default_pins(user) return super unless user_in_experiment(user) - %i[files pipelines members project_merge_request_list project_issue_list] + %w[files pipelines members project_merge_request_list project_issue_list] end override :group_default_pins def group_default_pins(user) - return super + [:group_epic_list] unless user_in_experiment(user) + return super + %w[group_epic_list] unless user_in_experiment(user) - %i[members group_issue_list group_merge_request_list group_epic_list] + %w[members group_issue_list group_merge_request_list group_epic_list] end end end diff --git a/ee/spec/features/nav/pinned_nav_items_spec.rb b/ee/spec/features/nav/pinned_nav_items_spec.rb index eb7ce7a49ad9c950fad2ac9de3f37f0ca918cf0a..b9c39541e4ef36605c5ae5e96a6d3c45aba01bc0 100644 --- a/ee/spec/features/nav/pinned_nav_items_spec.rb +++ b/ee/spec/features/nav/pinned_nav_items_spec.rb @@ -29,7 +29,7 @@ visit group_path(group) within_testid 'pinned-nav-items' do - nav_ids = %i[members group_issue_list group_merge_request_list group_epic_list] + nav_ids = %i[members group_issue_list group_merge_request_list] nav_ids.each { |nav_id| expect(page).to have_css("a[data-track-label='#{nav_id}']") } end end @@ -39,7 +39,7 @@ visit group_path(group) within_testid 'pinned-nav-items' do - nav_ids = %i[group_issue_list group_merge_request_list group_epic_list] + nav_ids = %i[group_issue_list group_merge_request_list] nav_ids.each { |nav_id| expect(page).to have_css("a[data-track-label='#{nav_id}']") } end end diff --git a/ee/spec/helpers/ee/sidebars_helper_spec.rb b/ee/spec/helpers/ee/sidebars_helper_spec.rb index 5166db7dc0679d1ae12f962cca17f2c315e0e946..0b5476ef9fdbccd9f322627d24a03bfcab69b3d7 100644 --- a/ee/spec/helpers/ee/sidebars_helper_spec.rb +++ b/ee/spec/helpers/ee/sidebars_helper_spec.rb @@ -6,6 +6,7 @@ include Devise::Test::ControllerHelpers describe '#super_sidebar_context' do + let(:group) { build_stubbed(:group) } let(:user_namespace) { build_stubbed(:namespace) } let(:user) { build_stubbed(:user, namespace: user_namespace) } let(:panel) { {} } @@ -305,8 +306,65 @@ end end + context 'when user pinned multiple work items types' do + using RSpec::Parameterized::TableSyntax + + let_it_be(:panel_type) { 'group' } + + context 'when work_item_planning_view feature flag is disabled' do + it 'ensure permits epics and issues on the side menu' do + stub_feature_flags(work_item_planning_view: false) + + pinned_items = %w[group_issue_list group_epic_list] + + user = build_stubbed( + :user, + namespace: user_namespace, + pinned_nav_items: { panel_type => pinned_items } + ) + + sidebar = helper.super_sidebar_logged_in_context( + user, + group: group, + project: nil, + panel: panel, + panel_type: panel_type + ) + + expect(sidebar[:pinned_items]).to eq(pinned_items) + end + end + + where(:pinned_items, :result) do + nil | %w[group_issue_list group_merge_request_list] + %w[group_issue_list] | %w[group_issue_list] + %w[group_epic_list] | %w[group_epic_list] + %w[group_issue_list group_epic_list] | %w[group_issue_list] + end + + with_them do + it 'ensure to avoid duplicated work items on pinned menu' do + user = build_stubbed( + :user, + namespace: user_namespace, + pinned_nav_items: { panel_type => pinned_items } + ) + + sidebar = helper.super_sidebar_logged_in_context( + user, + group: group, + project: nil, + panel: panel, + panel_type: panel_type + ) + + expect(sidebar[:pinned_items]).to eq(result) + end + end + end + describe '#super_sidebar_default_pins', :experiment do - let_it_be(:user) do + let(:user) do build(:user) do |u| u.user_detail.update!(onboarding_status: { registration_type: 'trial', @@ -325,10 +383,10 @@ it 'returns "group" default pins' do panel_type = 'group' - result = helper.super_sidebar_logged_in_context(user, group: nil, project: nil, panel: panel, + result = helper.super_sidebar_logged_in_context(user, group: group, project: nil, panel: panel, panel_type: panel_type) - expect(result).to include(pinned_items: %i[group_issue_list group_merge_request_list group_epic_list]) + expect(result).to include(pinned_items: %w[group_issue_list group_merge_request_list]) end it 'returns "project" default pins' do @@ -337,7 +395,7 @@ result = helper.super_sidebar_logged_in_context(user, group: nil, project: nil, panel: panel, panel_type: panel_type) - expect(result).to include(pinned_items: %i[project_issue_list project_merge_request_list]) + expect(result).to include(pinned_items: %w[project_issue_list project_merge_request_list]) end end @@ -351,10 +409,10 @@ it 'returns "group" default pins' do panel_type = 'group' - result = helper.super_sidebar_logged_in_context(user, group: nil, project: nil, panel: panel, + result = helper.super_sidebar_logged_in_context(user, group: group, project: nil, panel: panel, panel_type: panel_type) - expect(result).to include(pinned_items: %i[members group_issue_list group_merge_request_list group_epic_list]) + expect(result).to include(pinned_items: %w[members group_issue_list group_merge_request_list]) end it 'returns "project" default pins' do @@ -363,7 +421,7 @@ result = helper.super_sidebar_logged_in_context(user, group: nil, project: nil, panel: panel, panel_type: panel_type) - expect(result).to include(pinned_items: %i[files pipelines members project_merge_request_list + expect(result).to include(pinned_items: %w[files pipelines members project_merge_request_list project_issue_list]) end end @@ -386,10 +444,10 @@ it 'returns control "group" pins' do panel_type = 'group' - result = helper.super_sidebar_logged_in_context(user, group: nil, project: nil, panel: panel, + result = helper.super_sidebar_logged_in_context(user, group: group, project: nil, panel: panel, panel_type: panel_type) - expect(result).to include(pinned_items: %i[group_issue_list group_merge_request_list group_epic_list]) + expect(result).to include(pinned_items: %w[group_issue_list group_merge_request_list]) end it 'returns control "project" pins' do @@ -398,7 +456,7 @@ result = helper.super_sidebar_logged_in_context(user, group: nil, project: nil, panel: panel, panel_type: panel_type) - expect(result).to include(pinned_items: %i[project_issue_list project_merge_request_list]) + expect(result).to include(pinned_items: %w[project_issue_list project_merge_request_list]) end end end