From d7b76173219d88d5ad52097ecb4bf6abbd59b24a Mon Sep 17 00:00:00 2001 From: Matt Jankowski Date: Mon, 17 Jun 2024 08:20:57 -0400 Subject: [PATCH] Use `class_names` in admin/account_moderation_notes helper (#30719) --- .../admin/account_moderation_notes_helper.rb | 41 +++++++++++++------ .../account_moderation_notes_helper_spec.rb | 36 ++++++++-------- 2 files changed, 46 insertions(+), 31 deletions(-) diff --git a/app/helpers/admin/account_moderation_notes_helper.rb b/app/helpers/admin/account_moderation_notes_helper.rb index 3b9d580499..2a3d954a35 100644 --- a/app/helpers/admin/account_moderation_notes_helper.rb +++ b/app/helpers/admin/account_moderation_notes_helper.rb @@ -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 diff --git a/spec/helpers/admin/account_moderation_notes_helper_spec.rb b/spec/helpers/admin/account_moderation_notes_helper_spec.rb index 91bf4ab6fe..d8fc0ee233 100644 --- a/spec/helpers/admin/account_moderation_notes_helper_spec.rb +++ b/spec/helpers/admin/account_moderation_notes_helper_spec.rb @@ -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) - - expect(result).to match(name_tag_classes(account, true)) - expect(result).to match(account.acct) - expect(result).to match(admin_account_path(account.id)) + 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 + + def parsed_html + Nokogiri::Slop(subject) + end end