diff --git a/app/services/gpg_keys/destroy_service.rb b/app/services/gpg_keys/destroy_service.rb new file mode 100644 index 0000000000000000000000000000000000000000..cecbfe266112b0f660f4bfdc871ad91bbe1385d6 --- /dev/null +++ b/app/services/gpg_keys/destroy_service.rb @@ -0,0 +1,9 @@ +# frozen_string_literal: true + +module GpgKeys + class DestroyService < Keys::BaseService + def execute(key) + key.destroy + end + end +end diff --git a/changelogs/unreleased/services-usage-7.yml b/changelogs/unreleased/services-usage-7.yml new file mode 100644 index 0000000000000000000000000000000000000000..ca3900f36a3ad60add869251a5794db9bef2f882 --- /dev/null +++ b/changelogs/unreleased/services-usage-7.yml @@ -0,0 +1,5 @@ +--- +title: Add DestroyService for GPG keys and use for deleting GPG keys via API +merge_request: 34935 +author: Rajendra Kadam +type: fixed diff --git a/lib/api/users.rb b/lib/api/users.rb index 85a33c608e566406234cd23f8a3e0268cef30c64..192eeb691ffc31dd557bc5b38d064219cb0a4d0b 100644 --- a/lib/api/users.rb +++ b/lib/api/users.rb @@ -374,9 +374,10 @@ def reorder_users(users) key = user.gpg_keys.find_by(id: params[:key_id]) not_found!('GPG Key') unless key - key.destroy - - no_content! + destroy_conditionally!(key) do |key| + destroy_service = ::GpgKeys::DestroyService.new(current_user) + destroy_service.execute(key) + end end # rubocop: enable CodeReuse/ActiveRecord diff --git a/spec/services/gpg_keys/destroy_service_spec.rb b/spec/services/gpg_keys/destroy_service_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..82c7ab7adaa3dbb170193c34211a7465e5e506d3 --- /dev/null +++ b/spec/services/gpg_keys/destroy_service_spec.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +require 'spec_helper' + +describe GpgKeys::DestroyService do + let(:user) { create(:user) } + + subject { described_class.new(user) } + + it 'destroys the GPG key' do + gpg_key = create(:gpg_key) + + expect { subject.execute(gpg_key) }.to change(GpgKey, :count).by(-1) + end +end