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