From 9f990f8352217a9e3311631e0a9c6d697ed131a1 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Tue, 2 May 2017 05:24:05 +0200 Subject: [PATCH] Fixed issue #1012 - Gui stuck / Error on random switching through overviews. --- .../app/controllers/ticket_overview.coffee | 2 +- .../app/lib/app_init/session.coffee | 4 +- lib/sessions/backend/base.rb | 20 ++++++--- test/unit/session_collections_test.rb | 41 ++++++++++++++++++- test/unit/session_enhanced_test.rb | 6 ++- 5 files changed, 63 insertions(+), 10 deletions(-) diff --git a/app/assets/javascripts/app/controllers/ticket_overview.coffee b/app/assets/javascripts/app/controllers/ticket_overview.coffee index 432b1e0d6..dbe03f8a5 100644 --- a/app/assets/javascripts/app/controllers/ticket_overview.coffee +++ b/app/assets/javascripts/app/controllers/ticket_overview.coffee @@ -921,7 +921,7 @@ class Table extends App.Controller # get ticket list ticketListShow = [] for ticket in tickets - ticketListShow.push App.Ticket.fullLocal(ticket.id) + ticketListShow.push App.Ticket.find(ticket.id) # if customer and no ticket exists, show the following message only if !ticketListShow[0] && @permissionCheck('ticket.customer') diff --git a/app/assets/javascripts/app/lib/app_init/session.coffee b/app/assets/javascripts/app/lib/app_init/session.coffee index 719b9150a..2a670e8d7 100644 --- a/app/assets/javascripts/app/lib/app_init/session.coffee +++ b/app/assets/javascripts/app/lib/app_init/session.coffee @@ -8,12 +8,12 @@ class App.Session @get: ( key ) -> if _instance == undefined _instance ?= new _sessionSingleton - _instance.get( key ) + _instance.get(key) @set: ( user ) -> if _instance == undefined _instance ?= new _sessionSingleton - _instance.set( user ) + _instance.set(user) class _sessionSingleton extends Spine.Module @include App.LogInclude diff --git a/lib/sessions/backend/base.rb b/lib/sessions/backend/base.rb index 96a14721c..a807c64f8 100644 --- a/lib/sessions/backend/base.rb +++ b/lib/sessions/backend/base.rb @@ -11,11 +11,21 @@ class Sessions::Backend::Base def asset_needed?(record) class_name = record.class.to_s - if !@asset_lookup || !@asset_lookup[class_name] || !@asset_lookup[class_name][record.id] || @asset_lookup[class_name][record.id] < record.updated_at - if !@asset_lookup[class_name] - @asset_lookup[class_name] = {} - end - @asset_lookup[class_name][record.id] = record.updated_at + if !@asset_lookup || !@asset_lookup[class_name] || !@asset_lookup[class_name][record.id] + @asset_lookup[class_name] ||= {} + @asset_lookup[class_name][record.id] = { + updated_at: record.updated_at, + pushed_at: Time.zone.now, + } + return true + end + + if (!@asset_lookup[class_name][record.id][:updated_at] || @asset_lookup[class_name][record.id][:updated_at] < record.updated_at) || + (!@asset_lookup[class_name][record.id][:pushed_at] || @asset_lookup[class_name][record.id][:pushed_at] > Time.zone.now - 45.seconds) + @asset_lookup[class_name][record.id] = { + updated_at: record.updated_at, + pushed_at: Time.zone.now, + } return true end false diff --git a/test/unit/session_collections_test.rb b/test/unit/session_collections_test.rb index 4a2716c0d..ed9e45c2b 100644 --- a/test/unit/session_collections_test.rb +++ b/test/unit/session_collections_test.rb @@ -3,7 +3,7 @@ require 'test_helper' class SessionCollectionsTest < ActiveSupport::TestCase - test 'c collections' do + test 'a collections' do UserInfo.current_user_id = 1 @@ -168,4 +168,43 @@ class SessionCollectionsTest < ActiveSupport::TestCase nil end + test 'b assets' do + # create users + roles = Role.where(name: %w(Agent Admin)) + groups = Group.all + + UserInfo.current_user_id = 2 + agent1 = User.create_or_update( + login: 'sessions-assets-1', + firstname: 'Session', + lastname: "activity stream #{rand(99_999)}", + email: 'sessions-assets1@example.com', + password: 'agentpw', + active: true, + roles: roles, + groups: groups, + ) + assert(agent1.save, 'create/update agent1') + + assets = {} + client1 = Sessions::Backend::Collections::Group.new(agent1, assets, false, '123-1', 2) + data = client1.push + assert(data[:collection][:Group][groups.first.id]) + assert(data[:assets][:Group][groups.first.id]) + travel 10.seconds + + client1 = Sessions::Backend::Collections::Group.new(agent1, assets, false, '123-1', 2) + data = client1.push + assert(data[:collection][:Group][groups.first.id]) + assert(data[:assets][:Group][groups.first.id]) + + travel 2.minutes + client1 = Sessions::Backend::Collections::Group.new(agent1, assets, false, '123-1', 2) + data = client1.push + assert(data[:collection][:Group][groups.first.id]) + assert_nil(data[:assets][:Group]) + + travel_back + end + end diff --git a/test/unit/session_enhanced_test.rb b/test/unit/session_enhanced_test.rb index 40b7c5feb..073b8382e 100644 --- a/test/unit/session_enhanced_test.rb +++ b/test/unit/session_enhanced_test.rb @@ -309,7 +309,11 @@ class SessionEnhancedTest < ActiveSupport::TestCase } #puts "c: #{collections_result.inspect}" collections_orig.each { |key, _value| - assert_equal(collections_orig[key], collections_result[key], "collection message for #{key} #{type}-check (client_id #{client_id})") + if collections_orig[key].nil? + assert_nil(collections_result[key], "collection message for #{key} #{type}-check (client_id #{client_id})") + else + assert_equal(collections_orig[key], collections_result[key], "collection message for #{key} #{type}-check (client_id #{client_id})") + end } end end