Use consistent calling style for TagManager#normalize_domain

This commit is contained in:
Matt Jankowski 2025-08-13 08:47:30 -04:00
parent 25f1a515f8
commit fd41b20006
9 changed files with 54 additions and 20 deletions

View File

@ -54,7 +54,7 @@ module Admin
end end
# Allow transparently upgrading a domain block # Allow transparently upgrading a domain block
if existing_domain_block.present? && existing_domain_block.domain == TagManager.instance.normalize_domain(@domain_block.domain.strip) if existing_domain_block.present? && existing_domain_block.domain == TagManager.instance.normalize_domain(@domain_block.domain)
@domain_block = existing_domain_block @domain_block = existing_domain_block
@domain_block.assign_attributes(resource_params) @domain_block.assign_attributes(resource_params)
end end

View File

@ -34,8 +34,11 @@ class Admin::Instances::ModerationNotesController < Admin::BaseController
end end
def set_instance def set_instance
domain = params[:instance_id]&.strip @instance = Instance.find_or_initialize_by(domain: normalized_domain)
@instance = Instance.find_or_initialize_by(domain: TagManager.instance.normalize_domain(domain)) end
def normalized_domain
TagManager.instance.normalize_domain(params[:instance_id])
end end
def set_instance_note def set_instance_note

View File

@ -55,8 +55,11 @@ module Admin
private private
def set_instance def set_instance
domain = params[:id]&.strip @instance = Instance.find_or_initialize_by(domain: normalized_domain)
@instance = Instance.find_or_initialize_by(domain: TagManager.instance.normalize_domain(domain)) end
def normalized_domain
TagManager.instance.normalize_domain(params[:id])
end end
def set_instances def set_instances

View File

@ -47,10 +47,6 @@ class Api::V1::Peers::SearchController < Api::BaseController
end end
def normalized_domain def normalized_domain
TagManager.instance.normalize_domain(query_value) TagManager.instance.normalize_domain(params[:q])
end
def query_value
params[:q].strip
end end
end end

View File

@ -17,9 +17,9 @@ class TagManager
def normalize_domain(domain) def normalize_domain(domain)
return if domain.nil? return if domain.nil?
uri = Addressable::URI.new Addressable::URI.new.tap do |uri|
uri.host = domain.delete_suffix('/') uri.host = domain.strip.delete_suffix('/')
uri.normalized_host end.normalized_host
end end
def local_url?(url) def local_url?(url)

View File

@ -22,7 +22,7 @@ module DomainNormalizable
private private
def normalize_domain def normalize_domain
self.domain = TagManager.instance.normalize_domain(domain&.strip) self.domain = TagManager.instance.normalize_domain(domain)
rescue Addressable::URI::InvalidURIError rescue Addressable::URI::InvalidURIError
errors.add(:domain, :invalid) errors.add(:domain, :invalid)
end end

View File

@ -75,7 +75,7 @@ class ReportService < BaseService
end end
def forward_to_domains def forward_to_domains
@forward_to_domains ||= (@options[:forward_to_domains] || [@target_account.domain]).filter_map { |domain| TagManager.instance.normalize_domain(domain&.strip) }.uniq @forward_to_domains ||= (@options[:forward_to_domains] || [@target_account.domain]).filter_map { |domain| TagManager.instance.normalize_domain(domain) }.uniq
end end
def reported_status_ids def reported_status_ids

View File

@ -54,12 +54,44 @@ RSpec.describe TagManager do
end end
describe '#normalize_domain' do describe '#normalize_domain' do
it 'returns nil if the given parameter is nil' do subject { described_class.instance.normalize_domain(domain) }
expect(described_class.instance.normalize_domain(nil)).to be_nil
context 'with a nil value' do
let(:domain) { nil }
it { is_expected.to be_nil }
end end
it 'returns normalized domain' do context 'with a blank value' do
expect(described_class.instance.normalize_domain('DoMaIn.Example.com/')).to eq 'domain.example.com' let(:domain) { '' }
it { is_expected.to be_blank }
end
context 'with a mixed case string' do
let(:domain) { 'DoMaIn.Example.com' }
it { is_expected.to eq('domain.example.com') }
end
context 'with a trailing slash string' do
let(:domain) { 'domain.example.com/' }
it { is_expected.to eq('domain.example.com') }
end
context 'with a space padded string' do
let(:domain) { ' domain.example.com ' }
it { is_expected.to eq('domain.example.com') }
end
context 'with an invalid domain string' do
let(:domain) { ' !@#$@#$@$@# ' }
it 'raises invalid uri error' do
expect { subject }.to raise_error(Addressable::URI::InvalidURIError)
end
end end
end end

View File

@ -5,7 +5,7 @@ require 'rails_helper'
RSpec.describe InstanceModerationNote do RSpec.describe InstanceModerationNote do
describe 'chronological' do describe 'chronological' do
it 'returns the instance notes sorted by oldest first' do it 'returns the instance notes sorted by oldest first' do
instance = Instance.find_or_initialize_by(domain: TagManager.instance.normalize_domain('mastodon.example')) instance = Instance.find_or_initialize_by(domain: 'mastodon.example')
note1 = Fabricate(:instance_moderation_note, domain: instance.domain) note1 = Fabricate(:instance_moderation_note, domain: instance.domain)
note2 = Fabricate(:instance_moderation_note, domain: instance.domain) note2 = Fabricate(:instance_moderation_note, domain: instance.domain)