summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Frye <joshfng@gmail.com>2016-06-01 19:27:21 -0400
committerJosh Frye <joshfng@gmail.com>2016-06-02 09:13:59 -0400
commit8835b7889a6265aba3c6d7ee241abf80a1cf07f3 (patch)
tree3aa27ff37269152c6f24e1038461acd84f12389e
parentbfccea370310d6f7e5fe16c846ccd073d487a97f (diff)
downloadgitlab-ce-8835b7889a6265aba3c6d7ee241abf80a1cf07f3.tar.gz
Flush cache in callback. Add tests
-rw-r--r--app/models/concerns/issuable.rb8
-rw-r--r--app/models/user.rb13
-rw-r--r--spec/features/issues_spec.rb15
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