From a5ab418c370d79b3fe7e82ad00c47459ade678d8 Mon Sep 17 00:00:00 2001
From: Grzegorz Bizon <grzesiek.bizon@gmail.com>
Date: Fri, 20 Jan 2017 14:32:32 +0100
Subject: [PATCH] Add missing specs for update build queue service

---
 app/services/ci/update_build_queue_service.rb |  4 +-
 .../ci/update_build_queue_service_spec.rb     | 47 +++++++++++++++++++
 2 files changed, 50 insertions(+), 1 deletion(-)
 create mode 100644 spec/services/ci/update_build_queue_service_spec.rb

diff --git a/app/services/ci/update_build_queue_service.rb b/app/services/ci/update_build_queue_service.rb
index d57adf27104..152c8ae5006 100644
--- a/app/services/ci/update_build_queue_service.rb
+++ b/app/services/ci/update_build_queue_service.rb
@@ -7,11 +7,13 @@ module Ci
         end
       end
 
+      return unless build.project.shared_runners_enabled?
+
       Ci::Runner.shared.each do |runner|
         if runner.can_pick?(build)
           runner.tick_runner_queue
         end
-      end if build.project.shared_runners_enabled?
+      end
     end
   end
 end
diff --git a/spec/services/ci/update_build_queue_service_spec.rb b/spec/services/ci/update_build_queue_service_spec.rb
new file mode 100644
index 00000000000..f01a388b895
--- /dev/null
+++ b/spec/services/ci/update_build_queue_service_spec.rb
@@ -0,0 +1,47 @@
+require 'spec_helper'
+
+describe Ci::UpdateBuildQueueService, :services do
+  let(:project) { create(:project) }
+  let(:build) { create(:ci_build, pipeline: pipeline) }
+  let(:pipeline) { create(:ci_pipeline, project: project) }
+
+  context 'when updating specific runners' do
+    let(:runner) { create(:ci_runner) }
+
+    context 'when there are runner that can pick build' do
+      before { build.project.runners << runner }
+
+      it 'ticks runner queue value' do
+        expect { subject.execute(build) }
+          .to change { runner.ensure_runner_queue_value }
+      end
+    end
+
+    context 'when there are no runners that can pick build' do
+      it 'does not tick runner queue value' do
+        expect { subject.execute(build) }
+          .not_to change { runner.ensure_runner_queue_value }
+      end
+    end
+  end
+
+  context 'when updating shared runners' do
+    let(:runner) { create(:ci_runner, :shared) }
+
+    context 'when there are runner that can pick build' do
+      it 'ticks runner queue value' do
+        expect { subject.execute(build) }
+          .to change { runner.ensure_runner_queue_value }
+      end
+    end
+
+    context 'when there are no runners that can pick build' do
+      before { build.tag_list = [:docker] }
+
+      it 'does not tick runner queue value' do
+        expect { subject.execute(build) }
+          .not_to change { runner.ensure_runner_queue_value }
+      end
+    end
+  end
+end
-- 
GitLab