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:
Martin Edenhofer 2017-01-14 07:53:26 +01:00
parent 1481842b0b
commit e1d7609948
2 changed files with 164 additions and 0 deletions

View file

@ -33,6 +33,16 @@ class Taskbar < ApplicationModel
def update_last_contact def update_last_contact
return true if local_update 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 self.last_contact = Time.zone.now
end end

View file

@ -30,6 +30,58 @@ RSpec.describe Taskbar do
expect(taskbar.state.empty?).to eq(true) expect(taskbar.state.empty?).to eq(true)
end 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 UserInfo.current_user_id = nil
end end
@ -262,6 +314,108 @@ RSpec.describe Taskbar do
expect(taskbar4.preferences[:tasks][2][:user_id]).to eq(3) expect(taskbar4.preferences[:tasks][2][:user_id]).to eq(3)
expect(taskbar4.preferences[:tasks][2][:changed]).to eq(false) 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 UserInfo.current_user_id = nil
end end
end end