Add spec for `CLI::Domains#crawl` command (#28271)
This commit is contained in:
		
							parent
							
								
									7e514688b3
								
							
						
					
					
						commit
						8de86eabbf
					
				|  | @ -97,6 +97,8 @@ module Mastodon::CLI | |||
|       say("Removed #{custom_emojis_count} custom emojis#{dry_run_mode_suffix}", :green) | ||||
|     end | ||||
| 
 | ||||
|     CRAWL_SLEEP_TIME = 20 | ||||
| 
 | ||||
|     option :concurrency, type: :numeric, default: 50, aliases: [:c] | ||||
|     option :format, type: :string, default: 'summary', aliases: [:f] | ||||
|     option :exclude_suspended, type: :boolean, default: false, aliases: [:x] | ||||
|  | @ -168,8 +170,8 @@ module Mastodon::CLI | |||
|         pool.post(domain, &work_unit) | ||||
|       end | ||||
| 
 | ||||
|       sleep 20 | ||||
|       sleep 20 until pool.queue_length.zero? | ||||
|       sleep CRAWL_SLEEP_TIME | ||||
|       sleep CRAWL_SLEEP_TIME until pool.queue_length.zero? | ||||
| 
 | ||||
|       pool.shutdown | ||||
|       pool.wait_for_termination(20) | ||||
|  |  | |||
|  | @ -28,4 +28,51 @@ describe Mastodon::CLI::Domains do | |||
|       end | ||||
|     end | ||||
|   end | ||||
| 
 | ||||
|   describe '#crawl' do | ||||
|     let(:action) { :crawl } | ||||
| 
 | ||||
|     context 'with accounts from the domain' do | ||||
|       let(:domain) { 'host.example' } | ||||
| 
 | ||||
|       before do | ||||
|         Fabricate(:account, domain: domain) | ||||
|         stub_request(:get, 'https://host.example/api/v1/instance').to_return(status: 200, body: {}.to_json) | ||||
|         stub_request(:get, 'https://host.example/api/v1/instance/peers').to_return(status: 200, body: {}.to_json) | ||||
|         stub_request(:get, 'https://host.example/api/v1/instance/activity').to_return(status: 200, body: {}.to_json) | ||||
|         stub_const('Mastodon::CLI::Domains::CRAWL_SLEEP_TIME', 0) | ||||
|       end | ||||
| 
 | ||||
|       context 'with --format of summary' do | ||||
|         let(:options) { { format: 'summary' } } | ||||
| 
 | ||||
|         it 'crawls the domains and summarizes results' do | ||||
|           expect { subject } | ||||
|             .to output_results('Visited 1 domains, 0 failed') | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       context 'with --format of domains' do | ||||
|         let(:options) { { format: 'domains' } } | ||||
| 
 | ||||
|         it 'crawls the domains and summarizes results' do | ||||
|           expect { subject } | ||||
|             .to output_results(domain) | ||||
|         end | ||||
|       end | ||||
| 
 | ||||
|       context 'with --format of json' do | ||||
|         let(:options) { { format: 'json' } } | ||||
| 
 | ||||
|         it 'crawls the domains and summarizes results' do | ||||
|           expect { subject } | ||||
|             .to output_results(json_summary) | ||||
|         end | ||||
| 
 | ||||
|         def json_summary | ||||
|           Oj.dump('host.example': { activity: {} }) | ||||
|         end | ||||
|       end | ||||
|     end | ||||
|   end | ||||
| end | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue