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