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