56 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			1.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # 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
 |