Browse Source

Performance: Readd authorizations caching (0b6010c390fa7af469a3a4f08d284ae70527e0d3).

Rolf Schmidt 2 years ago
parent
commit
85148acf6a
2 changed files with 26 additions and 7 deletions
  1. 10 7
      app/models/user/assets.rb
  2. 16 0
      spec/models/authorization_spec.rb

+ 10 - 7
app/models/user/assets.rb

@@ -42,14 +42,17 @@ returns
       data[ app_model ][ id ] = local_attributes
 
       # get linked accounts
-      local_accounts = {}
-      authorizations.each do |authorization|
-        local_accounts[authorization.provider] = {
-          uid:      authorization[:uid],
-          username: authorization[:username]
-        }
+      local_attributes['accounts'] = Rails.cache.fetch("User/authorizations/#{cache_key_with_version}") do
+        local_accounts = {}
+        authorizations = self.authorizations()
+        authorizations.each do |authorization|
+          local_accounts[authorization.provider] = {
+            uid:      authorization[:uid],
+            username: authorization[:username]
+          }
+        end
+        local_accounts
       end
-      local_attributes['accounts'] = local_accounts
 
       # get roles
       local_attributes['role_ids']&.each do |role_id|

+ 16 - 0
spec/models/authorization_spec.rb

@@ -0,0 +1,16 @@
+# Copyright (C) 2012-2022 Zammad Foundation, https://zammad-foundation.org/
+
+require 'rails_helper'
+
+RSpec.describe Authorization, type: :model do
+  subject(:authorization) { create(:twitter_authorization) }
+
+  describe 'User assets' do
+    it 'does update assets after new authorizations created' do
+      authorization.user.assets({})
+      create(:twitter_authorization, provider: 'twitter2', user: authorization.user)
+      assets = authorization.user.reload.assets({})
+      expect(assets[:User][authorization.user.id]['accounts'].keys.count).to eq(2)
+    end
+  end
+end