aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/controllers/reports_controller.rb23
-rw-r--r--app/controllers/request_controller.rb22
-rw-r--r--app/views/reports/new_report_request.html.erb (renamed from app/views/request/new_report_request.html.erb)0
-rw-r--r--config/routes.rb6
-rw-r--r--spec/controllers/reports_controller_spec.rb94
-rw-r--r--spec/controllers/request_controller_spec.rb148
-rw-r--r--spec/views/reports/new_report_request.html.erb_spec.rb (renamed from spec/views/request/new_report_request.html.erb_spec.rb)2
7 files changed, 151 insertions, 144 deletions
diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb
new file mode 100644
index 000000000..cf1ad19e7
--- /dev/null
+++ b/app/controllers/reports_controller.rb
@@ -0,0 +1,23 @@
+class ReportsController < ApplicationController
+ def report_request
+ info_request = InfoRequest.find_by_url_title!(params[:url_title])
+ if !authenticated_user
+ flash[:notice] = _("You need to be logged in to report a request for administrator attention")
+ 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)
+ flash[:notice] = _("This request has been reported for administrator attention")
+ end
+ redirect_to request_url(info_request)
+ end
+
+ def new_report_request
+ @info_request = InfoRequest.find_by_url_title!(params[:url_title])
+ if authenticated?(
+ :web => _("To report this request"),
+ :email => _("Then you can report the request '{{title}}'", :title => @info_request.title),
+ :email_subject => _("Report an offensive or unsuitable request"))
+ end
+ end
+end
diff --git a/app/controllers/request_controller.rb b/app/controllers/request_controller.rb
index 12ba1a3a9..7bc37de5e 100644
--- a/app/controllers/request_controller.rb
+++ b/app/controllers/request_controller.rb
@@ -680,28 +680,6 @@ class RequestController < ApplicationController
end
end
- def report_request
- info_request = InfoRequest.find_by_url_title!(params[:url_title])
- if !authenticated_user
- flash[:notice] = _("You need to be logged in to report a request for administrator attention")
- 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)
- flash[:notice] = _("This request has been reported for administrator attention")
- end
- redirect_to request_url(info_request)
- end
-
- def new_report_request
- @info_request = InfoRequest.find_by_url_title!(params[:url_title])
- if authenticated?(
- :web => _("To report this request"),
- :email => _("Then you can report the request '{{title}}'", :title => @info_request.title),
- :email_subject => _("Report an offensive or unsuitable request"))
- end
- end
-
# special caching code so mime types are handled right
around_filter :cache_attachments, :only => [ :get_attachment, :get_attachment_as_html ]
def cache_attachments
diff --git a/app/views/request/new_report_request.html.erb b/app/views/reports/new_report_request.html.erb
index 11b682282..11b682282 100644
--- a/app/views/request/new_report_request.html.erb
+++ b/app/views/reports/new_report_request.html.erb
diff --git a/config/routes.rb b/config/routes.rb
index c3e512b9d..4ba74f681 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -58,11 +58,11 @@ Alaveteli::Application.routes.draw do
match '/upload/request/:url_title' => 'request#upload_response', :as => :upload_response
match '/request/:url_title/download' => 'request#download_entire_request', :as => :download_entire_request
-
- match '/request/:url_title/report' => 'request#report_request', :as => :request_report, :via => :post
- match '/request/:url_title/report/new' => 'request#new_report_request', :as => :new_request_report
####
+ match '/request/:url_title/report' => 'reports#report_request', :as => :request_report, :via => :post
+ match '/request/:url_title/report/new' => 'reports#new_report_request', :as => :new_request_report
+
#### User controller
# Use /profile for things to do with the currently signed in user.
# Use /user/XXXX for things that anyone can see about that user.
diff --git a/spec/controllers/reports_controller_spec.rb b/spec/controllers/reports_controller_spec.rb
new file mode 100644
index 000000000..c53748df2
--- /dev/null
+++ b/spec/controllers/reports_controller_spec.rb
@@ -0,0 +1,94 @@
+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 :report_request, :url_title => info_requests(:badger_request).url_title
+
+ flash[:notice].should =~ /You need to be logged in/
+ response.should redirect_to show_request_path(:url_title => info_requests(:badger_request).url_title)
+ end
+end
+
+describe ReportsController, "when reporting a request (logged in)" do
+ render_views
+
+ before do
+ @user = users(:robin_user)
+ session[:user_id] = @user.id
+ end
+
+ it "should 404 for non-existent requests" do
+ lambda {
+ post :report_request, :url_title => "hjksfdhjk_louytu_qqxxx"
+ }.should raise_error(ActiveRecord::RecordNotFound)
+ end
+
+ it "should mark a request as having been reported" do
+ ir = info_requests(:badger_request)
+ title = ir.url_title
+ ir.attention_requested.should == false
+
+ post :report_request, :url_title => title
+ response.should redirect_to show_request_path(:url_title => title)
+
+ ir.reload
+ ir.attention_requested.should == true
+ ir.described_state.should == "attention_requested"
+ end
+
+ it "should pass on the reason and message" do
+ info_request = mock_model(InfoRequest, :url_title => "foo", :attention_requested= => nil, :save! => nil)
+ InfoRequest.should_receive(:find_by_url_title!).with("foo").and_return(info_request)
+ info_request.should_receive(:report!).with("Not valid request", "It's just not", @user)
+ post :report_request, :url_title => "foo", :reason => "Not valid request", :message => "It's just not"
+ end
+
+ it "should not allow a request to be reported twice" do
+ title = info_requests(:badger_request).url_title
+
+ post :report_request, :url_title => title
+ response.should redirect_to show_request_url(:url_title => title)
+
+ post :report_request, :url_title => title
+ response.should redirect_to show_request_url(:url_title => title)
+ flash[:notice].should =~ /has already been reported/
+ end
+
+ it "should send an email from the reporter to admins" do
+ ir = info_requests(:badger_request)
+ title = ir.url_title
+ post :report_request, :url_title => title
+ deliveries = ActionMailer::Base.deliveries
+ deliveries.size.should == 1
+ mail = deliveries[0]
+ mail.subject.should =~ /attention_requested/
+ mail.from.should include(@user.email)
+ mail.body.should include(@user.name)
+ end
+end
+
+describe ReportsController, "#new_report_request" do
+ let(:info_request) { mock_model(InfoRequest, :url_title => "foo") }
+ before :each do
+ InfoRequest.should_receive(:find_by_url_title!).with("foo").and_return(info_request)
+ end
+
+ context "not logged in" do
+ it "should require the user to be logged in" do
+ get :new_report_request, :url_title => "foo"
+ response.should_not render_template("new_report_request")
+ end
+ end
+
+ context "logged in" do
+ before :each do
+ session[:user_id] = users(:bob_smith_user).id
+ end
+ it "should show the form" do
+ get :new_report_request, :url_title => "foo"
+ response.should render_template("new_report_request")
+ end
+ end
+end
+
+
diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb
index 1fbe8a9a4..bc1307afc 100644
--- a/spec/controllers/request_controller_spec.rb
+++ b/spec/controllers/request_controller_spec.rb
@@ -239,6 +239,36 @@ describe RequestController, "when showing one request" do
end
end
+ context "when the request has not yet been reported" do
+ it "should allow the user to report" do
+ title = info_requests(:badger_request).url_title
+ get :show, :url_title => title
+ response.should_not contain("This request has been reported")
+ response.should contain("Offensive?")
+ end
+ end
+
+ context "when the request has been reported for admin attention" do
+ before :each do
+ info_requests(:fancy_dog_request).report!("", "", nil)
+ end
+ it "should inform the user" do
+ get :show, :url_title => 'why_do_you_have_such_a_fancy_dog'
+ response.should contain("This request has been reported")
+ response.should_not contain("Offensive?")
+ end
+
+ context "and then deemed okay and left to complete" do
+ before :each do
+ info_requests(:fancy_dog_request).set_described_state("successful")
+ end
+ it "should let the user know that the administrators have not hidden this request" do
+ get :show, :url_title => 'why_do_you_have_such_a_fancy_dog'
+ response.body.should =~ (/the site administrators.*have not hidden it/)
+ end
+ end
+ end
+
describe 'when the request is being viewed by an admin' do
describe 'if the request is awaiting description' do
@@ -2291,99 +2321,6 @@ describe RequestController, "when showing similar requests" do
end
-
-describe RequestController, "when reporting a request when not logged in" do
- it "should only allow logged-in users to report requests" do
- post :report_request, :url_title => info_requests(:badger_request).url_title
-
- flash[:notice].should =~ /You need to be logged in/
- response.should redirect_to show_request_path(:url_title => info_requests(:badger_request).url_title)
- end
-end
-
-describe RequestController, "when reporting a request (logged in)" do
- render_views
-
- before do
- @user = users(:robin_user)
- session[:user_id] = @user.id
- end
-
- it "should 404 for non-existent requests" do
- lambda {
- post :report_request, :url_title => "hjksfdhjk_louytu_qqxxx"
- }.should raise_error(ActiveRecord::RecordNotFound)
- end
-
- it "should mark a request as having been reported" do
- ir = info_requests(:badger_request)
- title = ir.url_title
- get :show, :url_title => title
- assigns[:info_request].attention_requested.should == false
-
- post :report_request, :url_title => title
- response.should redirect_to(:action => :show, :url_title => title)
-
- get :show, :url_title => title
- response.should be_success
- assigns[:info_request].attention_requested.should == true
- assigns[:info_request].described_state.should == "attention_requested"
- end
-
- it "should pass on the reason and message" do
- info_request = mock_model(InfoRequest, :url_title => "foo", :attention_requested= => nil, :save! => nil)
- InfoRequest.should_receive(:find_by_url_title!).with("foo").and_return(info_request)
- info_request.should_receive(:report!).with("Not valid request", "It's just not", @user)
- post :report_request, :url_title => "foo", :reason => "Not valid request", :message => "It's just not"
- end
-
- it "should not allow a request to be reported twice" do
- title = info_requests(:badger_request).url_title
-
- post :report_request, :url_title => title
- response.should redirect_to(:action => :show, :url_title => title)
- get :show, :url_title => title
- response.should be_success
- response.body.should include("has been reported")
-
- post :report_request, :url_title => title
- response.should redirect_to(:action => :show, :url_title => title)
- get :show, :url_title => title
- response.should be_success
- response.body.should include("has already been reported")
- end
-
- it "should let users know a request has been reported" do
- title = info_requests(:badger_request).url_title
- get :show, :url_title => title
- response.body.should include("Offensive?")
-
- post :report_request, :url_title => title
- response.should redirect_to(:action => :show, :url_title => title)
-
- get :show, :url_title => title
- response.body.should_not include("Offensive?")
- response.body.should include("This request has been reported")
-
- info_requests(:badger_request).set_described_state("successful")
- get :show, :url_title => title
- response.body.should_not include("This request has been reported")
- response.body.should =~ (/the site administrators.*have not hidden it/)
- end
-
- it "should send an email from the reporter to admins" do
- ir = info_requests(:badger_request)
- title = ir.url_title
- post :report_request, :url_title => title
- deliveries = ActionMailer::Base.deliveries
- deliveries.size.should == 1
- mail = deliveries[0]
- mail.subject.should =~ /attention_requested/
- mail.from.should include(@user.email)
- mail.body.should include(@user.name)
- end
-end
-
describe RequestController, "when caching fragments" do
it "should not fail with long filenames" do
long_name = "blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah.txt"
@@ -2411,28 +2348,3 @@ describe RequestController, "when caching fragments" do
end
-describe RequestController, "#new_report_request" do
- let(:info_request) { mock_model(InfoRequest, :url_title => "foo") }
- before :each do
- InfoRequest.should_receive(:find_by_url_title!).with("foo").and_return(info_request)
- end
-
- context "not logged in" do
- it "should require the user to be logged in" do
- get :new_report_request, :url_title => "foo"
- response.should_not render_template("new_report_request")
- end
- end
-
- context "logged in" do
- before :each do
- session[:user_id] = users(:bob_smith_user).id
- end
- it "should show the form" do
- get :new_report_request, :url_title => "foo"
- response.should render_template("new_report_request")
- end
- end
-end
-
-
diff --git a/spec/views/request/new_report_request.html.erb_spec.rb b/spec/views/reports/new_report_request.html.erb_spec.rb
index b1ccf36c9..806bf74c0 100644
--- a/spec/views/request/new_report_request.html.erb_spec.rb
+++ b/spec/views/reports/new_report_request.html.erb_spec.rb
@@ -1,6 +1,6 @@
require File.expand_path(File.join('..', '..', '..', 'spec_helper'), __FILE__)
-describe 'request/new_report_request.html.erb' do
+describe 'reports/new_report_request.html.erb' do
let(:info_request) { mock_model(InfoRequest, :url_title => "foo") }
before :each do
assign(:info_request, info_request)