64 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			64 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| require 'rails_helper'
 | |
| 
 | |
| RSpec.describe Form::AccountBatch do
 | |
|   let(:account_batch) { described_class.new }
 | |
| 
 | |
|   describe '#save' do
 | |
|     subject           { account_batch.save }
 | |
| 
 | |
|     let(:account)     { Fabricate(:user, role: UserRole.find_by(name: 'Admin')).account }
 | |
|     let(:account_ids) { [] }
 | |
|     let(:query)       { Account.none }
 | |
| 
 | |
|     before do
 | |
|       account_batch.assign_attributes(
 | |
|         action: action,
 | |
|         current_account: account,
 | |
|         account_ids: account_ids,
 | |
|         query: query,
 | |
|         select_all_matching: select_all_matching
 | |
|       )
 | |
|     end
 | |
| 
 | |
|     context 'when action is "suspend"' do
 | |
|       let(:action) { 'suspend' }
 | |
| 
 | |
|       let(:target_account)  { Fabricate(:account) }
 | |
|       let(:target_account2) { Fabricate(:account) }
 | |
| 
 | |
|       before do
 | |
|         Fabricate(:report, target_account: target_account)
 | |
|         Fabricate(:report, target_account: target_account2)
 | |
|       end
 | |
| 
 | |
|       context 'when accounts are passed as account_ids' do
 | |
|         let(:select_all_matching) { '0' }
 | |
|         let(:account_ids)         { [target_account.id, target_account2.id] }
 | |
| 
 | |
|         it 'suspends the expected users' do
 | |
|           expect { subject }.to change { [target_account.reload.suspended?, target_account2.reload.suspended?] }.from([false, false]).to([true, true])
 | |
|         end
 | |
| 
 | |
|         it 'closes open reports targeting the suspended users' do
 | |
|           expect { subject }.to change { Report.unresolved.where(target_account: [target_account, target_account2]).count }.from(2).to(0)
 | |
|         end
 | |
|       end
 | |
| 
 | |
|       context 'when accounts are passed as a query' do
 | |
|         let(:select_all_matching) { '1' }
 | |
|         let(:query)               { Account.where(id: [target_account.id, target_account2.id]) }
 | |
| 
 | |
|         it 'suspends the expected users' do
 | |
|           expect { subject }.to change { [target_account.reload.suspended?, target_account2.reload.suspended?] }.from([false, false]).to([true, true])
 | |
|         end
 | |
| 
 | |
|         it 'closes open reports targeting the suspended users' do
 | |
|           expect { subject }.to change { Report.unresolved.where(target_account: [target_account, target_account2]).count }.from(2).to(0)
 | |
|         end
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| end
 |