From 67dc39ed036d1aa27d9f49dfddb04b51ff8710d2 Mon Sep 17 00:00:00 2001 From: Matthew Landauer Date: Fri, 22 Mar 2013 13:23:26 +1100 Subject: Only allow reporting a request when logged in --- spec/controllers/request_controller_spec.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'spec/controllers/request_controller_spec.rb') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index ccbf6b8ab..02a013906 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2403,4 +2403,28 @@ 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 + -- cgit v1.2.3 From 06c1d5844c7da1f03acb930afe29f6c7221c62ba Mon Sep 17 00:00:00 2001 From: Matthew Landauer Date: Fri, 22 Mar 2013 14:22:26 +1100 Subject: Posted reason and message gets sent out in the email --- spec/controllers/request_controller_spec.rb | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'spec/controllers/request_controller_spec.rb') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index 02a013906..d73fb89c7 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2329,6 +2329,13 @@ describe RequestController, "when reporting a request (logged in)" do 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(:set_described_state).with("attention_requested", @user, "Reason: Not valid request\n\nIt's just not") + 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 -- cgit v1.2.3 From 661ad52ef88de7afcbd7820d8283057764f4d1ac Mon Sep 17 00:00:00 2001 From: Matthew Landauer Date: Fri, 22 Mar 2013 14:50:01 +1100 Subject: Only allow posts for reporting request. Don't try redirection when not logged in --- spec/controllers/request_controller_spec.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'spec/controllers/request_controller_spec.rb') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index d73fb89c7..260fbb9fa 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2294,9 +2294,10 @@ end describe RequestController, "when reporting a request when not logged in" do it "should only allow logged-in users to report requests" do - get :report_request, :url_title => info_requests(:badger_request).url_title - post_redirect = PostRedirect.get_last_post_redirect - response.should redirect_to(:controller => 'user', :action => 'signin', :token => post_redirect.token) + 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 -- cgit v1.2.3 From ca4ae410e70ab490ae4c8cad8839f41783c89ef7 Mon Sep 17 00:00:00 2001 From: Matthew Landauer Date: Fri, 22 Mar 2013 15:02:30 +1100 Subject: Extract method --- spec/controllers/request_controller_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'spec/controllers/request_controller_spec.rb') diff --git a/spec/controllers/request_controller_spec.rb b/spec/controllers/request_controller_spec.rb index 260fbb9fa..1fbe8a9a4 100644 --- a/spec/controllers/request_controller_spec.rb +++ b/spec/controllers/request_controller_spec.rb @@ -2333,7 +2333,7 @@ describe RequestController, "when reporting a request (logged in)" do 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(:set_described_state).with("attention_requested", @user, "Reason: Not valid request\n\nIt's just not") + 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 -- cgit v1.2.3 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/request_controller_spec.rb | 148 ++++++---------------------- 1 file changed, 30 insertions(+), 118 deletions(-) (limited to 'spec/controllers/request_controller_spec.rb') 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 - - -- cgit v1.2.3