From 5fbb8f4357fd759cadfa0191694d3bad49d86a90 Mon Sep 17 00:00:00 2001 From: Matthew Landauer Date: Fri, 22 Mar 2013 16:48:48 +1100 Subject: Move reporting actions to their own controller --- spec/controllers/reports_controller_spec.rb | 94 +++++++++++++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 spec/controllers/reports_controller_spec.rb (limited to 'spec/controllers/reports_controller_spec.rb') 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 + + -- cgit v1.2.3 From 1e89b0ab2050238d3368fd0fbaeac66e35c80d1c Mon Sep 17 00:00:00 2001 From: Matthew Landauer Date: Fri, 22 Mar 2013 17:02:23 +1100 Subject: Rename controller actions --- spec/controllers/reports_controller_spec.rb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'spec/controllers/reports_controller_spec.rb') diff --git a/spec/controllers/reports_controller_spec.rb b/spec/controllers/reports_controller_spec.rb index c53748df2..61e35c065 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 :report_request, :url_title => info_requests(:badger_request).url_title + post :create, :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) @@ -19,7 +19,7 @@ describe ReportsController, "when reporting a request (logged in)" do it "should 404 for non-existent requests" do lambda { - post :report_request, :url_title => "hjksfdhjk_louytu_qqxxx" + post :create, :url_title => "hjksfdhjk_louytu_qqxxx" }.should raise_error(ActiveRecord::RecordNotFound) end @@ -28,7 +28,7 @@ describe ReportsController, "when reporting a request (logged in)" do title = ir.url_title ir.attention_requested.should == false - post :report_request, :url_title => title + post :create, :url_title => title response.should redirect_to show_request_path(:url_title => title) ir.reload @@ -40,16 +40,16 @@ describe ReportsController, "when reporting a request (logged in)" 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" + post :create, :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 + post :create, :url_title => title response.should redirect_to show_request_url(:url_title => title) - post :report_request, :url_title => title + post :create, :url_title => title 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 :report_request, :url_title => title + post :create, :url_title => title deliveries = ActionMailer::Base.deliveries deliveries.size.should == 1 mail = deliveries[0] @@ -75,8 +75,8 @@ describe ReportsController, "#new_report_request" do 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") + get :new, :url_title => "foo" + response.should_not render_template("new") end end @@ -85,8 +85,8 @@ describe ReportsController, "#new_report_request" 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") + get :new, :url_title => "foo" + response.should render_template("new") end end end -- cgit v1.2.3 From 2973621ba353cb48e251fda31631f7bfa4f57621 Mon Sep 17 00:00:00 2001 From: Matthew Landauer Date: Fri, 22 Mar 2013 17:15:08 +1100 Subject: Rename parameter used in routes and controller --- spec/controllers/reports_controller_spec.rb | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) (limited to 'spec/controllers/reports_controller_spec.rb') diff --git a/spec/controllers/reports_controller_spec.rb b/spec/controllers/reports_controller_spec.rb index 61e35c065..45ee5ceba 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, :url_title => info_requests(:badger_request).url_title + post :create, :request_id => 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) @@ -19,7 +19,7 @@ describe ReportsController, "when reporting a request (logged in)" do it "should 404 for non-existent requests" do lambda { - post :create, :url_title => "hjksfdhjk_louytu_qqxxx" + post :create, :request_id => "hjksfdhjk_louytu_qqxxx" }.should raise_error(ActiveRecord::RecordNotFound) end @@ -28,7 +28,7 @@ describe ReportsController, "when reporting a request (logged in)" do title = ir.url_title ir.attention_requested.should == false - post :create, :url_title => title + post :create, :request_id => title response.should redirect_to show_request_path(:url_title => title) ir.reload @@ -40,16 +40,16 @@ describe ReportsController, "when reporting a request (logged in)" 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 :create, :url_title => "foo", :reason => "Not valid request", :message => "It's just not" + post :create, :request_id => "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 :create, :url_title => title + post :create, :request_id => title response.should redirect_to show_request_url(:url_title => title) - post :create, :url_title => title + post :create, :request_id => title 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, :url_title => title + post :create, :request_id => title deliveries = ActionMailer::Base.deliveries deliveries.size.should == 1 mail = deliveries[0] @@ -75,7 +75,7 @@ describe ReportsController, "#new_report_request" do context "not logged in" do it "should require the user to be logged in" do - get :new, :url_title => "foo" + get :new, :request_id => "foo" response.should_not render_template("new") end end @@ -85,7 +85,7 @@ describe ReportsController, "#new_report_request" do session[:user_id] = users(:bob_smith_user).id end it "should show the form" do - get :new, :url_title => "foo" + get :new, :request_id => "foo" response.should render_template("new") end end -- cgit v1.2.3 From 8c5a1ba9ed8a3d30564a178926a2729b9e9931d7 Mon Sep 17 00:00:00 2001 From: Matthew Landauer Date: Fri, 22 Mar 2013 17:47:01 +1100 Subject: User needs to choose a reason --- spec/controllers/reports_controller_spec.rb | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'spec/controllers/reports_controller_spec.rb') 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 -- cgit v1.2.3