diff options
-rw-r--r-- | app/controllers/reports_controller.rb | 16 | ||||
-rw-r--r-- | app/views/reports/new.html.erb | 4 | ||||
-rw-r--r-- | spec/controllers/reports_controller_spec.rb | 20 |
3 files changed, 29 insertions, 11 deletions
diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 924eb0108..a1dd53125 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -1,15 +1,23 @@ class ReportsController < ApplicationController def create - info_request = InfoRequest.find_by_url_title!(params[:request_id]) + @info_request = InfoRequest.find_by_url_title!(params[:request_id]) + @reason = params[:reason] + @message = params[:message] + if @reason.empty? + flash[:error] = _("Please choose a reason") + render "new" + return + end + if !authenticated_user flash[:notice] = _("You need to be logged in to report a request for administrator attention") - elsif info_request.attention_requested + elsif @info_request.attention_requested flash[:notice] = _("This request has already been reported for administrator attention") else - info_request.report!(params[:reason], params[:message], @user) + @info_request.report!(@reason, @message, @user) flash[:notice] = _("This request has been reported for administrator attention") end - redirect_to request_url(info_request) + redirect_to request_url(@info_request) end def new diff --git a/app/views/reports/new.html.erb b/app/views/reports/new.html.erb index b5ca1421f..7d558ab4e 100644 --- a/app/views/reports/new.html.erb +++ b/app/views/reports/new.html.erb @@ -11,11 +11,11 @@ <%= form_tag request_report_path(:request_id => @info_request.url_title) do %> <p> <label class="form_label" for="reason">Reason:</label> - <%= select_tag :reason, options_for_select(@info_request.report_reasons), :prompt => "Choose a reason" %> + <%= select_tag :reason, options_for_select(@info_request.report_reasons, @reason), :prompt => "Choose a reason" %> </p> <p> <label class="form_label" for="message">Please tell us more:</label> - <%= text_area_tag :message, "", :rows => 10, :cols => 60 %> + <%= text_area_tag :message, @message, :rows => 10, :cols => 60 %> </p> <div class="form_button"> diff --git a/spec/controllers/reports_controller_spec.rb b/spec/controllers/reports_controller_spec.rb index 45ee5ceba..fa8c72eaa 100644 --- a/spec/controllers/reports_controller_spec.rb +++ b/spec/controllers/reports_controller_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' describe ReportsController, "when reporting a request when not logged in" do it "should only allow logged-in users to report requests" do - post :create, :request_id => info_requests(:badger_request).url_title + post :create, :request_id => info_requests(:badger_request).url_title, :reason => "my reason" flash[:notice].should =~ /You need to be logged in/ response.should redirect_to show_request_path(:url_title => info_requests(:badger_request).url_title) @@ -28,7 +28,7 @@ describe ReportsController, "when reporting a request (logged in)" do title = ir.url_title ir.attention_requested.should == false - post :create, :request_id => title + post :create, :request_id => title, :reason => "my reason" response.should redirect_to show_request_path(:url_title => title) ir.reload @@ -46,10 +46,10 @@ describe ReportsController, "when reporting a request (logged in)" do it "should not allow a request to be reported twice" do title = info_requests(:badger_request).url_title - post :create, :request_id => title + post :create, :request_id => title, :reason => "my reason" response.should redirect_to show_request_url(:url_title => title) - post :create, :request_id => title + post :create, :request_id => title, :reason => "my reason" response.should redirect_to show_request_url(:url_title => title) flash[:notice].should =~ /has already been reported/ end @@ -57,7 +57,7 @@ describe ReportsController, "when reporting a request (logged in)" do it "should send an email from the reporter to admins" do ir = info_requests(:badger_request) title = ir.url_title - post :create, :request_id => title + post :create, :request_id => title, :reason => "my reason" deliveries = ActionMailer::Base.deliveries deliveries.size.should == 1 mail = deliveries[0] @@ -65,6 +65,16 @@ describe ReportsController, "when reporting a request (logged in)" do mail.from.should include(@user.email) mail.body.should include(@user.name) end + + it "should force the user to pick a reason" do + info_request = mock_model(InfoRequest, :report! => nil, :url_title => "foo", + :report_reasons => ["Not FOIish enough"]) + InfoRequest.should_receive(:find_by_url_title!).with("foo").and_return(info_request) + + post :create, :request_id => "foo", :reason => "" + response.should render_template("new") + flash[:error].should == "Please choose a reason" + end end describe ReportsController, "#new_report_request" do |