From e1d76099486e6e07c4d31a891eda80ae2ec95541 Mon Sep 17 00:00:00 2001 From: Martin Edenhofer Date: Sat, 14 Jan 2017 07:53:26 +0100 Subject: [PATCH] =?UTF-8?q?Do=20not=20change=20last=5Fcontact=20timestamp?= =?UTF-8?q?=20if=20only=20=E2=80=9Cnotify=E2=80=9D=20has=20changed=20(some?= =?UTF-8?q?body=20else=20has=20changed=20the=20tab=20and=20on=20your=20tab?= =?UTF-8?q?=20only=20the=20notify=20attribute=20has=20changed).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/models/taskbar.rb | 10 +++ spec/models/taskbar_spec.rb | 154 ++++++++++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+) diff --git a/app/models/taskbar.rb b/app/models/taskbar.rb index 868adc216..3a0310742 100644 --- a/app/models/taskbar.rb +++ b/app/models/taskbar.rb @@ -33,6 +33,16 @@ class Taskbar < ApplicationModel def update_last_contact return true if local_update + return true if changes.empty? + if changes['notify'] + count = 0 + changes.each { |attribute, _value| + next if attribute == 'updated_at' + next if attribute == 'created_at' + count += 1 + } + return true if count <= 1 + end self.last_contact = Time.zone.now end diff --git a/spec/models/taskbar_spec.rb b/spec/models/taskbar_spec.rb index 0b44f32b5..83d5e3e58 100644 --- a/spec/models/taskbar_spec.rb +++ b/spec/models/taskbar_spec.rb @@ -30,6 +30,58 @@ RSpec.describe Taskbar do expect(taskbar.state.empty?).to eq(true) end + it 'check last_contact' do + UserInfo.current_user_id = 1 + + last_contact1 = taskbar.last_contact + + travel 2.minutes + taskbar.notify = false + taskbar.state = { a: 1 } + taskbar.save! + expect(taskbar.last_contact.to_s).not_to eq(last_contact1.to_s) + + last_contact2 = taskbar.last_contact + travel 2.minutes + taskbar.notify = true + taskbar.save! + expect(taskbar.last_contact.to_s).not_to eq(last_contact1.to_s) + expect(taskbar.last_contact.to_s).to eq(last_contact2.to_s) + + travel 2.minutes + taskbar.notify = true + taskbar.save! + + expect(taskbar.last_contact.to_s).not_to eq(last_contact1.to_s) + expect(taskbar.last_contact.to_s).to eq(last_contact2.to_s) + + travel 2.minutes + taskbar.notify = false + taskbar.state = { a: 1 } + taskbar.save! + + expect(taskbar.last_contact.to_s).not_to eq(last_contact1.to_s) + expect(taskbar.last_contact.to_s).to eq(last_contact2.to_s) + + travel 2.minutes + taskbar.notify = true + taskbar.state = { a: 1 } + taskbar.save! + + expect(taskbar.last_contact.to_s).not_to eq(last_contact1.to_s) + expect(taskbar.last_contact.to_s).to eq(last_contact2.to_s) + + travel 2.minutes + taskbar.notify = true + taskbar.state = { a: 2 } + taskbar.save! + + expect(taskbar.last_contact.to_s).not_to eq(last_contact1.to_s) + expect(taskbar.last_contact.to_s).not_to eq(last_contact2.to_s) + + travel_back + end + UserInfo.current_user_id = nil end @@ -262,6 +314,108 @@ RSpec.describe Taskbar do expect(taskbar4.preferences[:tasks][2][:user_id]).to eq(3) expect(taskbar4.preferences[:tasks][2][:changed]).to eq(false) + taskbar1_last_contact = taskbar1.last_contact.to_s + taskbar2_last_contact = taskbar2.last_contact.to_s + taskbar3_last_contact = taskbar3.last_contact.to_s + taskbar4_last_contact = taskbar4.last_contact.to_s + travel 2.minutes + + UserInfo.current_user_id = 2 + taskbar2.state = { article: { body: 'some body' }, ticket: {} } + taskbar2.notify = true + taskbar2.save! + + taskbar1.reload + expect(taskbar1.preferences[:tasks].count).to eq(3) + expect(taskbar1.preferences[:tasks][0][:user_id]).to eq(1) + expect(taskbar1.preferences[:tasks][0][:changed]).to eq(true) + expect(taskbar1.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar1_last_contact) + expect(taskbar1.preferences[:tasks][1][:user_id]).to eq(2) + expect(taskbar1.preferences[:tasks][1][:changed]).to eq(true) + expect(taskbar1.preferences[:tasks][1][:last_contact].to_s).to eq(taskbar2_last_contact) + expect(taskbar1.preferences[:tasks][2][:user_id]).to eq(3) + expect(taskbar1.preferences[:tasks][2][:changed]).to eq(false) + expect(taskbar1.preferences[:tasks][2][:last_contact].to_s).to eq(taskbar4_last_contact) + + taskbar2.reload + expect(taskbar2.preferences[:tasks].count).to eq(3) + expect(taskbar2.preferences[:tasks][0][:user_id]).to eq(1) + expect(taskbar2.preferences[:tasks][0][:changed]).to eq(true) + expect(taskbar2.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar1_last_contact) + expect(taskbar2.preferences[:tasks][1][:user_id]).to eq(2) + expect(taskbar2.preferences[:tasks][1][:changed]).to eq(true) + expect(taskbar2.preferences[:tasks][1][:last_contact].to_s).to eq(taskbar2_last_contact) + expect(taskbar2.preferences[:tasks][2][:user_id]).to eq(3) + expect(taskbar2.preferences[:tasks][2][:changed]).to eq(false) + expect(taskbar2.preferences[:tasks][2][:last_contact].to_s).to eq(taskbar4_last_contact) + + taskbar3.reload + expect(taskbar3.preferences[:tasks].count).to eq(1) + expect(taskbar3.preferences[:tasks][0][:user_id]).to eq(2) + expect(taskbar3.preferences[:tasks][0][:changed]).to eq(false) + expect(taskbar3.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar3_last_contact) + + taskbar4.reload + expect(taskbar4.preferences[:tasks].count).to eq(3) + expect(taskbar4.preferences[:tasks][0][:user_id]).to eq(1) + expect(taskbar4.preferences[:tasks][0][:changed]).to eq(true) + expect(taskbar4.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar1_last_contact) + expect(taskbar4.preferences[:tasks][1][:user_id]).to eq(2) + expect(taskbar4.preferences[:tasks][1][:changed]).to eq(true) + expect(taskbar4.preferences[:tasks][1][:last_contact].to_s).to eq(taskbar2_last_contact) + expect(taskbar4.preferences[:tasks][2][:user_id]).to eq(3) + expect(taskbar4.preferences[:tasks][2][:changed]).to eq(false) + expect(taskbar4.preferences[:tasks][2][:last_contact].to_s).to eq(taskbar4_last_contact) + + UserInfo.current_user_id = 2 + taskbar2.state = { article: { body: 'some body 222' }, ticket: {} } + taskbar2.notify = true + taskbar2.save! + + taskbar1.reload + expect(taskbar1.preferences[:tasks].count).to eq(3) + expect(taskbar1.preferences[:tasks][0][:user_id]).to eq(1) + expect(taskbar1.preferences[:tasks][0][:changed]).to eq(true) + expect(taskbar1.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar1_last_contact) + expect(taskbar1.preferences[:tasks][1][:user_id]).to eq(2) + expect(taskbar1.preferences[:tasks][1][:changed]).to eq(true) + expect(taskbar1.preferences[:tasks][1][:last_contact].to_s).not_to eq(taskbar2_last_contact) + expect(taskbar1.preferences[:tasks][2][:user_id]).to eq(3) + expect(taskbar1.preferences[:tasks][2][:changed]).to eq(false) + expect(taskbar1.preferences[:tasks][2][:last_contact].to_s).to eq(taskbar4_last_contact) + + taskbar2.reload + expect(taskbar2.preferences[:tasks].count).to eq(3) + expect(taskbar2.preferences[:tasks][0][:user_id]).to eq(1) + expect(taskbar2.preferences[:tasks][0][:changed]).to eq(true) + expect(taskbar2.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar1_last_contact) + expect(taskbar2.preferences[:tasks][1][:user_id]).to eq(2) + expect(taskbar2.preferences[:tasks][1][:changed]).to eq(true) + expect(taskbar2.preferences[:tasks][1][:last_contact].to_s).not_to eq(taskbar2_last_contact) + expect(taskbar2.preferences[:tasks][2][:user_id]).to eq(3) + expect(taskbar2.preferences[:tasks][2][:changed]).to eq(false) + expect(taskbar2.preferences[:tasks][2][:last_contact].to_s).to eq(taskbar4_last_contact) + + taskbar3.reload + expect(taskbar3.preferences[:tasks].count).to eq(1) + expect(taskbar3.preferences[:tasks][0][:user_id]).to eq(2) + expect(taskbar3.preferences[:tasks][0][:changed]).to eq(false) + expect(taskbar3.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar3_last_contact) + + taskbar4.reload + expect(taskbar4.preferences[:tasks].count).to eq(3) + expect(taskbar4.preferences[:tasks][0][:user_id]).to eq(1) + expect(taskbar4.preferences[:tasks][0][:changed]).to eq(true) + expect(taskbar4.preferences[:tasks][0][:last_contact].to_s).to eq(taskbar1_last_contact) + expect(taskbar4.preferences[:tasks][1][:user_id]).to eq(2) + expect(taskbar4.preferences[:tasks][1][:changed]).to eq(true) + expect(taskbar4.preferences[:tasks][1][:last_contact].to_s).not_to eq(taskbar2_last_contact) + expect(taskbar4.preferences[:tasks][2][:user_id]).to eq(3) + expect(taskbar4.preferences[:tasks][2][:changed]).to eq(false) + expect(taskbar4.preferences[:tasks][2][:last_contact].to_s).to eq(taskbar4_last_contact) + + travel_back + UserInfo.current_user_id = nil end end