Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKamil Trzcinski <ayufan@ayufan.eu>2016-02-19 19:38:47 +0300
committerKamil Trzcinski <ayufan@ayufan.eu>2016-02-20 01:24:31 +0300
commit56449cc6747224adbf3a55e9ac5d21e24dbbaa30 (patch)
tree416b5ad971cf562bbfbb42181b9fc39d16ffc1fd /spec/services/merge_requests
parent2cc9a42ca45d14fc7fe35ea6f8bc4f9275f33144 (diff)
Fix Merge When Succeeded for multiple stages
Use around_transition to trigger build creation for next stages
Diffstat (limited to 'spec/services/merge_requests')
-rw-r--r--spec/services/merge_requests/merge_when_build_succeeds_service_spec.rb30
1 files changed, 30 insertions, 0 deletions
diff --git a/spec/services/merge_requests/merge_when_build_succeeds_service_spec.rb b/spec/services/merge_requests/merge_when_build_succeeds_service_spec.rb
index de9fed2b7dd..160c7786bf2 100644
--- a/spec/services/merge_requests/merge_when_build_succeeds_service_spec.rb
+++ b/spec/services/merge_requests/merge_when_build_succeeds_service_spec.rb
@@ -63,6 +63,36 @@ describe MergeRequests::MergeWhenBuildSucceedsService do
expect(MergeWorker).to receive(:perform_async)
service.trigger(build)
end
+
+ context 'properly handles multiple stages' do
+ let(:ref) { mr_merge_if_green_enabled.source_branch }
+ let(:build) { create(:ci_build, commit: ci_commit, ref: ref, name: 'build', stage: 'build') }
+ let(:test) { create(:ci_build, commit: ci_commit, ref: ref, name: 'test', stage: 'test') }
+
+ before do
+ # This behavior of MergeRequest: we instantiate a new object
+ allow_any_instance_of(MergeRequest).to receive(:ci_commit).and_wrap_original do
+ Ci::Commit.find(ci_commit.id)
+ end
+
+ # We create test after the build
+ allow(ci_commit).to receive(:create_next_builds).and_wrap_original do
+ test
+ end
+ end
+
+ it "doesn't merge if some stages failed" do
+ expect(MergeWorker).to_not receive(:perform_async)
+ build.success
+ test.drop
+ end
+
+ it 'merge when all stages succeeded' do
+ expect(MergeWorker).to receive(:perform_async)
+ build.success
+ test.success
+ end
+ end
end
describe "#cancel" do