aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/reports_controller.rb16
-rw-r--r--app/views/reports/new.html.erb4
-rw-r--r--spec/controllers/reports_controller_spec.rb20
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