From 7ccd6a51a529452cdbd1d39121b067b773fcb170 Mon Sep 17 00:00:00 2001 From: Sophie Herold Date: Thu, 30 Mar 2017 10:39:02 +0000 Subject: Hide issues and MRs in labels list if disabled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rémy Coutable --- app/helpers/labels_helper.rb | 7 ++ app/views/shared/_label.html.haml | 26 +++++--- .../unreleased/sophie-h-gitlab-ce-patch-15.yml | 5 ++ .../groups/labels/user_sees_links_to_issuables.rb | 15 +++++ .../labels/user_sees_links_to_issuables.rb | 75 ++++++++++++++++++++++ spec/helpers/labels_helper_spec.rb | 63 ++++++++++++++++++ 6 files changed, 181 insertions(+), 10 deletions(-) create mode 100644 changelogs/unreleased/sophie-h-gitlab-ce-patch-15.yml create mode 100644 spec/features/groups/labels/user_sees_links_to_issuables.rb create mode 100644 spec/features/projects/labels/user_sees_links_to_issuables.rb diff --git a/app/helpers/labels_helper.rb b/app/helpers/labels_helper.rb index e1ba7898ee6..c1c19062c91 100644 --- a/app/helpers/labels_helper.rb +++ b/app/helpers/labels_helper.rb @@ -1,6 +1,13 @@ module LabelsHelper include ActionView::Helpers::TagHelper + def show_label_issuables_link?(label, issuables_type, current_user: nil, project: nil) + return true if label.is_a?(GroupLabel) + return true unless project + + project.feature_available?(issuables_type, current_user) + end + # Link to a Label # # label - Label object to link to diff --git a/app/views/shared/_label.html.haml b/app/views/shared/_label.html.haml index 3fcc33044e9..4bdfeb99591 100644 --- a/app/views/shared/_label.html.haml +++ b/app/views/shared/_label.html.haml @@ -2,6 +2,8 @@ - status = label_subscription_status(label, @project).inquiry if current_user - subject = local_assigns[:subject] - toggle_subscription_path = toggle_subscription_label_path(label, @project) if current_user +- show_label_merge_requests_link = show_label_issuables_link?(label, :merge_requests, project: @project) +- show_label_issues_link = show_label_issuables_link?(label, :issues, project: @project) %li{ id: label_css_id, data: { id: label.id } } = render "shared/label_row", label: label @@ -12,12 +14,14 @@ = icon('caret-down') .dropdown-menu.dropdown-menu-align-right %ul - %li - = link_to_label(label, subject: subject, type: :merge_request) do - View merge requests - %li - = link_to_label(label, subject: subject) do - View open issues + - if show_label_merge_requests_link + %li + = link_to_label(label, subject: subject, type: :merge_request) do + View merge requests + - if show_label_issues_link + %li + = link_to_label(label, subject: subject) do + View open issues - if current_user %li.label-subscription - if can_subscribe_to_label_in_different_levels?(label) @@ -38,10 +42,12 @@ = link_to 'Delete', destroy_label_path(label), title: 'Delete', method: :delete, data: {confirm: 'Remove this label? Are you sure?'} .pull-right.hidden-xs.hidden-sm.hidden-md - = link_to_label(label, subject: subject, type: :merge_request, css_class: 'btn btn-transparent btn-action btn-link') do - view merge requests - = link_to_label(label, subject: subject, css_class: 'btn btn-transparent btn-action btn-link') do - view open issues + - if show_label_merge_requests_link + = link_to_label(label, subject: subject, type: :merge_request, css_class: 'btn btn-transparent btn-action btn-link') do + view merge requests + - if show_label_issues_link + = link_to_label(label, subject: subject, css_class: 'btn btn-transparent btn-action btn-link') do + view open issues - if current_user .label-subscription.inline diff --git a/changelogs/unreleased/sophie-h-gitlab-ce-patch-15.yml b/changelogs/unreleased/sophie-h-gitlab-ce-patch-15.yml new file mode 100644 index 00000000000..b5e3210c737 --- /dev/null +++ b/changelogs/unreleased/sophie-h-gitlab-ce-patch-15.yml @@ -0,0 +1,5 @@ +--- +title: Hide link to issues/MRs from labels list if issues/MRs are disabled. +merge_request: 15863 +author: Sophie Herold +type: fixed diff --git a/spec/features/groups/labels/user_sees_links_to_issuables.rb b/spec/features/groups/labels/user_sees_links_to_issuables.rb new file mode 100644 index 00000000000..5d6290d2109 --- /dev/null +++ b/spec/features/groups/labels/user_sees_links_to_issuables.rb @@ -0,0 +1,15 @@ +require 'spec_helper' + +feature 'Groups > Labels > User sees links to issuables' do + set(:group) { create(:group, :public) } + + before do + create(:group_label, group: group, title: 'bug') + visit group_labels_path(group) + end + + scenario 'shows links to MRs and issues' do + expect(page).to have_link('view merge requests') + expect(page).to have_link('view open issues') + end +end diff --git a/spec/features/projects/labels/user_sees_links_to_issuables.rb b/spec/features/projects/labels/user_sees_links_to_issuables.rb new file mode 100644 index 00000000000..aa56fd7f74e --- /dev/null +++ b/spec/features/projects/labels/user_sees_links_to_issuables.rb @@ -0,0 +1,75 @@ +require 'spec_helper' + +feature 'Projects > Labels > User sees links to issuables' do + set(:user) { create(:user) } + + before do + label # creates the label + project.add_developer(user) + sign_in user + visit project_labels_path(project) + end + + context 'with a project label' do + let(:label) { create(:label, project: project, title: 'bug') } + + context 'when merge requests and issues are enabled for the project' do + let(:project) { create(:project, :public) } + + scenario 'shows links to MRs and issues' do + expect(page).to have_link('view merge requests') + expect(page).to have_link('view open issues') + end + end + + context 'when issues are disabled for the project' do + let(:project) { create(:project, :public, issues_access_level: ProjectFeature::DISABLED) } + + scenario 'shows links to MRs but not to issues' do + expect(page).to have_link('view merge requests') + expect(page).not_to have_link('view open issues') + end + end + + context 'when merge requests are disabled for the project' do + let(:project) { create(:project, :public, merge_requests_access_level: ProjectFeature::DISABLED) } + + scenario 'shows links to issues but not to MRs' do + expect(page).not_to have_link('view merge requests') + expect(page).to have_link('view open issues') + end + end + end + + context 'with a group label' do + set(:group) { create(:group) } + let(:label) { create(:group_label, group: group, title: 'bug') } + + context 'when merge requests and issues are enabled for the project' do + let(:project) { create(:project, :public, namespace: group) } + + scenario 'shows links to MRs and issues' do + expect(page).to have_link('view merge requests') + expect(page).to have_link('view open issues') + end + end + + context 'when issues are disabled for the project' do + let(:project) { create(:project, :public, namespace: group, issues_access_level: ProjectFeature::DISABLED) } + + scenario 'shows links to MRs and issues' do + expect(page).to have_link('view merge requests') + expect(page).to have_link('view open issues') + end + end + + context 'when merge requests are disabled for the project' do + let(:project) { create(:project, :public, namespace: group, merge_requests_access_level: ProjectFeature::DISABLED) } + + scenario 'shows links to MRs and issues' do + expect(page).to have_link('view merge requests') + expect(page).to have_link('view open issues') + end + end + end +end diff --git a/spec/helpers/labels_helper_spec.rb b/spec/helpers/labels_helper_spec.rb index 4ac4302adfd..0286d36952c 100644 --- a/spec/helpers/labels_helper_spec.rb +++ b/spec/helpers/labels_helper_spec.rb @@ -1,6 +1,69 @@ require 'spec_helper' describe LabelsHelper do + describe '#show_label_issuables_link?' do + shared_examples 'a valid response to show_label_issuables_link?' do |issuables_type, when_enabled = true, when_disabled = false| + let(:context_project) { project } + + context "when asking for a #{issuables_type} link" do + subject { show_label_issuables_link?(label, issuables_type, project: context_project) } + + context "when #{issuables_type} are enabled for the project" do + let(:project) { create(:project, "#{issuables_type}_access_level": ProjectFeature::ENABLED) } + + it { is_expected.to be(when_enabled) } + end + + context "when #{issuables_type} are disabled for the project" do + let(:project) { create(:project, :public, "#{issuables_type}_access_level": ProjectFeature::DISABLED) } + + it { is_expected.to be(when_disabled) } + end + end + end + + context 'with a project label' do + let(:label) { create(:label, project: project, title: 'bug') } + + context 'when asking for an issue link' do + it_behaves_like 'a valid response to show_label_issuables_link?', :issues + end + + context 'when asking for a merge requests link' do + it_behaves_like 'a valid response to show_label_issuables_link?', :merge_requests + end + end + + context 'with a group label' do + set(:group) { create(:group) } + let(:label) { create(:group_label, group: group, title: 'bug') } + + context 'when asking for an issue link' do + context 'in the context of a project' do + it_behaves_like 'a valid response to show_label_issuables_link?', :issues, true, true + end + + context 'in the context of a group' do + let(:context_project) { nil } + + it_behaves_like 'a valid response to show_label_issuables_link?', :issues, true, true + end + end + + context 'when asking for a merge requests link' do + context 'in the context of a project' do + it_behaves_like 'a valid response to show_label_issuables_link?', :merge_requests, true, true + end + + context 'in the context of a group' do + let(:context_project) { nil } + + it_behaves_like 'a valid response to show_label_issuables_link?', :merge_requests, true, true + end + end + end + end + describe 'link_to_label' do let(:project) { create(:project) } let(:label) { create(:label, project: project) } -- cgit v1.2.1