diff options
-rw-r--r-- | app/controllers/request_controller.rb | 35 | ||||
-rw-r--r-- | spec/controllers/request_controller_spec.rb | 50 |
2 files changed, 62 insertions, 23 deletions
diff --git a/app/controllers/request_controller.rb b/app/controllers/request_controller.rb index ccf824e75..b9be333c8 100644 --- a/app/controllers/request_controller.rb +++ b/app/controllers/request_controller.rb @@ -232,14 +232,35 @@ class RequestController < ApplicationController :body => params[:outgoing_message][:body], :user => authenticated_user) @public_bodies = PublicBody.where({:id => params[:public_body_ids]}).all + unrequestable = [] @public_bodies.each do |public_body| - info_request = InfoRequest.create_from_attributes(params[:info_request], - params[:outgoing_message], - authenticated_user) - info_request.public_body_id = public_body.id - info_request.info_request_batch = @info_request_batch - info_request.save! - info_request.outgoing_messages.first.send_message + if public_body.is_requestable? + info_request = InfoRequest.create_from_attributes(params[:info_request], + params[:outgoing_message], + authenticated_user) + info_request.public_body_id = public_body.id + info_request.info_request_batch = @info_request_batch + info_request.save! + info_request.outgoing_messages.first.send_message + else + unrequestable << public_body.name + end + end + + flash[:notice] = _("<p>Your {{law_used_full}} requests have been <strong>sent</strong>!</p> + <p><strong>We will email you</strong> when there is a response to any of them, or after {{late_number_of_days}} working days if the authorities still haven't + replied by then.</p> + <p>If you write about these requests (for example in a forum or a blog) please link to this page.</p>", + :law_used_full=>@info_request.law_used_full, + :late_number_of_days => AlaveteliConfiguration::reply_late_after_days) + if ! unrequestable.empty? + error_messages = [] + error_messages << _('Unfortunately, we do not have a working address for {{public_body_names}}.', + :public_body_names => unrequestable.join(",")) + error_messages << _('You may be able to find one on their website, or by phoning them up and asking. If you manage + to find one, then please <a href="{{help_url}}">send it to us</a>.', + :help_url => help_contact_path) + flash[:error] = error_messages.map{ |message| "<p>#{message}</p>"}.join(" ").html_safe end redirect_to info_request_batch_path(@info_request_batch) end diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index c61e0c780..be5a97776 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2565,24 +2565,42 @@ describe RequestController, "#new_batch", :focus => true do response.should render_template('new') end - it 'should create an info request batch and redirect to the new batch on success' do - params = @default_post_params.merge(:preview => 0) - post :new_batch, params, { :user_id => @user.id } - new_info_request_batch = assigns[:info_request_batch] - new_info_request_batch.should_not be_nil - response.should redirect_to(info_request_batch_path(new_info_request_batch)) - end + context "on success" do - it 'should prevent double submission of a batch request' do - params = @default_post_params.merge(:preview => 0) - post :new_batch, params, { :user_id => @user.id } - new_info_request_batch = assigns[:info_request_batch] - response.should redirect_to(info_request_batch_path(new_info_request_batch)) - post :new_batch, params, { :user_id => @user.id } - response.should render_template('new') - assigns[:existing_batch].should_not be_nil - end + def make_request + @params = @default_post_params.merge(:preview => 0) + post :new_batch, @params, { :user_id => @user.id } + end + + it 'should create an info request batch and redirect to the new batch on success' do + make_request + new_info_request_batch = assigns[:info_request_batch] + new_info_request_batch.should_not be_nil + response.should redirect_to(info_request_batch_path(new_info_request_batch)) + end + it 'should prevent double submission of a batch request' do + make_request + post :new_batch, @params, { :user_id => @user.id } + response.should render_template('new') + assigns[:existing_batch].should_not be_nil + end + + it 'should display a success notice' do + make_request + notice_text = "<p>Your Freedom of Information requests have been <strong>sent</strong>!</p>" + flash[:notice].should match notice_text + end + + it 'should display notes about any bodies that could not be included' do + @other_public_body.request_email = '' + @other_public_body.save! + make_request + error_text = "Unfortunately, we do not have a working address for #{@other_public_body.name}." + flash[:error].should match error_text + end + + end context "when the user is banned" do |