Skip to content

Commit a7cc18e

Browse files
committed
clean up error report error handling
test plan: * try to abuse the javascript record_error endpoint (send garbage data for the id, try to do other stuff to make it fail) * it should record ever so slightly more useful information Change-Id: Ibe83fdab3a77175ef1ab73b6c5210ac7265644ae Reviewed-on: https://gerrit.instructure.com/19041 Reviewed-by: Jacob Fugal <jacob@instructure.com> Tested-by: Jenkins <jenkins@instructure.com> Reviewed-by: Brian Palmer <brianp@instructure.com> QA-Review: Clare Hetherington <clare@instructure.com> Product-Review: Cody Cutrer <cody@instructure.com>
1 parent e5832fb commit a7cc18e

2 files changed

Lines changed: 30 additions & 4 deletions

File tree

app/controllers/info_controller.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ def record_error
3939
error[:user_agent] = request.headers['User-Agent']
4040
begin
4141
report_id = error.delete(:id)
42-
@report = ErrorReport.find_by_id(report_id) if report_id.present?
42+
@report = ErrorReport.find_by_id(report_id.to_i) if report_id.present? && report_id.to_i != 0
4343
@report ||= ErrorReport.find_by_id(session.delete(:last_error_id)) if session[:last_error_id].present?
44-
@report ||= ErrorReport.create()
44+
@report ||= ErrorReport.new
4545
error.delete(:category) if @report.category.present?
4646
@report.user = @current_user
4747
@report.account ||= @domain_root_account
@@ -59,12 +59,13 @@ def record_error
5959
ErrorReport.log_exception(:default, e,
6060
:message => "Error Report Creation failed",
6161
:user_email => (error[:email] rescue ''),
62-
:user_id => (error[:user].id rescue ''))
62+
:user_id => @current_user.try(:id)
63+
)
6364
end
6465
respond_to do |format|
6566
flash[:notice] = t('notices.error_reported', "Thanks for your help! We'll get right on this")
6667
format.html { redirect_to root_url }
67-
format.json { render :json => {:logged => true, :id => @report.id}.to_json }
68+
format.json { render :json => {:logged => true, :id => @report.try(:id) }.to_json }
6869
end
6970
end
7071

spec/controllers/info_controller_spec.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,31 @@
2929
assert_recorded_error
3030
end
3131

32+
it "should not choke on non-integer ids" do
33+
post 'record_error', :error => {:id => 'garbage'}
34+
assert_recorded_error
35+
ErrorReport.last.message.should_not == "Error Report Creation failed"
36+
end
37+
38+
it "should not return nil.id if report creation failed" do
39+
ErrorReport.expects(:find_by_id).once.raises("failed!")
40+
post 'record_error', :format => 'json', :error => {:id => 1}
41+
JSON.parse(response.body).should == { 'logged' => true, 'id' => nil }
42+
end
43+
44+
it "should not record the user as nil.id if report creation failed" do
45+
ErrorReport.expects(:find_by_id).once.raises("failed!")
46+
post 'record_error', :error => {:id => 1}
47+
ErrorReport.last.user_id.should be_nil
48+
end
49+
50+
it "should record the user if report creation failed" do
51+
user = User.create!
52+
user_session(user)
53+
ErrorReport.expects(:find_by_id).once.raises("failed!")
54+
post 'record_error', :error => {:id => 1}
55+
ErrorReport.last.user_id.should == user.id
56+
end
3257
end
3358

3459
def assert_recorded_error(msg = "Thanks for your help! We'll get right on this")

0 commit comments

Comments
 (0)