diff options
-rw-r--r-- | app/models/info_request.rb | 12 | ||||
-rw-r--r-- | app/models/request_mailer.rb | 9 | ||||
-rw-r--r-- | spec/controllers/request_controller_spec.rb | 10 |
3 files changed, 12 insertions, 19 deletions
diff --git a/app/models/info_request.rb b/app/models/info_request.rb index 13d5c8a2e..da5403122 100644 --- a/app/models/info_request.rb +++ b/app/models/info_request.rb @@ -24,7 +24,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: info_request.rb,v 1.199 2009-08-18 20:51:26 francis Exp $ +# $Id: info_request.rb,v 1.200 2009-08-19 00:22:49 francis Exp $ require 'digest/sha1' require File.join(File.dirname(__FILE__),'../../vendor/plugins/acts_as_xapian/lib/acts_as_xapian') @@ -555,16 +555,6 @@ public info_request_event.save! end - # The last comment made, for alerts - def get_last_comment_event - for e in self.info_request_events.reverse - if e.event_type == 'comment' - return e - end - end - return nil - end - # The last response is the default one people might want to reply to def get_last_response_event_id for e in self.info_request_events.reverse diff --git a/app/models/request_mailer.rb b/app/models/request_mailer.rb index 2e0b52de1..032fe2762 100644 --- a/app/models/request_mailer.rb +++ b/app/models/request_mailer.rb @@ -4,7 +4,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: request_mailer.rb,v 1.81 2009-08-18 21:32:23 francis Exp $ +# $Id: request_mailer.rb,v 1.82 2009-08-19 00:22:49 francis Exp $ class RequestMailer < ApplicationMailer @@ -367,17 +367,16 @@ class RequestMailer < ApplicationMailer for info_request in info_requests #STDERR.puts "considering request " + info_request.id.to_s - # Find the last comment, which we use as id to mark alert done - last_comment_event = info_request.get_last_comment_event - raise "expected comment event but got none" if last_comment_event.nil? - # Count number of new comments to alert on earliest_unalerted_comment_event = nil + last_comment_event = nil count = 0 for e in info_request.info_request_events.reverse #STDERR.puts "event " + e.id.to_s + " type " + e.event_type # alert on comments, which were not made by the user who originally made the request if e.event_type == 'comment' && e.comment.user_id != info_request.user_id + last_comment_event = e if last_comment_event.nil? + alerted_for = e.user_info_request_sent_alerts.find(:first, :conditions => [ "alert_type = 'comment_1' and user_id = ?", info_request.user_id]) #STDERR.puts "is comment by other user, alerted_for " + alerted_for.to_s + " comment user " + e.comment.user_id.to_s + " request user " + info_request.user_id.to_s + " body: " + e.comment.body if alerted_for.nil? diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index f40c2770f..783890b40 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -790,7 +790,7 @@ describe RequestController, "comment alerts" do integrate_views fixtures :info_requests, :info_request_events, :public_bodies, :users, :incoming_messages, :raw_emails, :outgoing_messages, :comments # all needed as integrating views - it "should send an alert" do + it "should send an alert (once and once only)" do # delete ficture comment and make new one, so is in last month (as # alerts are only for comments in last month, see # RequestMailer.alert_comment_on_request) @@ -801,9 +801,7 @@ describe RequestController, "comment alerts" do # send comment alert RequestMailer.alert_comment_on_request - deliveries = ActionMailer::Base.deliveries - deliveries.size.should == 1 mail = deliveries[0] mail.body.should =~ /has annotated your/ mail.to_addrs.to_s.should == info_requests(:fancy_dog_request).user.name_and_email @@ -814,6 +812,12 @@ describe RequestController, "comment alerts" do # mail_url.should == comment_url(comments(:silly_comment)) #STDERR.puts mail.body + + # check if we send again, no more go out + deliveries.clear + RequestMailer.alert_comment_on_request + deliveries = ActionMailer::Base.deliveries + deliveries.size.should == 0 end it "should not send an alert when you comment on your own request" do |