aboutsummaryrefslogtreecommitdiffstats
path: root/spec
diff options
context:
space:
mode:
Diffstat (limited to 'spec')
-rw-r--r--spec/controllers/api_controller_spec.rb15
-rw-r--r--spec/controllers/request_controller_spec.rb14
-rw-r--r--spec/models/info_request_spec.rb51
-rw-r--r--spec/models/request_mailer_spec.rb33
4 files changed, 91 insertions, 22 deletions
diff --git a/spec/controllers/api_controller_spec.rb b/spec/controllers/api_controller_spec.rb
index 925b7adb4..ded9a040a 100644
--- a/spec/controllers/api_controller_spec.rb
+++ b/spec/controllers/api_controller_spec.rb
@@ -320,6 +320,21 @@ describe ApiController, "when using the API" do
assigns[:event_data].should == [first_event]
end
+ it "should honour the since_date parameter for the Atom feed" do
+ get :body_request_events,
+ :id => public_bodies(:humpadink_public_body).id,
+ :k => public_bodies(:humpadink_public_body).api_key,
+ :since_date => "2010-01-01",
+ :feed_type => "atom"
+
+ response.should be_success
+ response.should render_template("api/request_events.atom")
+ assigns[:events].size.should > 0
+ assigns[:events].each do |event|
+ event.created_at.should >= Date.new(2010, 1, 1)
+ end
+ end
+
it "should return a JSON 404 error for non-existent requests" do
request_id = 123459876 # Let's hope this doesn't exist!
sent_at = "2012-05-28T12:35:39+01:00"
diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb
index b8425613c..95737a250 100644
--- a/spec/controllers/request_controller_spec.rb
+++ b/spec/controllers/request_controller_spec.rb
@@ -1275,7 +1275,8 @@ describe RequestController, "when classifying an information request" do
expected_params = {:user_id => users(:silly_name_user).id,
:old_described_state => 'waiting_response',
:described_state => 'rejected'}
- @dog_request.should_receive(:log_event).with("status_update", expected_params)
+ event = mock_model(InfoRequestEvent)
+ @dog_request.should_receive(:log_event).with("status_update", expected_params).and_return(event)
post_status('rejected')
end
@@ -1314,10 +1315,19 @@ describe RequestController, "when classifying an information request" do
end
it 'should log a status update event' do
+ event = mock_model(InfoRequestEvent)
expected_params = {:user_id => @admin_user.id,
:old_described_state => 'waiting_response',
:described_state => 'rejected'}
- @dog_request.should_receive(:log_event).with("status_update", expected_params)
+ @dog_request.should_receive(:log_event).with("status_update", expected_params).and_return(event)
+ post_status('rejected')
+ end
+
+ it 'should record a classification' do
+ event = mock_model(InfoRequestEvent)
+ @dog_request.stub!(:log_event).with("status_update", anything()).and_return(event)
+ RequestClassification.should_receive(:create!).with(:user_id => @admin_user.id,
+ :info_request_event_id => event.id)
post_status('rejected')
end
diff --git a/spec/models/info_request_spec.rb b/spec/models/info_request_spec.rb
index c55127992..76be32e0c 100644
--- a/spec/models/info_request_spec.rb
+++ b/spec/models/info_request_spec.rb
@@ -350,20 +350,49 @@ describe InfoRequest do
end
it 'should add extra conditions if supplied' do
- InfoRequest.should_receive(:find).with(:all,
- {:select=> anything,
- :order=> anything,
- :conditions=>["awaiting_description = ? and (select created_at from info_request_events where info_request_events.info_request_id = info_requests.id and info_request_events.event_type = 'response' order by created_at desc limit 1) < ? and url_title != 'holding_pen' and user_id is not null and prominence != 'backpage'",
- true, Time.now - 21.days]})
+ expected_conditions = ["awaiting_description = ?
+ AND (SELECT created_at
+ FROM info_request_events
+ WHERE info_request_events.info_request_id = info_requests.id
+ AND info_request_events.event_type = 'response'
+ ORDER BY created_at desc LIMIT 1) < ?
+ AND url_title != 'holding_pen'
+ AND user_id IS NOT NULL
+ AND prominence != 'backpage'".split(' ').join(' '),
+ true, Time.now - 21.days]
+ # compare conditions ignoring whitespace differences
+ InfoRequest.should_receive(:find) do |all, query_params|
+ query_string = query_params[:conditions][0]
+ query_params[:conditions][0] = query_string.split(' ').join(' ')
+ query_params[:conditions].should == expected_conditions
+ end
InfoRequest.find_old_unclassified({:conditions => ["prominence != 'backpage'"]})
end
- it 'should ask the database for requests that are awaiting description, have a last response older than 21 days old, are not the holding pen and are not backpaged' do
- InfoRequest.should_receive(:find).with(:all,
- {:select=>"*, (select created_at from info_request_events where info_request_events.info_request_id = info_requests.id and info_request_events.event_type = 'response' order by created_at desc limit 1) as last_response_time",
- :order=>"last_response_time",
- :conditions=>["awaiting_description = ? and (select created_at from info_request_events where info_request_events.info_request_id = info_requests.id and info_request_events.event_type = 'response' order by created_at desc limit 1) < ? and url_title != 'holding_pen' and user_id is not null",
- true, Time.now - 21.days]})
+ it 'should ask the database for requests that are awaiting description, have a last response older
+ than 21 days old, have a user, are not the holding pen and are not backpaged' do
+ expected_conditions = ["awaiting_description = ?
+ AND (SELECT created_at
+ FROM info_request_events
+ WHERE info_request_events.info_request_id = info_requests.id
+ AND info_request_events.event_type = 'response'
+ ORDER BY created_at desc LIMIT 1) < ?
+ AND url_title != 'holding_pen'
+ AND user_id IS NOT NULL".split(' ').join(' '),
+ true, Time.now - 21.days]
+ expected_select = "*, (SELECT created_at
+ FROM info_request_events
+ WHERE info_request_events.info_request_id = info_requests.id
+ AND info_request_events.event_type = 'response'
+ ORDER BY created_at desc LIMIT 1)
+ AS last_response_time".split(' ').join(' ')
+ InfoRequest.should_receive(:find) do |all, query_params|
+ query_string = query_params[:conditions][0]
+ query_params[:conditions][0] = query_string.split(' ').join(' ')
+ query_params[:conditions].should == expected_conditions
+ query_params[:select].split(' ').join(' ').should == expected_select
+ query_params[:order].should == "last_response_time"
+ end
InfoRequest.find_old_unclassified
end
diff --git a/spec/models/request_mailer_spec.rb b/spec/models/request_mailer_spec.rb
index ea75ec765..98681a9e9 100644
--- a/spec/models/request_mailer_spec.rb
+++ b/spec/models/request_mailer_spec.rb
@@ -29,7 +29,7 @@ describe RequestMailer, " when receiving incoming mail" do
InfoRequest.holding_pen_request.incoming_messages.size.should == 1
last_event = InfoRequest.holding_pen_request.incoming_messages[0].info_request.get_last_event
last_event.params[:rejected_reason].should == "Could not identify the request from the email address"
-
+
deliveries = ActionMailer::Base.deliveries
deliveries.size.should == 1
mail = deliveries[0]
@@ -49,7 +49,7 @@ describe RequestMailer, " when receiving incoming mail" do
InfoRequest.holding_pen_request.incoming_messages.size.should == 1
last_event = InfoRequest.holding_pen_request.incoming_messages[0].info_request.get_last_event
last_event.params[:rejected_reason].should =~ /there is no "From" address/
-
+
deliveries = ActionMailer::Base.deliveries
deliveries.size.should == 1
mail = deliveries[0]
@@ -69,7 +69,7 @@ describe RequestMailer, " when receiving incoming mail" do
InfoRequest.holding_pen_request.incoming_messages.size.should == 1
last_event = InfoRequest.holding_pen_request.incoming_messages[0].info_request.get_last_event
last_event.params[:rejected_reason].should =~ /Only the authority can reply/
-
+
deliveries = ActionMailer::Base.deliveries
deliveries.size.should == 1
mail = deliveries[0]
@@ -222,12 +222,27 @@ describe RequestMailer, "when sending reminders to requesters to classify a resp
RequestMailer.alert_new_response_reminders_internal(7, 'new_response_reminder_1')
end
- it 'should ask for all requests that are awaiting description and whose latest response is older than the number of days given and that are not the holding pen' do
- expected_params = {:conditions => [ "awaiting_description = ? and (select created_at from info_request_events where info_request_events.info_request_id = info_requests.id and info_request_events.event_type = 'response' order by created_at desc limit 1) < ? and url_title != 'holding_pen' and user_id is not null",
- true, Time.now() - 7.days ],
- :include => [ :user ],
- :order => "info_requests.id"}
- InfoRequest.should_receive(:find).with(:all, expected_params).and_return([])
+ it 'should ask for all requests that are awaiting description and whose latest response is older
+ than the number of days given and that are not the holding pen' do
+ expected_conditions = [ "awaiting_description = ?
+ AND (SELECT created_at
+ FROM info_request_events
+ WHERE info_request_events.info_request_id = info_requests.id
+ AND info_request_events.event_type = 'response'
+ ORDER BY created_at desc LIMIT 1) < ?
+ AND url_title != 'holding_pen'
+ AND user_id IS NOT NULL".split(' ').join(' '),
+ true, Time.now() - 7.days ]
+
+ # compare the query string ignoring any spacing differences
+ InfoRequest.should_receive(:find) do |all, query_params|
+ query_string = query_params[:conditions][0]
+ query_params[:conditions][0] = query_string.split(' ').join(' ')
+ query_params[:conditions].should == expected_conditions
+ query_params[:include].should == [ :user ]
+ query_params[:order].should == 'info_requests.id'
+ end
+
send_alerts
end