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:
parent
2d12e22299
commit
4df0e2599b
10 changed files with 101 additions and 19 deletions
|
@ -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'
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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),
|
||||
|
|
5
changelogs/unreleased/jp-label-fix.yml
Normal file
5
changelogs/unreleased/jp-label-fix.yml
Normal file
|
@ -0,0 +1,5 @@
|
|||
---
|
||||
title: Fix display of 'Promote to group label' button.
|
||||
merge_request:
|
||||
author:
|
||||
type: fixed
|
|
@ -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 ""
|
||||
|
||||
|
|
34
spec/features/projects/labels/user_promotes_label_spec.rb
Normal file
34
spec/features/projects/labels/user_promotes_label_spec.rb
Normal 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
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue