From 3e25fb46921ba3e24690087f5d7dd415bb8cd18c Mon Sep 17 00:00:00 2001 From: rpereira2 <rpereira@gitlab.com> Date: Tue, 19 May 2020 19:05:25 +0530 Subject: [PATCH] Change condition to display Metrics tab in sidebar Display the metrics tab in the sidebar when the user has the metrics_dashboard permission. --- app/helpers/projects_helper.rb | 35 +++++++++++-------- .../layouts/nav/sidebar/_project.html.haml | 2 +- spec/helpers/projects_helper_spec.rb | 20 +++++++++++ 3 files changed, 42 insertions(+), 15 deletions(-) diff --git a/app/helpers/projects_helper.rb b/app/helpers/projects_helper.rb index d743ea6aeea9..79546212bccc 100644 --- a/app/helpers/projects_helper.rb +++ b/app/helpers/projects_helper.rb @@ -410,7 +410,7 @@ def get_project_nav_tabs(project, current_user) nav_tabs << :pipelines end - if can?(current_user, :read_environment, project) || can?(current_user, :read_cluster, project) + if can_view_operations_tab?(current_user, project) nav_tabs << :operations end @@ -438,22 +438,29 @@ def external_nav_tabs(project) def tab_ability_map { - environments: :read_environment, - milestones: :read_milestone, - snippets: :read_snippet, - settings: :admin_project, - builds: :read_build, - clusters: :read_cluster, - serverless: :read_cluster, - error_tracking: :read_sentry_issue, - alert_management: :read_alert_management_alert, - labels: :read_label, - issues: :read_issue, - project_members: :read_project_member, - wiki: :read_wiki + environments: :read_environment, + metrics_dashboards: :metrics_dashboard, + milestones: :read_milestone, + snippets: :read_snippet, + settings: :admin_project, + builds: :read_build, + clusters: :read_cluster, + serverless: :read_cluster, + error_tracking: :read_sentry_issue, + alert_management: :read_alert_management_alert, + labels: :read_label, + issues: :read_issue, + project_members: :read_project_member, + wiki: :read_wiki } end + def can_view_operations_tab?(current_user, project) + [:read_environment, :read_cluster, :metrics_dashboard].any? do |ability| + can?(current_user, ability, project) + end + end + def search_tab_ability_map @search_tab_ability_map ||= tab_ability_map.merge( blobs: :download_code, diff --git a/app/views/layouts/nav/sidebar/_project.html.haml b/app/views/layouts/nav/sidebar/_project.html.haml index a67860e8e2eb..c738493507f4 100644 --- a/app/views/layouts/nav/sidebar/_project.html.haml +++ b/app/views/layouts/nav/sidebar/_project.html.haml @@ -216,7 +216,7 @@ = _('Operations') %li.divider.fly-out-top-item - - if project_nav_tab? :environments + - if project_nav_tab? :metrics_dashboards = nav_link(controller: :environments, action: [:metrics, :metrics_redirect]) do = link_to metrics_project_environments_path(@project), title: _('Metrics'), class: 'shortcuts-metrics', data: { qa_selector: 'operations_metrics_link' } do %span diff --git a/spec/helpers/projects_helper_spec.rb b/spec/helpers/projects_helper_spec.rb index 189ab1a8354f..27dc8707bd8a 100644 --- a/spec/helpers/projects_helper_spec.rb +++ b/spec/helpers/projects_helper_spec.rb @@ -5,6 +5,9 @@ describe ProjectsHelper do include ProjectForksHelper + let_it_be(:project) { create(:project) } + let_it_be(:user) { create(:user) } + describe '#project_incident_management_setting' do let(:project) { create(:project) } @@ -500,6 +503,23 @@ end end + describe '#can_view_operations_tab?' do + before do + allow(helper).to receive(:current_user).and_return(user) + end + + subject { helper.send(:can_view_operations_tab?, user, project) } + + [:read_environment, :read_cluster, :metrics_dashboard].each do |ability| + it 'includes operations tab' do + allow(helper).to receive(:can?).and_return(false) + allow(helper).to receive(:can?).with(user, ability, project).and_return(true) + + is_expected.to be(true) + end + end + end + describe '#show_projects' do let(:projects) do create(:project) -- GitLab