Add specs for DisallowedHashtagsValidator (#9653)
In order to implement tests easier, `#select_tags` created.
This commit is contained in:
		
					parent
					
						
							
								0f938ff29c
							
						
					
				
			
			
				commit
				
					
						4725aeec9f
					
				
			
		
					 2 changed files with 53 additions and 2 deletions
				
			
		|  | @ -4,14 +4,19 @@ class DisallowedHashtagsValidator < ActiveModel::Validator | |||
|   def validate(status) | ||||
|     return unless status.local? && !status.reblog? | ||||
| 
 | ||||
|     tags = Extractor.extract_hashtags(status.text) | ||||
|     tags.keep_if { |tag| disallowed_hashtags.include? tag.downcase } | ||||
|     @status = status | ||||
|     tags    = select_tags | ||||
| 
 | ||||
|     status.errors.add(:text, I18n.t('statuses.disallowed_hashtags', tags: tags.join(', '), count: tags.size)) unless tags.empty? | ||||
|   end | ||||
| 
 | ||||
|   private | ||||
| 
 | ||||
|   def select_tags | ||||
|     tags = Extractor.extract_hashtags(@status.text) | ||||
|     tags.keep_if { |tag| disallowed_hashtags.include? tag.downcase } | ||||
|   end | ||||
| 
 | ||||
|   def disallowed_hashtags | ||||
|     return @disallowed_hashtags if @disallowed_hashtags | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										46
									
								
								spec/validators/disallowed_hashtags_validator_spec.rb
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								spec/validators/disallowed_hashtags_validator_spec.rb
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,46 @@ | |||
| # frozen_string_literal: true | ||||
| 
 | ||||
| require 'rails_helper' | ||||
| 
 | ||||
| RSpec.describe DisallowedHashtagsValidator, type: :validator do | ||||
|   describe '#validate' do | ||||
|     before do | ||||
|       allow_any_instance_of(described_class).to receive(:select_tags) { tags } | ||||
|       described_class.new.validate(status) | ||||
|     end | ||||
| 
 | ||||
|     let(:status) { double(errors: errors, local?: local, reblog?: reblog, text: '') } | ||||
|     let(:errors) { double(add: nil) } | ||||
| 
 | ||||
|     context 'unless status.local? && !status.reblog?' do | ||||
|       let(:local)  { false } | ||||
|       let(:reblog) { true } | ||||
| 
 | ||||
|       it 'not calls errors.add' do | ||||
|         expect(errors).not_to have_received(:add).with(:text, any_args) | ||||
|       end | ||||
|     end | ||||
| 
 | ||||
|     context 'status.local? && !status.reblog?' do | ||||
|       let(:local)  { true } | ||||
|       let(:reblog) { false } | ||||
| 
 | ||||
|       context 'tags.empty?' do | ||||
|         let(:tags) { [] } | ||||
| 
 | ||||
|         it 'not calls errors.add' do | ||||
|           expect(errors).not_to have_received(:add).with(:text, any_args) | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       context '!tags.empty?' do | ||||
|         let(:tags) { %w(a b c) } | ||||
| 
 | ||||
|         it 'calls errors.add' do | ||||
|           expect(errors).to have_received(:add) | ||||
|             .with(:text, I18n.t('statuses.disallowed_hashtags', tags: tags.join(', '), count: tags.size)) | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue