diff --git a/app/models/ticket.rb b/app/models/ticket.rb index 129a524d7..6c5537b74 100644 --- a/app/models/ticket.rb +++ b/app/models/ticket.rb @@ -825,9 +825,11 @@ perform changes on ticket # loop protection / check if maximal count of trigger mail has reached map = { + 10 => 10, 30 => 15, 60 => 25, 180 => 50, + 600 => 100, } skip = false map.each { |minutes, count| @@ -843,18 +845,20 @@ perform changes on ticket } next if skip map = { - 1 => 150, - 3 => 250, - 6 => 450, + 10 => 30, + 30 => 60, + 60 => 120, + 180 => 240, + 600 => 360, } skip = false - map.each { |hours, count| + map.each { |minutes, count| already_sent = Ticket::Article.where( sender: Ticket::Article::Sender.find_by(name: 'System'), type: Ticket::Article::Type.find_by(name: 'email'), - ).where("ticket_articles.created_at > ? AND ticket_articles.to LIKE '%#{recipient_email.strip}%'", Time.zone.now - hours.hours).count + ).where("ticket_articles.created_at > ? AND ticket_articles.to LIKE '%#{recipient_email.strip}%'", Time.zone.now - minutes.minutes).count next if already_sent < count - logger.info "Send no trigger based notification to #{recipient_email} because already sent #{count} in total within last #{hours} hour(s) (loop protection)" + logger.info "Send no trigger based notification to #{recipient_email} because already sent #{count} in total within last #{minutes} minutes (loop protection)" skip = true break } diff --git a/test/unit/ticket_trigger_test.rb b/test/unit/ticket_trigger_test.rb index c0c59836b..7a7d6f628 100644 --- a/test/unit/ticket_trigger_test.rb +++ b/test/unit/ticket_trigger_test.rb @@ -3120,9 +3120,8 @@ class TicketTriggerTest < ActiveSupport::TestCase Observer::Transaction.commit ticket1.reload - assert_equal(22, ticket1.articles.count) + assert_equal(21, ticket1.articles.count) assert_equal('some_loop_sender@example.com', ticket1.articles[20].from) - assert_equal('nicole.braun@zammad.org', ticket1.articles[21].to) Ticket::Article.create( ticket_id: ticket1.id, @@ -3141,92 +3140,8 @@ class TicketTriggerTest < ActiveSupport::TestCase Observer::Transaction.commit ticket1.reload - assert_equal(24, ticket1.articles.count) - assert_equal('some_loop_sender@example.com', ticket1.articles[22].from) - assert_equal('nicole.braun@zammad.org', ticket1.articles[23].to) - - Ticket::Article.create( - ticket_id: ticket1.id, - from: 'some_loop_sender@example.com', - to: 'some_loop_recipient@example.com', - subject: 'some subject 1234', - message_id: 'some@id', - content_type: 'text/html', - body: 'some message note
new line', - internal: false, - sender: Ticket::Article::Sender.find_by(name: 'Customer'), - type: Ticket::Article::Type.find_by(name: 'email'), - updated_by_id: 1, - created_by_id: 1, - ) - - Observer::Transaction.commit - ticket1.reload - assert_equal(26, ticket1.articles.count) - assert_equal('some_loop_sender@example.com', ticket1.articles[24].from) - assert_equal('nicole.braun@zammad.org', ticket1.articles[25].to) - - Ticket::Article.create( - ticket_id: ticket1.id, - from: 'some_loop_sender@example.com', - to: 'some_loop_recipient@example.com', - subject: 'some subject 1234', - message_id: 'some@id', - content_type: 'text/html', - body: 'some message note
new line', - internal: false, - sender: Ticket::Article::Sender.find_by(name: 'Customer'), - type: Ticket::Article::Type.find_by(name: 'email'), - updated_by_id: 1, - created_by_id: 1, - ) - - Observer::Transaction.commit - ticket1.reload - assert_equal(28, ticket1.articles.count) - assert_equal('some_loop_sender@example.com', ticket1.articles[26].from) - assert_equal('nicole.braun@zammad.org', ticket1.articles[27].to) - - Ticket::Article.create( - ticket_id: ticket1.id, - from: 'some_loop_sender@example.com', - to: 'some_loop_recipient@example.com', - subject: 'some subject 1234', - message_id: 'some@id', - content_type: 'text/html', - body: 'some message note
new line', - internal: false, - sender: Ticket::Article::Sender.find_by(name: 'Customer'), - type: Ticket::Article::Type.find_by(name: 'email'), - updated_by_id: 1, - created_by_id: 1, - ) - - Observer::Transaction.commit - ticket1.reload - assert_equal(30, ticket1.articles.count) - assert_equal('some_loop_sender@example.com', ticket1.articles[28].from) - assert_equal('nicole.braun@zammad.org', ticket1.articles[29].to) - - Ticket::Article.create( - ticket_id: ticket1.id, - from: 'some_loop_sender@example.com', - to: 'some_loop_recipient@example.com', - subject: 'some subject 1234', - message_id: 'some@id', - content_type: 'text/html', - body: 'some message note
new line', - internal: false, - sender: Ticket::Article::Sender.find_by(name: 'Customer'), - type: Ticket::Article::Type.find_by(name: 'email'), - updated_by_id: 1, - created_by_id: 1, - ) - - Observer::Transaction.commit - ticket1.reload - assert_equal(31, ticket1.articles.count) - assert_equal('some_loop_sender@example.com', ticket1.articles[30].from) + assert_equal(22, ticket1.articles.count) + assert_equal('some_loop_sender@example.com', ticket1.articles[21].from) end