Commit f13ac937 authored by Nourdin el Bacha's avatar Nourdin el Bacha

Restrict Runner.locked to project runners

This commit introduces a Presentable, which adds the following:
- `locked` for GraphQL vue component
- `locked?` for haml component
And the specs are refactored, using TableSyntax

Changelog: fixed
parent 0ef98c4a
......@@ -5,6 +5,7 @@ module Types
class RunnerType < BaseObject
graphql_name 'CiRunner'
authorize :read_runner
present_using ::Ci::RunnerPresenter
JOB_COUNT_LIMIT = 1000
......
......@@ -11,6 +11,7 @@ module Ci
include FeatureGate
include Gitlab::Utils::StrongMemoize
include TaggableQueries
include Presentable
add_authentication_token_field :token, encrypted: :optional
......
# frozen_string_literal: true
module Ci
class RunnerPresenter < Gitlab::View::Presenter::Delegated
presents :runner
def locked?
read_attribute(:locked) && project_type?
end
alias_method :locked, :locked?
end
end
......@@ -96,6 +96,7 @@
.table-section.section-10{ role: 'rowheader' }
- @group_runners.each do |runner|
- runner = runner.present(current_user: current_user)
= render 'groups/runners/runner', runner: runner
= paginate @group_runners, theme: 'gitlab', :params => { :anchor => 'runners-settings' }
- else
......
......@@ -52,14 +52,14 @@ RSpec.describe 'Query.runner(id)' do
'version' => runner.version,
'shortSha' => runner.short_sha,
'revision' => runner.revision,
'locked' => runner.locked,
'locked' => false,
'active' => runner.active,
'status' => runner.status.to_s.upcase,
'maximumTimeout' => runner.maximum_timeout,
'accessLevel' => runner.access_level.to_s.upcase,
'runUntagged' => runner.run_untagged,
'ipAddress' => runner.ip_address,
'runnerType' => 'INSTANCE_TYPE',
'runnerType' => runner.instance_type? ? 'INSTANCE_TYPE' : 'PROJECT_TYPE',
'jobCount' => 0,
'projectCount' => nil
)
......@@ -109,6 +109,40 @@ RSpec.describe 'Query.runner(id)' do
end
end
describe 'for project runner' do
using RSpec::Parameterized::TableSyntax
where(is_locked: [true, false])
with_them do
let(:project_runner) do
create(:ci_runner, :project, description: 'Runner 3', contacted_at: 1.day.ago, active: false, locked: is_locked,
version: 'adfe157', revision: 'b', ip_address: '10.10.10.10', access_level: 1, run_untagged: true)
end
let(:query) do
wrap_fields(query_graphql_path(query_path, all_graphql_fields_for('CiRunner')))
end
let(:query_path) do
[
[:runner, { id: project_runner.to_global_id.to_s }]
]
end
it 'retrieves correct locked value' do
post_graphql(query, current_user: user)
runner_data = graphql_data_at(:runner)
expect(runner_data).to match a_hash_including(
'id' => "gid://gitlab/Ci::Runner/#{project_runner.id}",
'locked' => is_locked
)
end
end
end
describe 'for inactive runner' do
it_behaves_like 'runner details fetch', :inactive_instance_runner
end
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment