| 
									
										
										
										
											2016-03-30 12:57:24 +03:00
										 |  |  | require 'lib/helpers/job_waiter' | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  | require "db/mongo/models/job_task" | 
					
						
							| 
									
										
										
										
											2016-03-30 12:57:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | module Devops::Helpers | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |   RSpec.describe JobWaiter do | 
					
						
							| 
									
										
										
										
											2016-03-30 12:57:24 +03:00
										 |  |  |     let(:job_waiter) { described_class.new('job_id') } | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |     let(:task) { build(:task) } | 
					
						
							| 
									
										
										
										
											2016-03-30 12:57:24 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     before do | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       allow(Devops::Model::JobTask).to receive(:find) { task } | 
					
						
							| 
									
										
										
										
											2016-03-30 12:57:24 +03:00
										 |  |  |       allow(job_waiter).to receive(:sleep) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it 'it returns 0 when job become completed' do | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       allow(task).to receive(:status) { 'completed' } | 
					
						
							| 
									
										
										
										
											2016-03-30 12:57:24 +03:00
										 |  |  |       expect(job_waiter.wait).to eq 0
 | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it 'returns error code when job failes' do | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       allow(task).to receive(:status) { 'failed' } | 
					
						
							|  |  |  |       allow(task).to receive(:job_result_code) { 1 } | 
					
						
							| 
									
										
										
										
											2016-03-30 12:57:24 +03:00
										 |  |  |       expect(job_waiter.wait).to eq 1
 | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it 'sleeps until something happens' do | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       allow(task).to receive(:status).and_return('running', 'running', 'running', 'completed') | 
					
						
							| 
									
										
										
										
											2016-03-30 12:57:24 +03:00
										 |  |  |       expect(job_waiter).to receive(:sleep).exactly(4).times | 
					
						
							|  |  |  |       job_waiter.wait | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     it 'raises JobWaiter::TimeoutReached if nothing happens for too long' do | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  |       allow(task).to receive(:status) { 'running' } | 
					
						
							| 
									
										
										
										
											2016-03-30 12:57:24 +03:00
										 |  |  |       expect { job_waiter.wait }.to raise_error(JobWaiter::TimeoutReached) | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							| 
									
										
										
										
											2018-04-04 22:44:39 +03:00
										 |  |  | end |