
- Re-factor - Remove code for notifications - Remove addons - Remove travis-core gem. - Ignore logs directory only - Move core tests to spec/lib
243 lines
6.1 KiB
Ruby
243 lines
6.1 KiB
Ruby
describe Travis::Services::UpdateJob do
|
|
before { DatabaseCleaner.clean_with :truncation }
|
|
|
|
let(:service) { described_class.new(event: event, data: payload) }
|
|
let(:payload) { WORKER_PAYLOADS["job:test:#{event}"].merge('id' => job.id) }
|
|
let(:build) { Factory(:build, state: :created, started_at: nil, finished_at: nil) }
|
|
let(:job) { Factory(:test, source: build, state: :started, started_at: nil, finished_at: nil) }
|
|
|
|
before :each do
|
|
build.matrix.delete_all
|
|
end
|
|
|
|
describe '#cancel_job_in_worker' do
|
|
let(:event) { :start }
|
|
|
|
it 'sends cancel event to the worker' do
|
|
publisher = mock('publisher')
|
|
service.stubs(:publisher).returns(publisher)
|
|
|
|
publisher.expects(:publish).with(type: 'cancel_job', job_id: job.id, source: 'update_job_service')
|
|
|
|
service.cancel_job_in_worker
|
|
end
|
|
end
|
|
|
|
describe 'event: receive' do
|
|
let(:event) { :receive }
|
|
|
|
before :each do
|
|
job.repository.update_attributes(last_build_state: :passed)
|
|
end
|
|
|
|
context 'when job is canceled' do
|
|
before { job.update_attribute(:state, :canceled) }
|
|
|
|
it 'does not update state' do
|
|
service.expects(:cancel_job_in_worker)
|
|
|
|
service.run
|
|
job.reload.state.should == 'canceled'
|
|
end
|
|
end
|
|
|
|
it 'sets the job state to received' do
|
|
service.run
|
|
job.reload.state.should == 'received'
|
|
end
|
|
|
|
it 'sets the job received_at' do
|
|
service.run
|
|
job.reload.received_at.to_s.should == '2011-01-01 00:02:00 UTC'
|
|
end
|
|
|
|
it 'sets the job worker name' do
|
|
service.run
|
|
job.reload.worker.should == 'ruby3.worker.travis-ci.org:travis-ruby-4'
|
|
end
|
|
|
|
it 'sets the build state to received' do
|
|
service.run
|
|
job.reload.source.state.should == 'received'
|
|
end
|
|
|
|
it 'sets the build received_at' do
|
|
service.run
|
|
job.reload.source.received_at.to_s.should == '2011-01-01 00:02:00 UTC'
|
|
end
|
|
|
|
it 'sets the build state to received' do
|
|
service.run
|
|
job.reload.source.state.should == 'received'
|
|
end
|
|
end
|
|
|
|
|
|
describe 'event: start' do
|
|
let(:event) { :start }
|
|
|
|
before :each do
|
|
job.repository.update_attributes(last_build_state: :passed)
|
|
end
|
|
|
|
context 'when job is canceled' do
|
|
before { job.update_attribute(:state, :canceled) }
|
|
|
|
it 'does not update state' do
|
|
service.expects(:cancel_job_in_worker)
|
|
|
|
service.run
|
|
job.reload.state.should == 'canceled'
|
|
end
|
|
end
|
|
|
|
it 'sets the job state to started' do
|
|
service.run
|
|
job.reload.state.should == 'started'
|
|
end
|
|
|
|
it 'sets the job started_at' do
|
|
service.run
|
|
job.reload.started_at.to_s.should == '2011-01-01 00:02:00 UTC'
|
|
end
|
|
|
|
it 'sets the build state to started' do
|
|
service.run
|
|
job.reload.source.state.should == 'started'
|
|
end
|
|
|
|
it 'sets the build started_at' do
|
|
service.run
|
|
job.reload.source.started_at.to_s.should == '2011-01-01 00:02:00 UTC'
|
|
end
|
|
|
|
it 'sets the build state to started' do
|
|
service.run
|
|
job.reload.source.state.should == 'started'
|
|
end
|
|
|
|
it 'sets the repository last_build_state to started' do
|
|
service.run
|
|
job.reload.repository.last_build_state.should == 'started'
|
|
end
|
|
|
|
it 'sets the repository last_build_started_at' do
|
|
service.run
|
|
job.reload.repository.last_build_started_at.to_s.should == '2011-01-01 00:02:00 UTC'
|
|
end
|
|
end
|
|
|
|
describe 'event: finish' do
|
|
let(:event) { :finish }
|
|
|
|
before :each do
|
|
job.repository.update_attributes(last_build_state: :started)
|
|
end
|
|
|
|
context 'when job is canceled' do
|
|
before { job.update_attribute(:state, :canceled) }
|
|
|
|
it 'does not update state' do
|
|
service.expects(:cancel_job_in_worker)
|
|
|
|
service.run
|
|
job.reload.state.should == 'canceled'
|
|
end
|
|
end
|
|
|
|
it 'sets the job state to passed' do
|
|
service.run
|
|
job.reload.state.should == 'passed'
|
|
end
|
|
|
|
it 'sets the job finished_at' do
|
|
service.run
|
|
job.reload.finished_at.to_s.should == '2011-01-01 00:03:00 UTC'
|
|
end
|
|
|
|
it 'sets the build state to passed' do
|
|
service.run
|
|
job.reload.source.state.should == 'passed'
|
|
end
|
|
|
|
it 'sets the build finished_at' do
|
|
service.run
|
|
job.reload.source.finished_at.to_s.should == '2011-01-01 00:03:00 UTC'
|
|
end
|
|
|
|
it 'sets the repository last_build_state to passed' do
|
|
service.run
|
|
job.reload.repository.last_build_state.should == 'passed'
|
|
end
|
|
|
|
it 'sets the repository last_build_finished_at' do
|
|
service.run
|
|
job.reload.repository.last_build_finished_at.to_s.should == '2011-01-01 00:03:00 UTC'
|
|
end
|
|
end
|
|
|
|
describe 'compat' do
|
|
let(:event) { :finish }
|
|
|
|
it 'swaps :result for :state (passed) if present' do
|
|
payload.delete(:state)
|
|
payload.merge!(result: 0)
|
|
service.data[:state].should == :passed
|
|
end
|
|
|
|
it 'swaps :result for :state (failed) if present' do
|
|
payload.delete(:state)
|
|
payload.merge!(result: 1)
|
|
service.data[:state].should == :failed
|
|
end
|
|
end
|
|
|
|
describe 'event: reset' do
|
|
let(:event) { :reset }
|
|
|
|
before :each do
|
|
job.repository.update_attributes(last_build_state: :passed)
|
|
end
|
|
|
|
it 'sets the job state to created' do
|
|
service.run
|
|
job.reload.state.should == 'created'
|
|
end
|
|
|
|
it 'resets the job started_at' do
|
|
service.run
|
|
job.reload.started_at.should be_nil
|
|
end
|
|
|
|
it 'resets the job worker name' do
|
|
service.run
|
|
job.reload.worker.should be_nil
|
|
end
|
|
|
|
it 'resets the build state to started' do
|
|
service.run
|
|
job.reload.source.state.should == 'created'
|
|
end
|
|
|
|
it 'resets the build started_at' do
|
|
service.run
|
|
job.reload.source.started_at.should be_nil
|
|
end
|
|
|
|
it 'resets the build state to started' do
|
|
service.run
|
|
job.reload.source.state.should == 'created'
|
|
end
|
|
|
|
it 'resets the repository last_build_state to started' do
|
|
service.run
|
|
job.reload.repository.last_build_state.should == 'created'
|
|
end
|
|
|
|
it 'resets the repository last_build_started_at' do
|
|
service.run
|
|
job.reload.repository.last_build_started_at.should be_nil
|
|
end
|
|
end
|
|
end
|