Add spec for CLI::Domains#crawl command (#28271)
				
					
				
			This commit is contained in:
		
							parent
							
								
									7e514688b3
								
							
						
					
					
						commit
						8de86eabbf
					
				
					 2 changed files with 51 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -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 a new issue