Do not change last_contact timestamp if only “notify” has changed (somebody else has changed the tab and on your tab only the notify attribute has changed).
This commit is contained in:
parent
1481842b0b
commit
e1d7609948
2 changed files with 164 additions and 0 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue