Fix display of promote to group label

Since label presenter is used in label index view, label class
check doesn't work as expected because the class is now LabelPresenter.

Also `label.subject` doesn't work as expected now because Label's model
`subject` method is shadowed by Gitlab's presenter's method which uses
`subject` for referencing the original object.

Instead we use a presenter's method for both checks now.

`label_deletion_confirm_text` is not used anywhere so it's removed
This commit is contained in:
Jan Provaznik 2019-05-28 10:05:20 +00:00 committed by Lin Jen-Shin
parent 2d12e22299
commit 4df0e2599b
10 changed files with 101 additions and 19 deletions

View file

@ -5,7 +5,7 @@ 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 label.project_label?
return true unless project
project.feature_available?(issuables_type, current_user)
@ -159,13 +159,6 @@ module LabelsHelper
label.subscribed?(current_user, project) ? 'Unsubscribe' : 'Subscribe'
end
def label_deletion_confirm_text(label)
case label
when GroupLabel then _('Remove this label? This will affect all projects within the group. Are you sure?')
when ProjectLabel then _('Remove this label? Are you sure?')
end
end
def create_label_title(subject)
case subject
when Group
@ -200,7 +193,7 @@ module LabelsHelper
end
def label_status_tooltip(label, status)
type = label.is_a?(ProjectLabel) ? 'project' : 'group'
type = label.project_label? ? 'project' : 'group'
level = status.unsubscribed? ? type : status.sub('-level', '')
action = status.unsubscribed? ? 'Subscribe' : 'Unsubscribe'

View file

@ -35,6 +35,14 @@ class LabelPresenter < Gitlab::View::Presenter::Delegated
issuable_subject.is_a?(Project) && label.is_a?(GroupLabel)
end
def project_label?
label.is_a?(ProjectLabel)
end
def subject_name
label.subject.name
end
private
def context_subject

View file

@ -9,7 +9,7 @@
.modal-body
%p
%strong= label.name
%span will be permanently deleted from #{label.subject.name}. This cannot be undone.
%span will be permanently deleted from #{label.subject_name}. This cannot be undone.
.modal-footer
%a{ href: '#', data: { dismiss: 'modal' }, class: 'btn btn-default' } Cancel

View file

@ -30,7 +30,7 @@
= sprite_icon('ellipsis_v')
.dropdown-menu.dropdown-open-left
%ul
- if label.is_a?(ProjectLabel) && label.project.group && can?(current_user, :admin_label, label.project.group)
- if label.project_label? && label.project.group && can?(current_user, :admin_label, label.project.group)
%li
%button.js-promote-project-label-button.btn.btn-transparent.btn-action{ disabled: true, type: 'button',
data: { url: promote_project_label_path(label.project, label),

View file

@ -0,0 +1,5 @@
---
title: Fix display of 'Promote to group label' button.
merge_request:
author:
type: fixed

View file

@ -8112,12 +8112,6 @@ msgstr ""
msgid "Remove spent time"
msgstr ""
msgid "Remove this label? Are you sure?"
msgstr ""
msgid "Remove this label? This will affect all projects within the group. Are you sure?"
msgstr ""
msgid "Remove time estimate"
msgstr ""

View file

@ -0,0 +1,34 @@
# frozen_string_literal: true
require 'spec_helper'
describe 'User promotes label' do
set(:group) { create(:group) }
set(:user) { create(:user) }
set(:project) { create(:project, namespace: group) }
set(:label) { create(:label, project: project) }
context 'when user can admin group labels' do
before do
group.add_developer(user)
sign_in(user)
visit(project_labels_path(project))
end
it "shows label promote button" do
expect(page).to have_selector('.js-promote-project-label-button')
end
end
context 'when user cannot admin group labels' do
before do
project.add_developer(user)
sign_in(user)
visit(project_labels_path(project))
end
it "does not show label promote button" do
expect(page).not_to have_selector('.js-promote-project-label-button')
end
end
end

View file

@ -21,8 +21,11 @@ describe "User removes labels" do
page.first(".label-list-item") do
first('.js-label-options-dropdown').click
first(".remove-row").click
first(:link, "Delete label").click
end
expect(page).to have_content("#{label.title} will be permanently deleted from #{project.name}. This cannot be undone.")
first(:link, "Delete label").click
end
expect(page).to have_content("Label was removed").and have_no_content(label.title)

View file

@ -6,7 +6,7 @@ describe LabelsHelper do
let(:context_project) { project }
context "when asking for a #{issuables_type} link" do
subject { show_label_issuables_link?(label, issuables_type, project: context_project) }
subject { show_label_issuables_link?(label.present(issuable_subject: nil), 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) }
@ -279,4 +279,21 @@ describe LabelsHelper do
expect(label.color).to eq('bar')
end
end
describe '#label_status_tooltip' do
let(:status) { 'unsubscribed'.inquiry }
subject { label_status_tooltip(label.present(issuable_subject: nil), status) }
context 'with a project label' do
let(:label) { create(:label, title: 'bug') }
it { is_expected.to eq('Subscribe at project level') }
end
context 'with a group label' do
let(:label) { create(:group_label, title: 'bug') }
it { is_expected.to eq('Subscribe at group level') }
end
end
end

View file

@ -62,4 +62,32 @@ describe LabelPresenter do
expect(label.can_subscribe_to_label_in_different_levels?).to be_falsey
end
end
describe '#project_label?' do
context 'with group label' do
subject { group_label.project_label? }
it { is_expected.to be_falsey }
end
context 'with project label' do
subject { label.project_label? }
it { is_expected.to be_truthy }
end
end
describe '#subject_name' do
context 'with group label' do
subject { group_label.subject_name }
it { is_expected.to eq(group_label.group.name) }
end
context 'with project label' do
subject { label.subject_name }
it { is_expected.to eq(label.project.name) }
end
end
end