Change how hashtags are normalized (#18795)
* Change how hashtags are normalized * Fix tests
This commit is contained in:
29
spec/lib/hashtag_normalizer_spec.rb
Normal file
29
spec/lib/hashtag_normalizer_spec.rb
Normal file
@@ -0,0 +1,29 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
require 'rails_helper'
|
||||
|
||||
describe HashtagNormalizer do
|
||||
subject { described_class.new }
|
||||
|
||||
describe '#normalize' do
|
||||
it 'converts full-width Latin characters into basic Latin characters' do
|
||||
expect(subject.normalize('Synthwave')).to eq 'synthwave'
|
||||
end
|
||||
|
||||
it 'converts half-width Katakana into Kana characters' do
|
||||
expect(subject.normalize('シーサイドライナー')).to eq 'シーサイドライナー'
|
||||
end
|
||||
|
||||
it 'converts modified Latin characters into basic Latin characters' do
|
||||
expect(subject.normalize('BLÅHAJ')).to eq 'blahaj'
|
||||
end
|
||||
|
||||
it 'strips out invalid characters' do
|
||||
expect(subject.normalize('#foo')).to eq 'foo'
|
||||
end
|
||||
|
||||
it 'keeps valid characters' do
|
||||
expect(subject.normalize('a·b')).to eq 'a·b'
|
||||
end
|
||||
end
|
||||
end
|
@@ -91,7 +91,7 @@ RSpec.describe Tag, type: :model do
|
||||
upcase_string = 'abcABCabcABCやゆよ'
|
||||
downcase_string = 'abcabcabcabcやゆよ';
|
||||
|
||||
tag = Fabricate(:tag, name: downcase_string)
|
||||
tag = Fabricate(:tag, name: HashtagNormalizer.new.normalize(downcase_string))
|
||||
expect(Tag.find_normalized(upcase_string)).to eq tag
|
||||
end
|
||||
end
|
||||
@@ -101,12 +101,12 @@ RSpec.describe Tag, type: :model do
|
||||
upcase_string = 'abcABCabcABCやゆよ'
|
||||
downcase_string = 'abcabcabcabcやゆよ';
|
||||
|
||||
tag = Fabricate(:tag, name: downcase_string)
|
||||
tag = Fabricate(:tag, name: HashtagNormalizer.new.normalize(downcase_string))
|
||||
expect(Tag.matches_name(upcase_string)).to eq [tag]
|
||||
end
|
||||
|
||||
it 'uses the LIKE operator' do
|
||||
expect(Tag.matches_name('100%abc').to_sql).to eq %q[SELECT "tags".* FROM "tags" WHERE LOWER("tags"."name") LIKE LOWER('100\\%abc%')]
|
||||
expect(Tag.matches_name('100%abc').to_sql).to eq %q[SELECT "tags".* FROM "tags" WHERE LOWER("tags"."name") LIKE LOWER('100abc%')]
|
||||
end
|
||||
end
|
||||
|
||||
@@ -115,7 +115,7 @@ RSpec.describe Tag, type: :model do
|
||||
upcase_string = 'abcABCabcABCやゆよ'
|
||||
downcase_string = 'abcabcabcabcやゆよ';
|
||||
|
||||
tag = Fabricate(:tag, name: downcase_string)
|
||||
tag = Fabricate(:tag, name: HashtagNormalizer.new.normalize(downcase_string))
|
||||
expect(Tag.matching_name(upcase_string)).to eq [tag]
|
||||
end
|
||||
end
|
||||
|
Reference in New Issue
Block a user