Fixes #2366 - "Warten auf Erinnerung" - Inconsistent timestamps
This commit is contained in:
parent
c305ff89be
commit
6be39c9625
2 changed files with 48 additions and 1 deletions
|
@ -125,11 +125,13 @@ class Transaction::Notification
|
||||||
identifier = user.login
|
identifier = user.login
|
||||||
end
|
end
|
||||||
|
|
||||||
|
already_notified_cutoff = Time.use_zone(Setting.get('timezone_default').presence || 'UTC') { Time.current.beginning_of_day }
|
||||||
|
|
||||||
already_notified = History.where(
|
already_notified = History.where(
|
||||||
history_type_id: History.type_lookup('notification').id,
|
history_type_id: History.type_lookup('notification').id,
|
||||||
history_object_id: History.object_lookup('Ticket').id,
|
history_object_id: History.object_lookup('Ticket').id,
|
||||||
o_id: ticket.id
|
o_id: ticket.id
|
||||||
).where('created_at > ?', Time.zone.now.beginning_of_day).exists?(['value_to LIKE ?', "%#{identifier}(#{@item[:type]}:%"])
|
).where('created_at > ?', already_notified_cutoff).exists?(['value_to LIKE ?', "%#{identifier}(#{@item[:type]}:%"])
|
||||||
|
|
||||||
next if already_notified
|
next if already_notified
|
||||||
end
|
end
|
||||||
|
|
45
spec/models/transaction/notification_spec.rb
Normal file
45
spec/models/transaction/notification_spec.rb
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
|
||||||
|
|
||||||
|
require 'rails_helper'
|
||||||
|
|
||||||
|
RSpec.describe Transaction::Notification, type: :model do
|
||||||
|
describe 'pending ticket reminder repeats after midnight at selected time zone' do
|
||||||
|
let(:group) { create(:group) }
|
||||||
|
let(:user) { create(:agent) }
|
||||||
|
let(:ticket) { create(:ticket, owner: user, state_name: 'open', pending_time: Time.current) }
|
||||||
|
|
||||||
|
before do
|
||||||
|
user.groups << group
|
||||||
|
ticket
|
||||||
|
|
||||||
|
Setting.set('timezone_default', 'America/Santiago')
|
||||||
|
freeze_time
|
||||||
|
run(ticket, user, 'reminder_reached')
|
||||||
|
OnlineNotification.destroy_all
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'notification not sent at UTC midnight' do
|
||||||
|
travel_to Time.current.end_of_day + 1.minute
|
||||||
|
|
||||||
|
expect { run(ticket, user, 'reminder_reached') }.not_to change(OnlineNotification, :count)
|
||||||
|
end
|
||||||
|
|
||||||
|
it 'notification sent at selected time zone midnight' do
|
||||||
|
travel_to Time.use_zone('America/Santiago') { Time.current.end_of_day + 1.minute }
|
||||||
|
|
||||||
|
expect { run(ticket, user, 'reminder_reached') }.to change(OnlineNotification, :count).by(1)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def run(ticket, user, type)
|
||||||
|
described_class.new(
|
||||||
|
object: ticket.class.name,
|
||||||
|
type: type,
|
||||||
|
object_id: ticket.id,
|
||||||
|
interface_handle: 'scheduler',
|
||||||
|
changes: nil,
|
||||||
|
created_at: Time.current,
|
||||||
|
user_id: user.id
|
||||||
|
).perform
|
||||||
|
end
|
||||||
|
end
|
Loading…
Reference in a new issue