# frozen_string_literal: true require 'rails_helper' require 'mastodon/cli/maintenance' describe Mastodon::CLI::Maintenance do subject { cli.invoke(action, arguments, options) } let(:cli) { described_class.new } let(:arguments) { [] } let(:options) { {} } it_behaves_like 'CLI Command' describe '#fix_duplicates' do let(:action) { :fix_duplicates } context 'when the database version is too old' do before do allow(ActiveRecord::Migrator).to receive(:current_version).and_return(2000_01_01_000000) # Earlier than minimum end it 'Exits with error message' do expect { subject } .to output_results('is too old') .and raise_error(SystemExit) end end context 'when the database version is too new and the user does not continue' do before do allow(ActiveRecord::Migrator).to receive(:current_version).and_return(2100_01_01_000000) # Later than maximum allow(cli.shell).to receive(:yes?).with('Continue anyway? (Yes/No)').and_return(false).once end it 'Exits with error message' do expect { subject } .to output_results('more recent') .and raise_error(SystemExit) end end context 'when Sidekiq is running' do before do allow(ActiveRecord::Migrator).to receive(:current_version).and_return(2022_01_01_000000) # Higher than minimum, lower than maximum allow(Sidekiq::ProcessSet).to receive(:new).and_return [:process] end it 'Exits with error message' do expect { subject } .to output_results('Sidekiq is running') .and raise_error(SystemExit) end end end end