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)
return if account.nil?
link_to path || admin_account_path(account.id), class: name_tag_classes(account), title: account.acct do
safe_join([
image_tag(account.avatar.url, width: 15, height: 15, alt: '', class: 'avatar'),
content_tag(:span, account.acct, class: 'username'),
], ' ')
end
link_to(
labeled_account_avatar(account),
path || admin_account_path(account.id),
class: class_names('name-tag', suspended: suspended_account?(account)),
title: account.acct
)
end
def admin_account_inline_link_to(account)
return if account.nil?
link_to admin_account_path(account.id), class: name_tag_classes(account, true), title: account.acct do
content_tag(:span, account.acct, class: 'username')
end
link_to(
account_inline_text(account),
admin_account_path(account.id),
class: class_names('inline-name-tag', suspended: suspended_account?(account)),
title: account.acct
)
end
private
def name_tag_classes(account, inline = false)
classes = [inline ? 'inline-name-tag' : 'name-tag']
classes << 'suspended' if account.suspended? || (account.local? && account.user.nil?)
classes.join(' ')
def labeled_account_avatar(account)
safe_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

View File

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