35 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			35 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | require 'workers/helpers/job_waiter' | ||
|  | require "db/mongo/models/report" | ||
|  | 
 | ||
|  | RSpec.describe JobWaiter, stubbed_connector: true do | ||
|  |   let(:job_waiter) { described_class.new('job_id') } | ||
|  | 
 | ||
|  |   before do | ||
|  |     @report_double = instance_double(Devops::Model::Report) | ||
|  |     allow(stubbed_connector).to receive(:report) { @report_double } | ||
|  |     allow(job_waiter).to receive(:sleep) | ||
|  |   end | ||
|  | 
 | ||
|  |   it 'it returns 0 when job become completed' do | ||
|  |     allow(@report_double).to receive(:status) { 'completed' } | ||
|  |     expect(job_waiter.wait).to eq 0
 | ||
|  |   end | ||
|  | 
 | ||
|  |   it 'returns error code when job failes' do | ||
|  |     allow(@report_double).to receive(:status) { 'failed' } | ||
|  |     allow(@report_double).to receive(:job_result_code) { 1 } | ||
|  |     expect(job_waiter.wait).to eq 1
 | ||
|  |   end | ||
|  | 
 | ||
|  |   it 'sleeps until something happens' do | ||
|  |     allow(@report_double).to receive(:status).and_return('running', 'running', 'running', 'completed') | ||
|  |     expect(job_waiter).to receive(:sleep).exactly(4).times | ||
|  |     job_waiter.wait | ||
|  |   end | ||
|  | 
 | ||
|  |   it 'raises JobWaiter::TimeoutReached if nothing happens for too long' do | ||
|  |     allow(@report_double).to receive(:status) { 'running' } | ||
|  |     expect { job_waiter.wait }.to raise_error(JobWaiter::TimeoutReached) | ||
|  |   end | ||
|  | 
 | ||
|  | end |