From 96771ec4af3c90f39081ae13321e17096c43eaa2 Mon Sep 17 00:00:00 2001 From: Patrick J Cherry Date: Wed, 5 Dec 2012 12:33:59 +0000 Subject: Make sure that the datamapper query is evaluated when clearing all alerts. --- lib/mauve/alert.rb | 15 ++++++----- test/tc_mauve_notification.rb | 59 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 6 deletions(-) diff --git a/lib/mauve/alert.rb b/lib/mauve/alert.rb index 82f9e91..3307b59 100644 --- a/lib/mauve/alert.rb +++ b/lib/mauve/alert.rb @@ -902,12 +902,15 @@ module Mauve # if update.replace alert_ids_mentioned = update.alert.map { |alert| alert.id } - logger.info "Replacing all alerts from #{update.source} except "+alert_ids_mentioned.join(",") - all(:source => update.source, - :alert_id.not => alert_ids_mentioned, - :cleared_at => nil - ).each do |alert_db| - alert_db.clear! + logger.info "Replacing all alerts from #{update.source}"+(alert_ids_mentioned.count > 0 ? " except "+alert_ids_mentioned.join(",") : "") + # + # The to_a is used here to make sure datamapper runs the query now, + # rather than at some point in the future. + # + Alert.all(:source => update.source, + :alert_id.not => alert_ids_mentioned + ).to_a.each do |alert_db| + alert_db.clear! unless alert_db.cleared? end end diff --git a/test/tc_mauve_notification.rb b/test/tc_mauve_notification.rb index 448c3ca..525b536 100644 --- a/test/tc_mauve_notification.rb +++ b/test/tc_mauve_notification.rb @@ -1007,4 +1007,63 @@ EOF assert_equal("test2@example.com", sent[2]) end + def test_nofitications_after_replace_alert + config=<