Add specs for DisallowedHashtagsValidator (#9653)
In order to implement tests easier, `#select_tags` created.
This commit is contained in:
		| @@ -4,14 +4,19 @@ class DisallowedHashtagsValidator < ActiveModel::Validator | |||||||
|   def validate(status) |   def validate(status) | ||||||
|     return unless status.local? && !status.reblog? |     return unless status.local? && !status.reblog? | ||||||
|  |  | ||||||
|     tags = Extractor.extract_hashtags(status.text) |     @status = status | ||||||
|     tags.keep_if { |tag| disallowed_hashtags.include? tag.downcase } |     tags    = select_tags | ||||||
|  |  | ||||||
|     status.errors.add(:text, I18n.t('statuses.disallowed_hashtags', tags: tags.join(', '), count: tags.size)) unless tags.empty? |     status.errors.add(:text, I18n.t('statuses.disallowed_hashtags', tags: tags.join(', '), count: tags.size)) unless tags.empty? | ||||||
|   end |   end | ||||||
|  |  | ||||||
|   private |   private | ||||||
|  |  | ||||||
|  |   def select_tags | ||||||
|  |     tags = Extractor.extract_hashtags(@status.text) | ||||||
|  |     tags.keep_if { |tag| disallowed_hashtags.include? tag.downcase } | ||||||
|  |   end | ||||||
|  |  | ||||||
|   def disallowed_hashtags |   def disallowed_hashtags | ||||||
|     return @disallowed_hashtags if @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 | ||||||
		Reference in New Issue
	
	Block a user