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