aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/info_request.rb7
-rw-r--r--spec/models/info_request_spec.rb183
2 files changed, 109 insertions, 81 deletions
diff --git a/app/models/info_request.rb b/app/models/info_request.rb
index a31d20a59..2208de90e 100644
--- a/app/models/info_request.rb
+++ b/app/models/info_request.rb
@@ -23,7 +23,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.178 2009-03-17 09:53:58 tony Exp $
+# $Id: info_request.rb,v 1.179 2009-04-03 15:28:58 louise Exp $
require 'digest/sha1'
require File.join(File.dirname(__FILE__),'../../vendor/plugins/acts_as_xapian/lib/acts_as_xapian')
@@ -537,6 +537,11 @@ public
return nil
end
+ def last_event_id_needing_description
+ last_event = events_needing_description[-1]
+ last_event.nil? ? 0 : last_event.id
+ end
+
# Returns all the events which the user hasn't described yet - an empty array if all described.
def events_needing_description
events = self.info_request_events
diff --git a/spec/models/info_request_spec.rb b/spec/models/info_request_spec.rb
index f23fc632a..41470fda4 100644
--- a/spec/models/info_request_spec.rb
+++ b/spec/models/info_request_spec.rb
@@ -1,103 +1,126 @@
require File.dirname(__FILE__) + '/../spec_helper'
-describe InfoRequest, " when emailing" do
- fixtures :info_requests, :info_request_events, :public_bodies, :users
-
- before do
- @info_request = info_requests(:fancy_dog_request)
+describe InfoRequest do
+
+ describe "when asked for the last event id that needs description" do
+
+ before do
+ @info_request = InfoRequest.new
+ end
+
+ it 'should return the last undescribed event id if there is one' do
+ last_mock_event = mock_model(InfoRequestEvent)
+ other_mock_event = mock_model(InfoRequestEvent)
+ @info_request.stub!(:events_needing_description).and_return([other_mock_event, last_mock_event])
+ @info_request.last_event_id_needing_description.should == last_mock_event.id
+ end
+
+ it 'should return zero if there are no undescribed events' do
+ @info_request.stub!(:events_needing_description).and_return([])
+ @info_request.last_event_id_needing_description.should == 0
+ end
+
end
+
+ describe " when emailing" do
+
+ fixtures :info_requests, :info_request_events, :public_bodies, :users
- it "should have a valid incoming email" do
- @info_request.incoming_email.should_not be_nil
- end
+ before do
+ @info_request = info_requests(:fancy_dog_request)
+ end
- it "should recognise its own incoming email" do
- incoming_email = @info_request.incoming_email
- found_info_request = InfoRequest.find_by_incoming_email(incoming_email)
- found_info_request.should == (@info_request)
- end
+ it "should have a valid incoming email" do
+ @info_request.incoming_email.should_not be_nil
+ end
- it "should recognise its own incoming email with some capitalisation" do
- incoming_email = @info_request.incoming_email.gsub(/request/, "Request")
- found_info_request = InfoRequest.find_by_incoming_email(incoming_email)
- found_info_request.should == (@info_request)
- end
+ it "should recognise its own incoming email" do
+ incoming_email = @info_request.incoming_email
+ found_info_request = InfoRequest.find_by_incoming_email(incoming_email)
+ found_info_request.should == (@info_request)
+ end
- it "should recognise its own incoming email with quotes" do
- incoming_email = "'" + @info_request.incoming_email + "'"
- found_info_request = InfoRequest.find_by_incoming_email(incoming_email)
- found_info_request.should == (@info_request)
- end
+ it "should recognise its own incoming email with some capitalisation" do
+ incoming_email = @info_request.incoming_email.gsub(/request/, "Request")
+ found_info_request = InfoRequest.find_by_incoming_email(incoming_email)
+ found_info_request.should == (@info_request)
+ end
- it "should recognise l and 1 as the same in incoming emails" do
- # Make info request with a 1 in it
- while true
- ir = InfoRequest.new(:title => "testing", :public_body => public_bodies(:geraldine_public_body),
- :user => users(:bob_smith_user))
- ir.save!
- hash_part = ir.incoming_email.match(/-[0-9a-f]+@/)[0]
- break if hash_part.match(/1/)
+ it "should recognise its own incoming email with quotes" do
+ incoming_email = "'" + @info_request.incoming_email + "'"
+ found_info_request = InfoRequest.find_by_incoming_email(incoming_email)
+ found_info_request.should == (@info_request)
end
+
+ it "should recognise l and 1 as the same in incoming emails" do
+ # Make info request with a 1 in it
+ while true
+ ir = InfoRequest.new(:title => "testing", :public_body => public_bodies(:geraldine_public_body),
+ :user => users(:bob_smith_user))
+ ir.save!
+ hash_part = ir.incoming_email.match(/-[0-9a-f]+@/)[0]
+ break if hash_part.match(/1/)
+ end
- # Make email with a 1 in the hash part changed to l
- test_email = ir.incoming_email
- new_hash_part = hash_part.gsub(/1/, "l")
- test_email.gsub!(hash_part, new_hash_part)
-
- # Try and find with an l
- found_info_request = InfoRequest.find_by_incoming_email(test_email)
- found_info_request.should == (ir)
- end
+ # Make email with a 1 in the hash part changed to l
+ test_email = ir.incoming_email
+ new_hash_part = hash_part.gsub(/1/, "l")
+ test_email.gsub!(hash_part, new_hash_part)
+
+ # Try and find with an l
+ found_info_request = InfoRequest.find_by_incoming_email(test_email)
+ found_info_request.should == (ir)
+ end
- it "should recognise old style request-bounce- addresses" do
- incoming_email = @info_request.magic_email("request-bounce-")
- found_info_request = InfoRequest.find_by_incoming_email(incoming_email)
- found_info_request.should == (@info_request)
- end
+ it "should recognise old style request-bounce- addresses" do
+ incoming_email = @info_request.magic_email("request-bounce-")
+ found_info_request = InfoRequest.find_by_incoming_email(incoming_email)
+ found_info_request.should == (@info_request)
+ end
- it "should return nil when receiving email for a deleted request" do
- deleted_request_address = InfoRequest.magic_email_for_id("request-", 98765)
- found_info_request = InfoRequest.find_by_incoming_email(deleted_request_address)
- found_info_request.should be_nil
- end
+ it "should return nil when receiving email for a deleted request" do
+ deleted_request_address = InfoRequest.magic_email_for_id("request-", 98765)
+ found_info_request = InfoRequest.find_by_incoming_email(deleted_request_address)
+ found_info_request.should be_nil
+ end
- it "should cope with indexing after item is deleted" do
- rebuild_xapian_index
- verbose = false
+ it "should cope with indexing after item is deleted" do
+ rebuild_xapian_index
+ verbose = false
- # check can just update index
- info_request_events(:useless_incoming_message_event).save!
- ActsAsXapian.update_index(false, verbose)
+ # check can just update index
+ info_request_events(:useless_incoming_message_event).save!
+ ActsAsXapian.update_index(false, verbose)
- # then delete it under it
- info_request_events(:useless_incoming_message_event).save!
- info_request_events(:useless_incoming_message_event).destroy
- ActsAsXapian.update_index(false, verbose)
+ # then delete it under it
+ info_request_events(:useless_incoming_message_event).save!
+ info_request_events(:useless_incoming_message_event).destroy
+ ActsAsXapian.update_index(false, verbose)
- # raise ActsAsXapian::ActsAsXapianJob.find(:all).to_yaml
- end
+ # raise ActsAsXapian::ActsAsXapianJob.find(:all).to_yaml
+ end
-end
+ end
-describe InfoRequest, "when calculating the status" do
- fixtures :info_requests, :info_request_events, :holidays
+ describe "when calculating the status" do
+ fixtures :info_requests, :info_request_events, :holidays
- before do
- @ir = info_requests(:naughty_chicken_request)
- end
+ before do
+ @ir = info_requests(:naughty_chicken_request)
+ end
- it "has correct due date" do
- @ir.date_response_required_by.strftime("%F").should == '2007-11-12'
- end
+ it "has correct due date" do
+ @ir.date_response_required_by.strftime("%F").should == '2007-11-12'
+ end
- it "isn't overdue on due date" do
- Time.stub!(:now).and_return(Time.utc(2007, 11, 12, 23, 59))
- @ir.calculate_status.should == 'waiting_response'
- end
+ it "isn't overdue on due date" do
+ Time.stub!(:now).and_return(Time.utc(2007, 11, 12, 23, 59))
+ @ir.calculate_status.should == 'waiting_response'
+ end
- it "is overdue a day after due date " do
- Time.stub!(:now).and_return(Time.utc(2007, 11, 13))
- @ir.calculate_status.should == 'waiting_response_overdue'
+ it "is overdue a day after due date " do
+ Time.stub!(:now).and_return(Time.utc(2007, 11, 13))
+ @ir.calculate_status.should == 'waiting_response_overdue'
+ end
end
-end
-
+end \ No newline at end of file