Use normalizes to prepare CustomEmoji `domain` value (#28624)

main
Matt Jankowski 2024-01-08 06:20:59 -05:00 committed by GitHub
parent 202951e6d9
commit aa6d07dbd9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 17 additions and 10 deletions

View File

@ -41,7 +41,7 @@ class CustomEmoji < ApplicationRecord
has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' } }, validate_media_type: false has_attached_file :image, styles: { static: { format: 'png', convert_options: '-coalesce +profile "!icc,*" +set date:modify +set date:create +set date:timestamp' } }, validate_media_type: false
before_validation :downcase_domain normalizes :domain, with: ->(domain) { domain.downcase }
validates_attachment :image, content_type: { content_type: IMAGE_MIME_TYPES }, presence: true, size: { less_than: LIMIT } validates_attachment :image, content_type: { content_type: IMAGE_MIME_TYPES }, presence: true, size: { less_than: LIMIT }
validates :shortcode, uniqueness: { scope: :domain }, format: { with: SHORTCODE_ONLY_RE }, length: { minimum: 2 } validates :shortcode, uniqueness: { scope: :domain }, format: { with: SHORTCODE_ONLY_RE }, length: { minimum: 2 }
@ -95,8 +95,4 @@ class CustomEmoji < ApplicationRecord
def remove_entity_cache def remove_entity_cache
Rails.cache.delete(EntityCache.instance.to_key(:emoji, shortcode, domain)) Rails.cache.delete(EntityCache.instance.to_key(:emoji, shortcode, domain))
end end
def downcase_domain
self.domain = domain.downcase unless domain.nil?
end
end end

View File

@ -78,12 +78,23 @@ RSpec.describe CustomEmoji do
end end
end end
describe 'pre_validation' do describe 'Normalizations' do
let(:custom_emoji) { Fabricate(:custom_emoji, domain: 'wWw.MaStOdOn.CoM') } describe 'downcase domain value' do
context 'with a mixed case domain value' do
it 'normalizes the value to downcased' do
custom_emoji = Fabricate.build(:custom_emoji, domain: 'wWw.MaStOdOn.CoM')
it 'downcases' do expect(custom_emoji.domain).to eq('www.mastodon.com')
custom_emoji.valid? end
expect(custom_emoji.domain).to eq('www.mastodon.com') end
context 'with a nil domain value' do
it 'leaves the value as nil' do
custom_emoji = Fabricate.build(:custom_emoji, domain: nil)
expect(custom_emoji.domain).to be_nil
end
end
end end
end end
end end