diff options
author | Josh Frye <joshfng@gmail.com> | 2016-06-01 19:27:21 -0400 |
---|---|---|
committer | Josh Frye <joshfng@gmail.com> | 2016-06-02 09:13:59 -0400 |
commit | 8835b7889a6265aba3c6d7ee241abf80a1cf07f3 (patch) | |
tree | 3aa27ff37269152c6f24e1038461acd84f12389e | |
parent | bfccea370310d6f7e5fe16c846ccd073d487a97f (diff) | |
download | gitlab-ce-8835b7889a6265aba3c6d7ee241abf80a1cf07f3.tar.gz |
Flush cache in callback. Add tests
-rw-r--r-- | app/models/concerns/issuable.rb | 8 | ||||
-rw-r--r-- | app/models/user.rb | 13 | ||||
-rw-r--r-- | spec/features/issues_spec.rb | 15 |
3 files changed, 32 insertions, 4 deletions
diff --git a/app/models/concerns/issuable.rb b/app/models/concerns/issuable.rb index 2326a395cb8..46cde460952 100644 --- a/app/models/concerns/issuable.rb +++ b/app/models/concerns/issuable.rb @@ -68,6 +68,14 @@ module Issuable strip_attributes :title acts_as_paranoid + + after_save :update_assignee_cache_counts, if: :assignee_id_changed? + + def update_assignee_cache_counts + # make sure we flush the cache for both the old *and* new assignee + User.find(assignee_id_was).update_cache_counts if assignee_id_was + assignee.update_cache_counts if assignee_id + end end module ClassMethods diff --git a/app/models/user.rb b/app/models/user.rb index 55f8e149629..172845c9d25 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -776,18 +776,23 @@ class User < ActiveRecord::Base notification_settings.find_or_initialize_by(source: source) end - def assigned_open_merge_request_count - Rails.cache.fetch(['users', id, 'assigned_open_merge_request_count'], expires_in: 60) do + def assigned_open_merge_request_count(force: false) + Rails.cache.fetch(['users', id, 'assigned_open_merge_request_count'], force: force) do assigned_merge_requests.opened.count end end - def assigned_open_issues_count - Rails.cache.fetch(['users', id, 'assigned_open_issues_count'], expires_in: 60) do + def assigned_open_issues_count(force: false) + Rails.cache.fetch(['users', id, 'assigned_open_issues_count'], force: force) do assigned_issues.opened.count end end + def update_cache_counts + assigned_open_merge_request_count(force: true) + assigned_open_issues_count(force: true) + end + private def projects_union diff --git a/spec/features/issues_spec.rb b/spec/features/issues_spec.rb index 9271964166a..fa0d8e1a0cd 100644 --- a/spec/features/issues_spec.rb +++ b/spec/features/issues_spec.rb @@ -62,6 +62,21 @@ describe 'Issues', feature: true do expect(issue.reload.assignee).to be_nil end + + it 'updates assigned cache count on change', js: true do + visit edit_namespace_project_issue_path(project.namespace, project, issue) + + expect(page).to have_content "Assignee #{@user.name}" + expect(@user.assigned_open_issues_count).to eq @user.assigned_issues.opened.count + + first('#s2id_issue_assignee_id').click + sleep 2 # wait for ajax stuff to complete + first('.user-result').click + + click_button 'Save changes' + + expect(@user.assigned_open_issues_count).to eq @user.assigned_issues.opened.count + end end describe 'due date', js: true do |