summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-02-14 15:22:49 +0100
committerGrzegorz Bizon <grzesiek.bizon@gmail.com>2017-02-14 15:22:49 +0100
commitcff9504ab16afdef2a42b097e267beee1a83138f (patch)
tree8aa0181d61e8d29467a84e8a449224ebb5ba7749
parent82e6efb8099f2e54c1201dba815d4082f1e01a55 (diff)
downloadgitlab-ce-cff9504ab16afdef2a42b097e267beee1a83138f.tar.gz
Extend specs for build and pipeline retry services
-rw-r--r--spec/services/ci/retry_build_service_spec.rb25
-rw-r--r--spec/services/ci/retry_pipeline_service_spec.rb78
2 files changed, 87 insertions, 16 deletions
diff --git a/spec/services/ci/retry_build_service_spec.rb b/spec/services/ci/retry_build_service_spec.rb
index 9cd1da59c54..97c28ea50e0 100644
--- a/spec/services/ci/retry_build_service_spec.rb
+++ b/spec/services/ci/retry_build_service_spec.rb
@@ -53,4 +53,29 @@ describe Ci::RetryBuildService, :services do
end
end
end
+
+ describe '#reprocess' do
+ let(:new_build) { service.reprocess(build) }
+
+ context 'when user has ability to execute build' do
+ before do
+ project.team << [user, :developer]
+ end
+
+ it 'creates a new build that represents the old one' do
+ expect(new_build.name).to eq build.name
+ end
+
+ it 'does not enqueue the new build' do
+ expect(new_build).to be_created
+ end
+ end
+
+ context 'when user does not have ability to execute build' do
+ it 'raises an error' do
+ expect { service.reprocess(build) }
+ .to raise_error Gitlab::Access::AccessDeniedError
+ end
+ end
+ end
end
diff --git a/spec/services/ci/retry_pipeline_service_spec.rb b/spec/services/ci/retry_pipeline_service_spec.rb
index cee9792243c..81019e3db1c 100644
--- a/spec/services/ci/retry_pipeline_service_spec.rb
+++ b/spec/services/ci/retry_pipeline_service_spec.rb
@@ -30,7 +30,7 @@ describe Ci::RetryPipelineService, '#execute', :services do
create_build('rspec 1', :failed, 0)
create_build('rspec 2', :canceled, 0)
create_build('rspec 3', :canceled, 1)
- create_build('deploy 1', :canceled, 2)
+ create_build('spinach 1', :canceled, 2)
end
it 'retries builds failed builds and marks subsequent for processing' do
@@ -39,7 +39,7 @@ describe Ci::RetryPipelineService, '#execute', :services do
expect(build('rspec 1')).to be_pending
expect(build('rspec 2')).to be_pending
expect(build('rspec 3')).to be_created
- expect(build('deploy 1')).to be_created
+ expect(build('spinach 1')).to be_created
expect(pipeline.reload).to be_running
end
end
@@ -52,7 +52,7 @@ describe Ci::RetryPipelineService, '#execute', :services do
create_build('report 1', :failed, 2)
end
- it 'retries builds failed builds and marks subsequent for processing' do
+ it 'retries builds only in the first stage' do
service.execute(pipeline)
expect(build('rspec 1')).to be_pending
@@ -65,25 +65,71 @@ describe Ci::RetryPipelineService, '#execute', :services do
it 'creates a new job for report job in this case' do
service.execute(pipeline)
- # TODO, expect to be_retried
- expect(statuses.where(name: 'report 1').count).to eq 2
+ expect(statuses.where(name: 'report 1').first).to be_retried
end
end
- context 'when there is canceled manual build in first stage' do
- before do
- create_build('rspec 1', :failed, 0)
- create_build('staging', :canceled, 0, :manual)
- create_build('rspec 2', :canceled, 1)
+ context 'when pipeline contains manual actions' do
+ context 'when there is a canceled manual action in first stage' do
+ before do
+ create_build('rspec 1', :failed, 0)
+ create_build('staging', :canceled, 0, :manual)
+ create_build('rspec 2', :canceled, 1)
+ end
+
+ it 'retries builds failed builds and marks subsequent for processing' do
+ service.execute(pipeline)
+
+ expect(build('rspec 1')).to be_pending
+ expect(build('staging')).to be_skipped
+ expect(build('rspec 2')).to be_created
+ expect(pipeline.reload).to be_running
+ end
end
- it 'retries builds failed builds and marks subsequent for processing' do
- service.execute(pipeline)
+ context 'when there is a skipped manual action in last stage' do
+ before do
+ create_build('rspec 1', :canceled, 0)
+ create_build('staging', :skipped, 1, :manual)
+ end
- expect(build('rspec 1')).to be_pending
- expect(build('staging')).to be_skipped
- expect(build('rspec 2')).to be_created
- expect(pipeline.reload).to be_running
+ it 'retries canceled job and skips manual action' do
+ service.execute(pipeline)
+
+ expect(build('rspec 1')).to be_pending
+ expect(build('staging')).to be_skipped
+ expect(pipeline.reload).to be_running
+ end
+ end
+
+ context 'when there is a created manual action in the last stage' do
+ before do
+ create_build('rspec 1', :canceled, 0)
+ create_build('staging', :created, 1, :manual)
+ end
+
+ it 'retries canceled job and does not update the manual action' do
+ service.execute(pipeline)
+
+ expect(build('rspec 1')).to be_pending
+ expect(build('staging')).to be_created
+ expect(pipeline.reload).to be_running
+ end
+ end
+
+ context 'when there is a created manual action in the first stage' do
+ before do
+ create_build('rspec 1', :canceled, 0)
+ create_build('staging', :created, 0, :manual)
+ end
+
+ it 'retries canceled job and skipps the manual action' do
+ service.execute(pipeline)
+
+ expect(build('rspec 1')).to be_pending
+ expect(build('staging')).to be_skipped
+ expect(pipeline.reload).to be_running
+ end
end
end
end