Commit c1353c95 authored by Grzegorz Bizon's avatar Grzegorz Bizon

Refact build queue service tests to improve readability

parent 9b9b6f05
...@@ -8,10 +8,15 @@ RSpec.describe Ci::UpdateBuildQueueService do ...@@ -8,10 +8,15 @@ RSpec.describe Ci::UpdateBuildQueueService do
let(:pipeline) { create(:ci_pipeline, project: project) } let(:pipeline) { create(:ci_pipeline, project: project) }
describe '#push' do describe '#push' do
it 'creates a new pending build in transaction' do let(:transition) { double('transition') }
transition = double(to: 'pending')
before do
allow(transition).to receive(:to).and_return('pending')
allow(transition).to receive(:within_transaction).and_yield allow(transition).to receive(:within_transaction).and_yield
end
context 'when pending build can be created' do
it 'creates a new pending build in transaction' do
queued = subject.push(build, transition) queued = subject.push(build, transition)
expect(queued.build).to eq build expect(queued.build).to eq build
...@@ -20,8 +25,6 @@ RSpec.describe Ci::UpdateBuildQueueService do ...@@ -20,8 +25,6 @@ RSpec.describe Ci::UpdateBuildQueueService do
it 'increments queue push metric' do it 'increments queue push metric' do
metrics = spy('metrics') metrics = spy('metrics')
transition = double(to: 'pending')
allow(transition).to receive(:within_transaction).and_yield
described_class.new(metrics).push(build, transition) described_class.new(metrics).push(build, transition)
...@@ -29,21 +32,32 @@ RSpec.describe Ci::UpdateBuildQueueService do ...@@ -29,21 +32,32 @@ RSpec.describe Ci::UpdateBuildQueueService do
.to have_received(:increment_queue_operation) .to have_received(:increment_queue_operation)
.with(:build_queue_push) .with(:build_queue_push)
end end
end
it 'raises an error when invalid transition is detected' do context 'when invalid transition is detected' do
transition = double(to: 'created') it 'raises an error' do
allow(transition).to receive(:to).and_return('created')
expect { subject.push(build, transition) } expect { subject.push(build, transition) }
.to raise_error(described_class::InvalidQueueTransition) .to raise_error(described_class::InvalidQueueTransition)
end end
end end
end
describe '#pop' do describe '#pop' do
it 'removes pending build in a transaction' do let(:transition) { double('transition') }
transition = double(from: 'pending')
before do
allow(transition).to receive(:from).and_return('pending')
allow(transition).to receive(:within_transaction).and_yield allow(transition).to receive(:within_transaction).and_yield
end
context 'when pending build exists' do
before do
Ci::PendingBuild.create!(build: build, project: project) Ci::PendingBuild.create!(build: build, project: project)
end
it 'removes pending build in a transaction' do
dequeued = subject.pop(build, transition) dequeued = subject.pop(build, transition)
expect(dequeued.build).to eq build expect(dequeued.build).to eq build
...@@ -53,9 +67,6 @@ RSpec.describe Ci::UpdateBuildQueueService do ...@@ -53,9 +67,6 @@ RSpec.describe Ci::UpdateBuildQueueService do
it 'increments queue pop metric' do it 'increments queue pop metric' do
metrics = spy('metrics') metrics = spy('metrics')
transition = double(from: 'pending')
allow(transition).to receive(:within_transaction).and_yield
Ci::PendingBuild.create!(build: build, project: project)
described_class.new(metrics).pop(build, transition) described_class.new(metrics).pop(build, transition)
...@@ -63,23 +74,25 @@ RSpec.describe Ci::UpdateBuildQueueService do ...@@ -63,23 +74,25 @@ RSpec.describe Ci::UpdateBuildQueueService do
.to have_received(:increment_queue_operation) .to have_received(:increment_queue_operation)
.with(:build_queue_pop) .with(:build_queue_pop)
end end
end
context 'when pending build does not exist' do
it 'does nothing if there is no pending build to remove' do it 'does nothing if there is no pending build to remove' do
transition = double(from: 'pending')
allow(transition).to receive(:within_transaction).and_yield
dequeued = subject.pop(build, transition) dequeued = subject.pop(build, transition)
expect(dequeued).to be_nil expect(dequeued).to be_nil
end end
end
it 'raises an error when invalid transition is detected' do context 'when invalid transition is detected' do
transition = double(from: 'created') it 'raises an error' do
allow(transition).to receive(:from).and_return('created')
expect { subject.pop(build, transition) } expect { subject.pop(build, transition) }
.to raise_error(described_class::InvalidQueueTransition) .to raise_error(described_class::InvalidQueueTransition)
end end
end end
end
describe '#tick' do describe '#tick' do
shared_examples 'refreshes runner' do shared_examples 'refreshes runner' do
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment