Skip to content

Commit 7fb1bb0

Browse files
committed
Create issue and merge request destroy services
1 parent d199ecd commit 7fb1bb0

File tree

8 files changed

+59
-5
lines changed

8 files changed

+59
-5
lines changed

app/controllers/concerns/issuable_actions.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def realtime_changes
5454
end
5555

5656
def destroy
57-
issuable.destroy
57+
Issuable::DestroyService.new(project, current_user).execute(issuable)
5858
TodoService.new.destroy_issuable(issuable, current_user)
5959

6060
name = issuable.human_class_name

app/models/issue.rb

-1
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@ class Issue < ActiveRecord::Base
4949
scope :public_only, -> { where(confidential: false) }
5050

5151
after_save :expire_etag_cache
52-
after_commit :update_project_counter_caches, on: :destroy
5352

5453
attr_spammable :title, spam_title: true
5554
attr_spammable :description, spam_description: true

app/models/merge_request.rb

-1
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ def merge_request_diff(*args)
5252

5353
after_create :ensure_merge_request_diff, unless: :importing?
5454
after_update :reload_diff_if_branch_changed
55-
after_commit :update_project_counter_caches, on: :destroy
5655

5756
# When this attribute is true some MR validation is ignored
5857
# It allows us to close or modify broken merge requests
+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
module Issuable
2+
class DestroyService < IssuableBaseService
3+
def execute(issuable)
4+
if issuable.destroy
5+
issuable.update_project_counter_caches
6+
end
7+
end
8+
end
9+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
title: Create issuable destroy service
3+
merge_request: 15604
4+
author: George Andrinopoulos
5+
type: other

lib/api/issues.rb

+3-1
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,9 @@ def find_issues(args = {})
255255

256256
authorize!(:destroy_issue, issue)
257257

258-
destroy_conditionally!(issue)
258+
destroy_conditionally!(issue) do |issue|
259+
Issuable::DestroyService.new(user_project, current_user).execute(issue)
260+
end
259261
end
260262

261263
desc 'List merge requests closing issue' do

lib/api/merge_requests.rb

+3-1
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,9 @@ def handle_merge_request_errors!(errors)
167167

168168
authorize!(:destroy_merge_request, merge_request)
169169

170-
destroy_conditionally!(merge_request)
170+
destroy_conditionally!(merge_request) do |merge_request|
171+
Issuable::DestroyService.new(user_project, current_user).execute(merge_request)
172+
end
171173
end
172174

173175
params do
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
require 'spec_helper'
2+
3+
describe Issuable::DestroyService do
4+
let(:user) { create(:user) }
5+
let(:project) { create(:project) }
6+
7+
subject(:service) { described_class.new(project, user) }
8+
9+
describe '#execute' do
10+
context 'when issuable is an issue' do
11+
let!(:issue) { create(:issue, project: project, author: user) }
12+
13+
it 'destroys the issue' do
14+
expect { service.execute(issue) }.to change { project.issues.count }.by(-1)
15+
end
16+
17+
it 'updates open issues count cache' do
18+
expect_any_instance_of(Projects::OpenIssuesCountService).to receive(:refresh_cache)
19+
20+
service.execute(issue)
21+
end
22+
end
23+
24+
context 'when issuable is a merge request' do
25+
let!(:merge_request) { create(:merge_request, target_project: project, source_project: project, author: user) }
26+
27+
it 'destroys the merge request' do
28+
expect { service.execute(merge_request) }.to change { project.merge_requests.count }.by(-1)
29+
end
30+
31+
it 'updates open merge requests count cache' do
32+
expect_any_instance_of(Projects::OpenMergeRequestsCountService).to receive(:refresh_cache)
33+
34+
service.execute(merge_request)
35+
end
36+
end
37+
end
38+
end

0 commit comments

Comments
 (0)