Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/models/user.rb5
-rw-r--r--app/services/issuable/destroy_service.rb1
-rw-r--r--changelogs/unreleased/ui-mr-counter-cache.yml5
-rw-r--r--spec/services/issuable/destroy_service_spec.rb14
4 files changed, 18 insertions, 7 deletions
diff --git a/app/models/user.rb b/app/models/user.rb
index 7b6857a0d34..ce56b39b1c8 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -1046,11 +1046,6 @@ class User < ActiveRecord::Base
end
end
- def update_cache_counts
- assigned_open_merge_requests_count(force: true)
- assigned_open_issues_count(force: true)
- end
-
def update_todos_count_cache
todos_done_count(force: true)
todos_pending_count(force: true)
diff --git a/app/services/issuable/destroy_service.rb b/app/services/issuable/destroy_service.rb
index 7197a426a72..0b1a33518c6 100644
--- a/app/services/issuable/destroy_service.rb
+++ b/app/services/issuable/destroy_service.rb
@@ -4,6 +4,7 @@ module Issuable
TodoService.new.destroy_target(issuable) do |issuable|
if issuable.destroy
issuable.update_project_counter_caches
+ issuable.assignees.each(&:invalidate_cache_counts)
end
end
end
diff --git a/changelogs/unreleased/ui-mr-counter-cache.yml b/changelogs/unreleased/ui-mr-counter-cache.yml
new file mode 100644
index 00000000000..5e241bfe93f
--- /dev/null
+++ b/changelogs/unreleased/ui-mr-counter-cache.yml
@@ -0,0 +1,5 @@
+---
+title: Deleting a MR you are assigned to should decrements counter
+merge_request: 17951
+author: m b
+type: fixed
diff --git a/spec/services/issuable/destroy_service_spec.rb b/spec/services/issuable/destroy_service_spec.rb
index 0a3647a814f..8ccbba7fa58 100644
--- a/spec/services/issuable/destroy_service_spec.rb
+++ b/spec/services/issuable/destroy_service_spec.rb
@@ -8,7 +8,7 @@ describe Issuable::DestroyService do
describe '#execute' do
context 'when issuable is an issue' do
- let!(:issue) { create(:issue, project: project, author: user) }
+ let!(:issue) { create(:issue, project: project, author: user, assignees: [user]) }
it 'destroys the issue' do
expect { service.execute(issue) }.to change { project.issues.count }.by(-1)
@@ -26,10 +26,15 @@ describe Issuable::DestroyService do
expect { service.execute(issue) }
.to change { user.todos_pending_count }.from(1).to(0)
end
+
+ it 'invalidates the issues count cache for the assignees' do
+ expect_any_instance_of(User).to receive(:invalidate_cache_counts).once
+ service.execute(issue)
+ end
end
context 'when issuable is a merge request' do
- let!(:merge_request) { create(:merge_request, target_project: project, source_project: project, author: user) }
+ let!(:merge_request) { create(:merge_request, target_project: project, source_project: project, author: user, assignee: user) }
it 'destroys the merge request' do
expect { service.execute(merge_request) }.to change { project.merge_requests.count }.by(-1)
@@ -41,6 +46,11 @@ describe Issuable::DestroyService do
service.execute(merge_request)
end
+ it 'invalidates the merge request caches for the MR assignee' do
+ expect_any_instance_of(User).to receive(:invalidate_cache_counts).once
+ service.execute(merge_request)
+ end
+
it 'updates the todo caches for users with todos on the merge request' do
create(:todo, target: merge_request, user: user, author: user, project: project)