Add spec for `CLI::Domains#crawl` command (#28271)
parent
7e514688b3
commit
8de86eabbf
|
@ -97,6 +97,8 @@ module Mastodon::CLI
|
||||||
say("Removed #{custom_emojis_count} custom emojis#{dry_run_mode_suffix}", :green)
|
say("Removed #{custom_emojis_count} custom emojis#{dry_run_mode_suffix}", :green)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
CRAWL_SLEEP_TIME = 20
|
||||||
|
|
||||||
option :concurrency, type: :numeric, default: 50, aliases: [:c]
|
option :concurrency, type: :numeric, default: 50, aliases: [:c]
|
||||||
option :format, type: :string, default: 'summary', aliases: [:f]
|
option :format, type: :string, default: 'summary', aliases: [:f]
|
||||||
option :exclude_suspended, type: :boolean, default: false, aliases: [:x]
|
option :exclude_suspended, type: :boolean, default: false, aliases: [:x]
|
||||||
|
@ -168,8 +170,8 @@ module Mastodon::CLI
|
||||||
pool.post(domain, &work_unit)
|
pool.post(domain, &work_unit)
|
||||||
end
|
end
|
||||||
|
|
||||||
sleep 20
|
sleep CRAWL_SLEEP_TIME
|
||||||
sleep 20 until pool.queue_length.zero?
|
sleep CRAWL_SLEEP_TIME until pool.queue_length.zero?
|
||||||
|
|
||||||
pool.shutdown
|
pool.shutdown
|
||||||
pool.wait_for_termination(20)
|
pool.wait_for_termination(20)
|
||||||
|
|
|
@ -28,4 +28,51 @@ describe Mastodon::CLI::Domains do
|
||||||
end
|
end
|
||||||
end
|
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
|
end
|
||||||
|
|
Loading…
Reference in New Issue