Change how hashtags are normalized (#18795)
* Change how hashtags are normalized * Fix tests
This commit is contained in:
parent
12ed2d793b
commit
e7aa2be828
29 changed files with 193 additions and 51 deletions
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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue