Fix counters cache invalidation for Issues and Merge Requests
This commit is contained in:
parent
0d65fd031d
commit
33687db01d
11 changed files with 44 additions and 0 deletions
|
@ -28,6 +28,7 @@ module Issues
|
|||
notification_service.close_issue(issue, current_user) if notifications
|
||||
todo_service.close_issue(issue, current_user)
|
||||
execute_hooks(issue, 'close')
|
||||
invalidate_cache_counts(issue.assignees, issue)
|
||||
end
|
||||
|
||||
issue
|
||||
|
|
|
@ -8,6 +8,7 @@ module Issues
|
|||
create_note(issue)
|
||||
notification_service.reopen_issue(issue, current_user)
|
||||
execute_hooks(issue, 'reopen')
|
||||
invalidate_cache_counts(issue.assignees, issue)
|
||||
end
|
||||
|
||||
issue
|
||||
|
|
|
@ -13,6 +13,7 @@ module MergeRequests
|
|||
notification_service.close_mr(merge_request, current_user)
|
||||
todo_service.close_merge_request(merge_request, current_user)
|
||||
execute_hooks(merge_request, 'close')
|
||||
invalidate_cache_counts(merge_request.assignees, merge_request)
|
||||
end
|
||||
|
||||
merge_request
|
||||
|
|
|
@ -13,6 +13,7 @@ module MergeRequests
|
|||
create_note(merge_request)
|
||||
notification_service.merge_mr(merge_request, current_user)
|
||||
execute_hooks(merge_request, 'merge')
|
||||
invalidate_cache_counts(merge_request.assignees, merge_request)
|
||||
end
|
||||
|
||||
private
|
||||
|
|
|
@ -10,6 +10,7 @@ module MergeRequests
|
|||
execute_hooks(merge_request, 'reopen')
|
||||
merge_request.reload_diff(current_user)
|
||||
merge_request.mark_as_unchecked
|
||||
invalidate_cache_counts(merge_request.assignees, merge_request)
|
||||
end
|
||||
|
||||
merge_request
|
||||
|
|
|
@ -41,6 +41,12 @@ describe Issues::CloseService, services: true do
|
|||
|
||||
service.execute(issue)
|
||||
end
|
||||
|
||||
it 'invalidates counter cache for assignees' do
|
||||
expect_any_instance_of(User).to receive(:invalidate_issue_cache_counts)
|
||||
|
||||
service.execute(issue)
|
||||
end
|
||||
end
|
||||
|
||||
describe '#close_issue' do
|
||||
|
|
|
@ -27,6 +27,13 @@ describe Issues::ReopenService, services: true do
|
|||
project.team << [user, :master]
|
||||
end
|
||||
|
||||
it 'invalidates counter cache for assignees' do
|
||||
issue.assignees << user
|
||||
expect_any_instance_of(User).to receive(:invalidate_issue_cache_counts)
|
||||
|
||||
described_class.new(project, user).execute(issue)
|
||||
end
|
||||
|
||||
context 'when issue is not confidential' do
|
||||
it 'executes issue hooks' do
|
||||
expect(project).to receive(:execute_hooks).with(an_instance_of(Hash), :issue_hooks)
|
||||
|
|
|
@ -15,6 +15,8 @@ describe MergeRequests::CloseService, services: true do
|
|||
end
|
||||
|
||||
describe '#execute' do
|
||||
it_behaves_like 'cache counters invalidator'
|
||||
|
||||
context 'valid params' do
|
||||
let(:service) { described_class.new(project, user, {}) }
|
||||
|
||||
|
|
15
spec/services/merge_requests/post_merge_service_spec.rb
Normal file
15
spec/services/merge_requests/post_merge_service_spec.rb
Normal file
|
@ -0,0 +1,15 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe MergeRequests::PostMergeService, services: true do
|
||||
let(:user) { create(:user) }
|
||||
let(:merge_request) { create(:merge_request, assignee: user) }
|
||||
let(:project) { merge_request.project }
|
||||
|
||||
before do
|
||||
project.team << [user, :master]
|
||||
end
|
||||
|
||||
describe '#execute' do
|
||||
it_behaves_like 'cache counters invalidator'
|
||||
end
|
||||
end
|
|
@ -14,6 +14,8 @@ describe MergeRequests::ReopenService, services: true do
|
|||
end
|
||||
|
||||
describe '#execute' do
|
||||
it_behaves_like 'cache counters invalidator'
|
||||
|
||||
context 'valid params' do
|
||||
let(:service) { described_class.new(project, user, {}) }
|
||||
|
||||
|
|
7
spec/support/issuable_shared_examples.rb
Normal file
7
spec/support/issuable_shared_examples.rb
Normal file
|
@ -0,0 +1,7 @@
|
|||
shared_examples 'cache counters invalidator' do
|
||||
it 'invalidates counter cache for assignees' do
|
||||
expect_any_instance_of(User).to receive(:invalidate_merge_request_cache_counts)
|
||||
|
||||
described_class.new(project, user, {}).execute(merge_request)
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue