Commit aef9896f211acdc2d967eaf287be82461204b54a

Authored by Cyril Mougel
1 parent 6eb59b4e
Exists in master and in 1 other branch production

Add some test to try report issue #470

Add some test with notice send with empty backtrace
Add some test directly in the ErrorReport model
app/models/error_report.rb
... ... @@ -44,19 +44,30 @@ class ErrorReport
44 44 :user_attributes => user_attributes,
45 45 :framework => framework
46 46 )
  47 + error.notices << notice
  48 + notice
  49 + end
47 50  
48   - err = app.find_or_create_err!(
  51 + ##
  52 + # Error associate to this error_report
  53 + #
  54 + # Can already exist or not
  55 + #
  56 + # @return [ Error ]
  57 + def error
  58 + @error ||= app.find_or_create_err!(
49 59 :error_class => error_class,
50 60 :component => component,
51 61 :action => action,
52 62 :environment => rails_env,
53   - :fingerprint => fingerprint)
54   -
55   - err.notices << notice
56   - notice
  63 + :fingerprint => fingerprint
  64 + )
57 65 end
58 66  
59 67 private
  68 +
  69 +
  70 +
60 71 def fingerprint_source
61 72 # Find the first backtrace line with a file and line number.
62 73 if line = backtrace.lines.detect {|l| l.number.present? && l.file.present? }
... ...
spec/controllers/notices_controller_spec.rb
... ... @@ -24,13 +24,13 @@ describe NoticesController do
24 24 response.body.should match(%r{<url[^>]*>(.+)#{locate_path(@notice.id)}</url>})
25 25 end
26 26  
27   - it "should trnasform xml <va> tags to hashes correctly" do
  27 + it "should transform xml <va> tags to hashes correctly" do
28 28 App.should_receive(:report_error!).with(@xml).and_return(@notice)
29 29 request.should_receive(:raw_post).and_return(@xml)
30 30 post :create, :format => :xml
31 31  
32 32 # XML: <var key="SCRIPT_NAME"/>
33   - @notice.env_vars.should have_key('SCRIPT_NAME')
  33 + @notice.env_vars.should have_key('SCRIPT_NAME')
34 34 @notice.env_vars['SCRIPT_NAME'].should be_nil # blank ends up nil
35 35  
36 36 # XML representation:
... ...
spec/fixtures/hoptoad_test_notice_without_line_of_backtrace.xml 0 → 100644
... ... @@ -0,0 +1,73 @@
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<notice version="2.0">
  3 + <api-key>APIKEY</api-key>
  4 + <notifier>
  5 + <name>Hoptoad Notifier</name>
  6 + <version>2.3.2</version>
  7 + <url>http://hoptoadapp.com</url>
  8 + </notifier>
  9 + <error>
  10 + <class>HoptoadTestingException</class>
  11 + <message>HoptoadTestingException: Testing hoptoad via "rake hoptoad:test". If you can see this, it works.</message>
  12 + <backtrace></backtrace>
  13 + </error>
  14 + <request>
  15 + <url>http://example.org/verify</url>
  16 + <component>application</component>
  17 + <action>verify</action>
  18 + <params>
  19 + <var key="action">verify</var>
  20 + <var key="controller">application</var>
  21 + </params>
  22 + <cgi-data>
  23 + <var key="rack.session"/>
  24 + <var key="action_dispatch.request.formats">text/html</var>
  25 + <var key="action_dispatch.request.parameters">
  26 + <var key="action">verify</var>
  27 + <var key="controller">application</var>
  28 + </var>
  29 + <var key="SERVER_NAME">example.org</var>
  30 + <var key="rack.url_scheme">http</var>
  31 + <var key="action_dispatch.remote_ip"/>
  32 + <var key="CONTENT_LENGTH">0</var>
  33 + <var key="rack.errors">#&lt;StringIO:0x103d9dec0&gt;</var>
  34 + <var key="action_dispatch.request.unsigned_session_cookie"/>
  35 + <var key="action_dispatch.request.query_parameters"/>
  36 + <var key="HTTPS">off</var>
  37 + <var key="rack.run_once">false</var>
  38 + <var key="PATH_INFO">/verify</var>
  39 + <var key="action_dispatch.secret_token">994f235e3372684bc736dd11842b754d2ddcffc8c2958d33a29527c3217becd6655fa4653a318bc7c34131f9baf2acc0c424ed07e48e0e5e87c6cd34d711e985</var>
  40 + <var key="rack.version">11</var>
  41 + <var key="SCRIPT_NAME"/>
  42 + <var key="action_dispatch.request.path_parameters">
  43 + <var key="action">verify</var>
  44 + <var key="controller">application</var>
  45 + </var>
  46 + <var key="rack.multithread">false</var>
  47 + <var key="action_dispatch.parameter_filter">password</var>
  48 + <var key="action_dispatch.cookies"/>
  49 + <var key="action_dispatch.request.request_parameters"/>
  50 + <var key="rack.multiprocess">true</var>
  51 + <var key="rack.request.query_hash"/>
  52 + <var key="SERVER_PORT">80</var>
  53 + <var key="REQUEST_METHOD">GET</var>
  54 + <var key="action_controller.instance">#&lt;ApplicationController:0x103d2f560&gt;</var>
  55 + <var key="rack.session.options">
  56 + <var key="secure">false</var>
  57 + <var key="httponly">true</var>
  58 + <var key="path">/</var>
  59 + <var key="expire_after"/>
  60 + <var key="domain"/>
  61 + <var key="id"/>
  62 + </var>
  63 + <var key="rack.input">#&lt;StringIO:0x103d9dc90&gt;</var>
  64 + <var key="action_dispatch.request.content_type"/>
  65 + <var key="rack.request.query_string"/>
  66 + <var key="QUERY_STRING"/>
  67 + </cgi-data>
  68 + </request>
  69 + <server-environment>
  70 + <project-root>/path/to/sample/project</project-root>
  71 + <environment-name>development</environment-name>
  72 + </server-environment>
  73 +</notice>
... ...
spec/models/error_report_spec.rb 0 → 100644
... ... @@ -0,0 +1,37 @@
  1 +require 'spec_helper'
  2 +
  3 +describe ErrorReport do
  4 + context "with notice without line of backtrace" do
  5 + let(:xml){
  6 + Rails.root.join('spec','fixtures','hoptoad_test_notice_with_one_line_of_backtrace.xml').read
  7 + }
  8 +
  9 + let(:error_report) {
  10 + ErrorReport.new(xml)
  11 + }
  12 +
  13 + let(:app) {
  14 + Fabricate(
  15 + :app,
  16 + :api_key => 'APIKEY'
  17 + )
  18 + }
  19 +
  20 + describe "#backtrace" do
  21 +
  22 + it 'should have valid backtrace' do
  23 + error_report.backtrace.should be_valid
  24 + end
  25 + end
  26 +
  27 + context "#generate_notice!" do
  28 + it "save a notice" do
  29 + expect {
  30 + error_report.generate_notice!
  31 + }.to change {
  32 + app.reload.problems.count
  33 + }.by(1)
  34 + end
  35 + end
  36 + end
  37 +end
... ...
spec/requests/notices_controller_spec.rb 0 → 100644
... ... @@ -0,0 +1,35 @@
  1 +require 'spec_helper'
  2 +
  3 +describe "Notices management" do
  4 +
  5 + let(:errbit_app) { Fabricate(:app,
  6 + :api_key => 'APIKEY') }
  7 +
  8 + describe "create a new notice" do
  9 + context "with valide notice" do
  10 + let(:xml) { Rails.root.join('spec','fixtures','hoptoad_test_notice.xml').read }
  11 + it 'save a new notice' do
  12 + expect {
  13 + post '/notifier_api/v2/notices', :data => xml
  14 + expect(response).to be_success
  15 + }.to change {
  16 + errbit_app.problems.count
  17 + }.by(1)
  18 + end
  19 + end
  20 +
  21 + context "with notice with empty backtrace" do
  22 + let(:xml) { Rails.root.join('spec','fixtures','hoptoad_test_notice_without_line_of_backtrace.xml').read }
  23 + it 'save a new notice' do
  24 + expect {
  25 + post '/notifier_api/v2/notices', :data => xml
  26 + expect(response).to be_success
  27 + }.to change {
  28 + errbit_app.problems.count
  29 + }.by(1)
  30 + end
  31 + end
  32 +
  33 + end
  34 +
  35 +end
... ...