travis-api/spec_core/services/find_job_spec.rb
2016-06-19 14:35:54 +02:00

58 lines
1.8 KiB
Ruby

describe Travis::Services::FindJob do
let(:repo) { Factory(:repository) }
let!(:job) { Factory(:test, repository: repo, state: :created, queue: 'builds.linux', config: {'sudo' => false}) }
let(:params) { { id: job.id } }
let(:service) { described_class.new(stub('user'), params) }
describe 'run' do
it 'finds the job with the given id' do
@params = { id: job.id }
service.run.should == job
end
it 'does not raise if the job could not be found' do
@params = { id: job.id + 1 }
lambda { service.run }.should_not raise_error
end
it 'raises RecordNotFound if a SubclassNotFound error is raised during find' do
find_by_id = stub.tap do |s|
s.stubs(:column_names).returns(%w(id config))
s.stubs(:select).returns(s)
s.stubs(:find_by_id).raises(ActiveRecord::SubclassNotFound)
end
service.stubs(:scope).returns(find_by_id)
lambda { service.run }.should raise_error(ActiveRecord::RecordNotFound)
end
it 'includes config by default' do
service.run.config.should include(:sudo)
end
it 'excludes config when requested' do
params[:exclude_config] = '1'
service.run.config.should_not include(:sudo)
end
end
describe 'updated_at' do
it 'returns jobs updated_at attribute' do
service.updated_at.to_s.should == job.updated_at.to_s
end
end
# TODO jobs can be requeued, so finished jobs are no more final
#
# describe 'final?' do
# it 'returns true if the job is finished' do
# job.update_attributes!(state: :errored)
# service.final?.should be_truthy
# end
# it 'returns false if the job is not finished' do
# job.update_attributes!(state: :started)
# service.final?.should be false
# end
# end
end