Use `class_names` in admin/account_moderation_notes helper (#30719)

main-rebase-security-fix
Matt Jankowski 2024-06-17 08:20:57 -04:00 committed by GitHub
parent 35d52d7914
commit d7b7617321
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 46 additions and 31 deletions

View File

@ -4,27 +4,42 @@ module Admin::AccountModerationNotesHelper
def admin_account_link_to(account, path: nil) def admin_account_link_to(account, path: nil)
return if account.nil? return if account.nil?
link_to path || admin_account_path(account.id), class: name_tag_classes(account), title: account.acct do link_to(
safe_join([ labeled_account_avatar(account),
image_tag(account.avatar.url, width: 15, height: 15, alt: '', class: 'avatar'), path || admin_account_path(account.id),
content_tag(:span, account.acct, class: 'username'), class: class_names('name-tag', suspended: suspended_account?(account)),
], ' ') title: account.acct
end )
end end
def admin_account_inline_link_to(account) def admin_account_inline_link_to(account)
return if account.nil? return if account.nil?
link_to admin_account_path(account.id), class: name_tag_classes(account, true), title: account.acct do link_to(
content_tag(:span, account.acct, class: 'username') account_inline_text(account),
end admin_account_path(account.id),
class: class_names('inline-name-tag', suspended: suspended_account?(account)),
title: account.acct
)
end end
private private
def name_tag_classes(account, inline = false) def labeled_account_avatar(account)
classes = [inline ? 'inline-name-tag' : 'name-tag'] safe_join(
classes << 'suspended' if account.suspended? || (account.local? && account.user.nil?) [
classes.join(' ') image_tag(account.avatar.url, width: 15, height: 15, alt: '', class: 'avatar'),
account_inline_text(account),
],
' '
)
end
def account_inline_text(account)
content_tag(:span, account.acct, class: 'username')
end
def suspended_account?(account)
account.suspended? || (account.local? && account.user.nil?)
end end
end end

View File

@ -6,50 +6,50 @@ RSpec.describe Admin::AccountModerationNotesHelper do
include AccountsHelper include AccountsHelper
describe '#admin_account_link_to' do describe '#admin_account_link_to' do
subject { helper.admin_account_link_to(account) }
context 'when Account is nil' do context 'when Account is nil' do
let(:account) { nil } let(:account) { nil }
it 'returns nil' do it 'returns nil' do
expect(helper.admin_account_link_to(account)).to be_nil expect(subject).to be_nil
end end
end end
context 'with account' do context 'with account' do
let(:account) { Fabricate(:account) } let(:account) { Fabricate(:account) }
it 'calls #link_to' do it 'returns a labeled avatar link to the account' do
allow(helper).to receive(:link_to) expect(parsed_html.a[:href]).to eq admin_account_path(account.id)
expect(parsed_html.a[:class]).to eq 'name-tag'
helper.admin_account_link_to(account) expect(parsed_html.a.span.text).to eq account.acct
expect(helper).to have_received(:link_to).with(
admin_account_path(account.id),
class: name_tag_classes(account),
title: account.acct
)
end end
end end
end end
describe '#admin_account_inline_link_to' do describe '#admin_account_inline_link_to' do
subject { helper.admin_account_inline_link_to(account) }
context 'when Account is nil' do context 'when Account is nil' do
let(:account) { nil } let(:account) { nil }
it 'returns nil' do it 'returns nil' do
expect(helper.admin_account_inline_link_to(account)).to be_nil expect(subject).to be_nil
end end
end end
context 'with account' do context 'with account' do
let(:account) { Fabricate(:account) } let(:account) { Fabricate(:account) }
it 'calls #link_to' do it 'returns an inline link to the account' do
result = helper.admin_account_inline_link_to(account) expect(parsed_html.a[:href]).to eq admin_account_path(account.id)
expect(parsed_html.a[:class]).to eq 'inline-name-tag'
expect(result).to match(name_tag_classes(account, true)) expect(parsed_html.a.span.text).to eq account.acct
expect(result).to match(account.acct)
expect(result).to match(admin_account_path(account.id))
end end
end end
end end
def parsed_html
Nokogiri::Slop(subject)
end
end end