summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Lopez <james@gitlab.com>2018-05-11 10:32:43 +0000
committerJames Lopez <james@gitlab.com>2018-05-11 10:32:43 +0000
commitf811495e86aff85b0b9729b40a5fd00973157261 (patch)
tree814d2783e97a4001af1cf01b509920ad5d31dbbe
parent3a7d28597e3e23ef497186891662b4a85d013b08 (diff)
parent7c3e42f0196fdd13a61436d83c66418ca8ea6c3b (diff)
downloadgitlab-ce-f811495e86aff85b0b9729b40a5fd00973157261.tar.gz
Merge branch '10-8-stable-prepare-rc8-fix-conflict-for-18874' into '10-8-stable-prepare-rc8'
Fixes conflict when picking into prep branch See merge request gitlab-org/gitlab-ce!18900
-rw-r--r--app/models/ci/runner.rb8
-rw-r--r--spec/models/ci/runner_spec.rb28
2 files changed, 28 insertions, 8 deletions
diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb
index 23078f1c3ed..9b76817b4c8 100644
--- a/app/models/ci/runner.rb
+++ b/app/models/ci/runner.rb
@@ -107,7 +107,13 @@ module Ci
end
def assign_to(project, current_user = nil)
- self.is_shared = false if shared?
+ if shared?
+ self.is_shared = false if shared?
+ self.runner_type = :project_type
+ elsif group_type?
+ raise ArgumentError, 'Transitioning a group runner to a project runner is not supported'
+ end
+
self.save
project.runner_projects.create(runner_id: self.id)
end
diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb
index cc4d4e5e4ae..4c1d3c712f4 100644
--- a/spec/models/ci/runner_spec.rb
+++ b/spec/models/ci/runner_spec.rb
@@ -198,16 +198,30 @@ describe Ci::Runner do
end
describe '#assign_to' do
- let!(:project) { FactoryBot.create :project }
- let!(:shared_runner) { FactoryBot.create(:ci_runner, :shared) }
+ let!(:project) { FactoryBot.create(:project) }
- before do
- shared_runner.assign_to(project)
+ subject { runner.assign_to(project) }
+
+ context 'with shared runner' do
+ let!(:runner) { FactoryBot.create(:ci_runner, :shared) }
+
+ it 'transitions shared runner to project runner and assigns project' do
+ subject
+ expect(runner).to be_specific
+ expect(runner).to be_project_type
+ expect(runner.projects).to eq([project])
+ expect(runner.only_for?(project)).to be_truthy
+ end
end
- it { expect(shared_runner).to be_specific }
- it { expect(shared_runner.projects).to eq([project]) }
- it { expect(shared_runner.only_for?(project)).to be_truthy }
+ context 'with group runner' do
+ let!(:runner) { FactoryBot.create(:ci_runner, runner_type: :group_type) }
+
+ it 'raises an error' do
+ expect { subject }
+ .to raise_error(ArgumentError, 'Transitioning a group runner to a project runner is not supported')
+ end
+ end
end
describe '.online' do