Commit 61b97fe3 authored by Pedro Pombeiro's avatar Pedro Pombeiro

Implement a :type argument in the Reset mutation

parent 059a0149
...@@ -10,8 +10,12 @@ module Mutations ...@@ -10,8 +10,12 @@ module Mutations
ScopeID = ::GraphQL::ID_TYPE ScopeID = ::GraphQL::ID_TYPE
argument :type, ::Types::Ci::RunnerTypeEnum,
required: true,
description: 'Scope of the object to reset the token for.'
argument :id, ScopeID, argument :id, ScopeID,
required: true, required: false,
description: 'ID of the project or group to reset the token for. Omit if resetting instance runner token.' description: 'ID of the project or group to reset the token for. Omit if resetting instance runner token.'
field :token, field :token,
...@@ -21,27 +25,37 @@ module Mutations ...@@ -21,27 +25,37 @@ module Mutations
def resolve(**args) def resolve(**args)
{ {
token: reset_token(args[:id]), token: reset_token(**args),
errors: [] errors: []
} }
end end
private private
def find_object(id:) def find_object(type:, **args)
return unless id id = args[:id]
GitlabSchema.object_from_id(id, expected_type: [::Project, ::Group]) case type
when 'group_type'
GitlabSchema.object_from_id(id, expected_type: ::Group)
when 'project_type'
GitlabSchema.object_from_id(id, expected_type: ::Project)
end
end end
def reset_token(id) def reset_token(type:, **args)
if id.blank? id = args[:id]
case type
when 'instance_type'
raise Gitlab::Graphql::Errors::ArgumentError, "id must not be specified for '#{type}' scope" if id.present?
authorize!(:global) authorize!(:global)
ApplicationSetting.current.reset_runners_registration_token! ApplicationSetting.current.reset_runners_registration_token!
ApplicationSetting.current_without_cache.runners_registration_token ApplicationSetting.current_without_cache.runners_registration_token
else when 'group_type', 'project_type'
project_or_group = authorized_find!(id: id) project_or_group = authorized_find!(type: type, id: id)
project_or_group.reset_runners_token! project_or_group.reset_runners_token!
project_or_group.runners_token project_or_group.runners_token
end end
......
...@@ -3538,7 +3538,8 @@ Input type: `RunnersRegistrationTokenResetInput` ...@@ -3538,7 +3538,8 @@ Input type: `RunnersRegistrationTokenResetInput`
| Name | Type | Description | | Name | Type | Description |
| ---- | ---- | ----------- | | ---- | ---- | ----------- |
| <a id="mutationrunnersregistrationtokenresetclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. | | <a id="mutationrunnersregistrationtokenresetclientmutationid"></a>`clientMutationId` | [`String`](#string) | A unique identifier for the client performing the mutation. |
| <a id="mutationrunnersregistrationtokenresetid"></a>`id` | [`ID!`](#id) | ID of the project or group to reset the token for. Omit if resetting instance runner token. | | <a id="mutationrunnersregistrationtokenresetid"></a>`id` | [`ID`](#id) | ID of the project or group to reset the token for. Omit if resetting instance runner token. |
| <a id="mutationrunnersregistrationtokenresettype"></a>`type` | [`CiRunnerType!`](#cirunnertype) | Scope of the object to reset the token for. |
#### Fields #### Fields
......
...@@ -38,7 +38,7 @@ RSpec.describe 'RunnersRegistrationTokenReset' do ...@@ -38,7 +38,7 @@ RSpec.describe 'RunnersRegistrationTokenReset' do
end end
end end
shared_context 'when authorized' do shared_context 'when authorized' do |scope|
it 'resets runner registration token' do it 'resets runner registration token' do
expect { subject }.to change { get_token } expect { subject }.to change { get_token }
expect(response).to have_gitlab_http_status(:success) expect(response).to have_gitlab_http_status(:success)
...@@ -49,8 +49,8 @@ RSpec.describe 'RunnersRegistrationTokenReset' do ...@@ -49,8 +49,8 @@ RSpec.describe 'RunnersRegistrationTokenReset' do
expect(mutation_response['token']).to eq(get_token) expect(mutation_response['token']).to eq(get_token)
end end
context 'when bad arguments are provided' do context 'when malformed id is provided' do
let(:input) { { id: 'some string' } } let(:input) { { type: "#{scope.upcase}_TYPE", id: 'some string' } }
it 'returns errors' do it 'returns errors' do
expect { subject }.not_to change { get_token } expect { subject }.not_to change { get_token }
...@@ -64,13 +64,13 @@ RSpec.describe 'RunnersRegistrationTokenReset' do ...@@ -64,13 +64,13 @@ RSpec.describe 'RunnersRegistrationTokenReset' do
context 'applied to project' do context 'applied to project' do
let_it_be(:project) { create_default(:project) } let_it_be(:project) { create_default(:project) }
let(:input) { { id: project.to_global_id.to_s } } let(:input) { { type: 'PROJECT_TYPE', id: project.to_global_id.to_s } }
include_context 'when unauthorized', 'project' do include_context 'when unauthorized', 'project' do
let(:target) { project } let(:target) { project }
end end
include_context 'when authorized' do include_context 'when authorized', 'project' do
let_it_be(:user) { project.owner } let_it_be(:user) { project.owner }
def get_token def get_token
...@@ -82,13 +82,13 @@ RSpec.describe 'RunnersRegistrationTokenReset' do ...@@ -82,13 +82,13 @@ RSpec.describe 'RunnersRegistrationTokenReset' do
context 'applied to group' do context 'applied to group' do
let_it_be(:group) { create_default(:group) } let_it_be(:group) { create_default(:group) }
let(:input) { { id: group.to_global_id.to_s } } let(:input) { { type: 'GROUP_TYPE', id: group.to_global_id.to_s } }
include_context 'when unauthorized', 'group' do include_context 'when unauthorized', 'group' do
let(:target) { group } let(:target) { group }
end end
include_context 'when authorized' do include_context 'when authorized', 'group' do
let_it_be(:user) { create_default(:group_member, :maintainer, user: create(:user), group: group ).user } let_it_be(:user) { create_default(:group_member, :maintainer, user: create(:user), group: group ).user }
def get_token def get_token
...@@ -103,7 +103,7 @@ RSpec.describe 'RunnersRegistrationTokenReset' do ...@@ -103,7 +103,7 @@ RSpec.describe 'RunnersRegistrationTokenReset' do
stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false') stub_env('IN_MEMORY_APPLICATION_SETTINGS', 'false')
end end
let(:input) { {} } let(:input) { { type: 'INSTANCE_TYPE' } }
context 'when unauthorized' do context 'when unauthorized' do
let(:user) { create(:user) } let(:user) { create(:user) }
...@@ -111,7 +111,7 @@ RSpec.describe 'RunnersRegistrationTokenReset' do ...@@ -111,7 +111,7 @@ RSpec.describe 'RunnersRegistrationTokenReset' do
it_behaves_like 'unauthorized' it_behaves_like 'unauthorized'
end end
include_context 'when authorized' do include_context 'when authorized', 'instance' do
let_it_be(:user) { create(:user, :admin) } let_it_be(:user) { create(:user, :admin) }
def get_token def get_token
......
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