diff --git a/app/models/ci/runner.rb b/app/models/ci/runner.rb index b7af33c0480d8910c4253480c5b69e269a14394a..586740a4a2a7a84cea6770971469a4784eb7df9f 100644 --- a/app/models/ci/runner.rb +++ b/app/models/ci/runner.rb @@ -146,6 +146,10 @@ module Ci runner_groups.any? end + def project? + runner_projects.any? + end + def can_pick?(build) return false if self.ref_protected? && !build.protected? diff --git a/spec/models/ci/runner_spec.rb b/spec/models/ci/runner_spec.rb index a073af7c4b28874acfb810edcd1da342810b26be..308db9e8e688869c9cd24006da1ac97688e62a45 100644 --- a/spec/models/ci/runner_spec.rb +++ b/spec/models/ci/runner_spec.rb @@ -660,9 +660,7 @@ describe Ci::Runner do describe 'group?' do it 'returns false when the runner is a project runner' do project = create :project - runner = create(:ci_runner, description: 'Project runner').tap do |r| - create :ci_runner_project, runner: r, project: project - end + runner = create :ci_runner, description: 'Project runner', projects: [project] expect(runner.group?).to be false end @@ -680,4 +678,26 @@ describe Ci::Runner do expect(runner.group?).to be true end end + + describe 'project?' do + it 'returns false when the runner is a group prunner' do + group = create :group + runner = create :ci_runner, description: 'Group runner', groups: [group] + + expect(runner.project?).to be false + end + + it 'returns false when the runner is a shared runner' do + runner = create :ci_runner, :shared, description: 'Shared runner' + + expect(runner.project?).to be false + end + + it 'returns true when the runner is assigned to a project' do + project = create :project + runner = create :ci_runner, description: 'Group runner', projects: [project] + + expect(runner.project?).to be true + end + end end