91 lines
2.1 KiB
Ruby
91 lines
2.1 KiB
Ruby
require 'spec_helper'
|
|
|
|
describe Ci::Stage, :models do
|
|
let(:stage) { create(:ci_stage_entity) }
|
|
|
|
describe 'associations' do
|
|
before do
|
|
create(:ci_build, stage_id: stage.id)
|
|
create(:commit_status, stage_id: stage.id)
|
|
end
|
|
|
|
describe '#statuses' do
|
|
it 'returns all commit statuses' do
|
|
expect(stage.statuses.count).to be 2
|
|
end
|
|
end
|
|
|
|
describe '#builds' do
|
|
it 'returns only builds' do
|
|
expect(stage.builds).to be_one
|
|
end
|
|
end
|
|
end
|
|
|
|
describe '#status' do
|
|
context 'when stage is pending' do
|
|
let(:stage) { create(:ci_stage_entity, status: 'pending') }
|
|
|
|
it 'has a correct status value' do
|
|
expect(stage.status).to eq 'pending'
|
|
end
|
|
end
|
|
|
|
context 'when stage is success' do
|
|
let(:stage) { create(:ci_stage_entity, status: 'success') }
|
|
|
|
it 'has a correct status value' do
|
|
expect(stage.status).to eq 'success'
|
|
end
|
|
end
|
|
|
|
context 'when stage status is not defined' do
|
|
before do
|
|
stage.update_column(:status, nil)
|
|
end
|
|
|
|
it 'sets the default value' do
|
|
expect(described_class.find(stage.id).status)
|
|
.to eq 'created'
|
|
end
|
|
end
|
|
end
|
|
|
|
describe 'update_status' do
|
|
context 'when stage objects needs to be updated' do
|
|
before do
|
|
create(:ci_build, :success, stage_id: stage.id)
|
|
create(:ci_build, :running, stage_id: stage.id)
|
|
end
|
|
|
|
it 'updates stage status correctly' do
|
|
expect { stage.update_status }
|
|
.to change { stage.reload.status }
|
|
.to 'running'
|
|
end
|
|
end
|
|
|
|
context 'when stage is skipped' do
|
|
it 'updates status to skipped' do
|
|
expect { stage.update_status }
|
|
.to change { stage.reload.status }
|
|
.to 'skipped'
|
|
end
|
|
end
|
|
|
|
context 'when stage object is locked' do
|
|
before do
|
|
create(:ci_build, :failed, stage_id: stage.id)
|
|
end
|
|
|
|
it 'retries a lock to update a stage status' do
|
|
stage.lock_version = 100
|
|
|
|
stage.update_status
|
|
|
|
expect(stage.reload).to be_failed
|
|
end
|
|
end
|
|
end
|
|
end
|