You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.5 KiB
91 lines
2.5 KiB
# frozen_string_literal: true |
|
|
|
require 'rails_helper' |
|
require 'mastodon/cli/search' |
|
|
|
RSpec.describe Mastodon::CLI::Search do |
|
subject { cli.invoke(action, arguments, options) } |
|
|
|
let(:cli) { described_class.new } |
|
let(:arguments) { [] } |
|
let(:options) { {} } |
|
|
|
it_behaves_like 'CLI Command' |
|
|
|
describe '#deploy' do |
|
let(:action) { :deploy } |
|
|
|
context 'with concurrency out of range' do |
|
let(:options) { { concurrency: -100 } } |
|
|
|
it 'Exits with error message' do |
|
expect { subject } |
|
.to raise_error(Thor::Error, /this concurrency setting/) |
|
end |
|
end |
|
|
|
context 'with batch size out of range' do |
|
let(:options) { { batch_size: -100_000 } } |
|
|
|
it 'Exits with error message' do |
|
expect { subject } |
|
.to raise_error(Thor::Error, /this batch_size setting/) |
|
end |
|
end |
|
|
|
context 'when server communication raises an error' do |
|
let(:options) { { reset_chewy: true } } |
|
|
|
before { allow(Chewy::Stash::Specification).to receive(:reset!).and_raise(Elasticsearch::Transport::Transport::Errors::InternalServerError) } |
|
|
|
it 'Exits with error message' do |
|
expect { subject } |
|
.to raise_error(Thor::Error, /issue connecting to the search/) |
|
end |
|
end |
|
|
|
context 'without options' do |
|
before { stub_search_indexes } |
|
|
|
let(:indexed_count) { 1 } |
|
let(:deleted_count) { 2 } |
|
|
|
it 'reports about storage size' do |
|
expect { subject } |
|
.to output_results( |
|
"Indexed #{described_class::INDICES.size * indexed_count} records", |
|
"de-indexed #{described_class::INDICES.size * deleted_count}" |
|
) |
|
end |
|
end |
|
|
|
def stub_search_indexes |
|
described_class::INDICES.each do |index| |
|
allow(index) |
|
.to receive_messages( |
|
specification: instance_double(Chewy::Index::Specification, changed?: true, lock!: nil), |
|
purge: nil |
|
) |
|
|
|
importer_double = importer_double_for(index) |
|
allow(importer_double).to receive(:on_progress).and_yield([indexed_count, deleted_count]) |
|
allow("Importer::#{index}Importer".constantize) |
|
.to receive(:new) |
|
.and_return(importer_double) |
|
end |
|
end |
|
|
|
def importer_double_for(index) |
|
instance_double( |
|
"Importer::#{index}Importer".constantize, |
|
clean_up!: nil, |
|
estimate!: 100, |
|
import!: nil, |
|
on_failure: nil, |
|
# on_progress: nil, |
|
optimize_for_import!: nil, |
|
optimize_for_search!: nil |
|
) |
|
end |
|
end |
|
end
|
|
|