Commit cf1668265c287deba85b41c7938d7a21b466eb2d

Authored by Cyril Mougel
1 parent 5ac87c8d
Exists in master and in 1 other branch production

Extract test from spec/model/app to spec/model/error_report

Some test on spec/model/app are too specific to spec/model/error_report
move to this spec
app/models/app.rb
@@ -81,7 +81,10 @@ class App @@ -81,7 +81,10 @@ class App
81 end 81 end
82 82
83 def find_or_create_err!(attrs) 83 def find_or_create_err!(attrs)
84 - Err.where(:fingerprint => attrs[:fingerprint]).first || problems.create!.errs.create!(attrs) 84 + Err.where(
  85 + :fingerprint => attrs[:fingerprint]
  86 + ).first ||
  87 + problems.create!.errs.create!(attrs)
85 end 88 end
86 89
87 # Mongoid Bug: find(id) on association proxies returns an Enumerator 90 # Mongoid Bug: find(id) on association proxies returns an Enumerator
spec/models/app_spec.rb
@@ -195,76 +195,6 @@ describe App do @@ -195,76 +195,6 @@ describe App do
195 ErrorReport.any_instance.stub(:fingerprint).and_return('fingerprintdigest') 195 ErrorReport.any_instance.stub(:fingerprint).and_return('fingerprintdigest')
196 end 196 end
197 197
198 - it 'finds the correct app' do  
199 - @notice = App.report_error!(@xml)  
200 - @notice.err.app.should == @app  
201 - end  
202 -  
203 - it 'finds the correct err for the notice' do  
204 - App.should_receive(:find_by_api_key!).and_return(@app)  
205 - @app.should_receive(:find_or_create_err!).with({  
206 - :error_class => 'HoptoadTestingException',  
207 - :component => 'application',  
208 - :action => 'verify',  
209 - :environment => 'development',  
210 - :fingerprint => 'fingerprintdigest'  
211 - }).and_return(err = Fabricate(:err))  
212 - err.notices.stub(:create!)  
213 - @notice = App.report_error!(@xml)  
214 - end  
215 -  
216 - it 'marks the err as unresolved if it was previously resolved' do  
217 - App.should_receive(:find_by_api_key!).and_return(@app)  
218 - @app.should_receive(:find_or_create_err!).with({  
219 - :error_class => 'HoptoadTestingException',  
220 - :component => 'application',  
221 - :action => 'verify',  
222 - :environment => 'development',  
223 - :fingerprint => 'fingerprintdigest'  
224 - }).and_return(err = Fabricate(:err, :problem => Fabricate(:problem, :resolved => true)))  
225 - err.should be_resolved  
226 - @notice = App.report_error!(@xml)  
227 - @notice.err.should == err  
228 - @notice.err.should_not be_resolved  
229 - end  
230 -  
231 - it 'should create a new notice' do  
232 - @notice = App.report_error!(@xml)  
233 - @notice.should be_persisted  
234 - end  
235 -  
236 - it 'assigns an err to the notice' do  
237 - @notice = App.report_error!(@xml)  
238 - @notice.err.should be_a(Err)  
239 - end  
240 -  
241 - it 'captures the err message' do  
242 - @notice = App.report_error!(@xml)  
243 - @notice.message.should == 'HoptoadTestingException: Testing hoptoad via "rake hoptoad:test". If you can see this, it works.'  
244 - end  
245 -  
246 - it 'captures the backtrace' do  
247 - @notice = App.report_error!(@xml)  
248 - @notice.backtrace_lines.size.should == 73  
249 - @notice.backtrace_lines.last['file'].should == '[GEM_ROOT]/bin/rake'  
250 - end  
251 -  
252 - it 'captures the server_environment' do  
253 - @notice = App.report_error!(@xml)  
254 - @notice.server_environment['environment-name'].should == 'development'  
255 - end  
256 -  
257 - it 'captures the request' do  
258 - @notice = App.report_error!(@xml)  
259 - @notice.request['url'].should == 'http://example.org/verify'  
260 - @notice.request['params']['controller'].should == 'application'  
261 - end  
262 -  
263 - it 'captures the notifier' do  
264 - @notice = App.report_error!(@xml)  
265 - @notice.notifier['name'].should == 'Hoptoad Notifier'  
266 - end  
267 -  
268 it "should handle params without 'request' section" do 198 it "should handle params without 'request' section" do
269 xml = Rails.root.join('spec','fixtures','hoptoad_test_notice_without_request_section.xml').read 199 xml = Rails.root.join('spec','fixtures','hoptoad_test_notice_without_request_section.xml').read
270 lambda { App.report_error!(xml) }.should_not raise_error 200 lambda { App.report_error!(xml) }.should_not raise_error
@@ -276,18 +206,6 @@ describe App do @@ -276,18 +206,6 @@ describe App do
276 @notice.backtrace_lines.length.should == 1 206 @notice.backtrace_lines.length.should == 1
277 end 207 end
278 208
279 - it 'captures the current_user' do  
280 - @notice = App.report_error!(@xml)  
281 - @notice.user_attributes['id'].should == '123'  
282 - @notice.user_attributes['name'].should == 'Mr. Bean'  
283 - @notice.user_attributes['email'].should == 'mr.bean@example.com'  
284 - @notice.user_attributes['username'].should == 'mrbean'  
285 - end  
286 -  
287 - it 'captures the framework' do  
288 - @notice = App.report_error!(@xml)  
289 - @notice.framework.should == 'Rails: 3.2.11'  
290 - end  
291 209
292 end 210 end
293 211
spec/models/error_report_spec.rb
@@ -3,7 +3,7 @@ require 'spec_helper' @@ -3,7 +3,7 @@ require 'spec_helper'
3 describe ErrorReport do 3 describe ErrorReport do
4 context "with notice without line of backtrace" do 4 context "with notice without line of backtrace" do
5 let(:xml){ 5 let(:xml){
6 - Rails.root.join('spec','fixtures','hoptoad_test_notice_with_one_line_of_backtrace.xml').read 6 + Rails.root.join('spec','fixtures','hoptoad_test_notice.xml').read
7 } 7 }
8 8
9 let(:error_report) { 9 let(:error_report) {
@@ -17,6 +17,12 @@ describe ErrorReport do @@ -17,6 +17,12 @@ describe ErrorReport do
17 ) 17 )
18 } 18 }
19 19
  20 + describe "#app" do
  21 + it 'find the good app' do
  22 + expect(error_report.app).to eq app
  23 + end
  24 + end
  25 +
20 describe "#backtrace" do 26 describe "#backtrace" do
21 27
22 it 'should have valid backtrace' do 28 it 'should have valid backtrace' do
@@ -32,6 +38,41 @@ describe ErrorReport do @@ -32,6 +38,41 @@ describe ErrorReport do
32 app.reload.problems.count 38 app.reload.problems.count
33 }.by(1) 39 }.by(1)
34 end 40 end
  41 + describe "notice create" do
  42 + before { error_report.generate_notice! }
  43 + subject { error_report.notice }
  44 + its(:message) { 'HoptoadTestingException: Testing hoptoad via "rake hoptoad:test". If you can see this, it works.' }
  45 + its(:framework) { should == 'Rails: 3.2.11' }
  46 +
  47 + it 'has complete backtrace' do
  48 + subject.backtrace_lines.size.should == 73
  49 + subject.backtrace_lines.last['file'].should == '[GEM_ROOT]/bin/rake'
  50 + end
  51 + it 'has server_environement' do
  52 + subject.server_environment['environment-name'].should == 'development'
  53 + end
  54 +
  55 + it 'has request' do
  56 + subject.request['url'].should == 'http://example.org/verify'
  57 + subject.request['params']['controller'].should == 'application'
  58 + end
  59 +
  60 + it 'has notifier' do
  61 + subject.notifier['name'].should == 'Hoptoad Notifier'
  62 + end
  63 +
  64 + it 'get user_attributes' do
  65 + subject.user_attributes['id'].should == '123'
  66 + subject.user_attributes['name'].should == 'Mr. Bean'
  67 + subject.user_attributes['email'].should == 'mr.bean@example.com'
  68 + subject.user_attributes['username'].should == 'mrbean'
  69 + end
  70 + end
  71 +
  72 + it 'save a notice assignes to err' do
  73 + error_report.generate_notice!
  74 + error_report.notice.err.should be_a(Err)
  75 + end
35 76
36 it 'memoize the notice' do 77 it 'memoize the notice' do
37 expect { 78 expect {
@@ -41,6 +82,46 @@ describe ErrorReport do @@ -41,6 +82,46 @@ describe ErrorReport do
41 Notice.count 82 Notice.count
42 }.by(1) 83 }.by(1)
43 end 84 end
  85 +
  86 + it 'find the correct err for the notice' do
  87 + Fabricate(
  88 + :err, {
  89 + :fingerprint => 'eeb6cc484167899c061e7859008c4b23bae0851c',
  90 + :problem => Fabricate(:problem, :resolved => true)
  91 + }
  92 + )
  93 + expect {
  94 + error_report.generate_notice!
  95 + }.to change {
  96 + error_report.error.resolved?
  97 + }.from(true).to(false)
  98 + end
  99 +
  100 + context "with xml without request section" do
  101 + let(:xml){
  102 + Rails.root.join('spec','fixtures','hoptoad_test_notice_without_request_section.xml').read
  103 + }
  104 + it "save a notice" do
  105 + expect {
  106 + error_report.generate_notice!
  107 + }.to change {
  108 + app.reload.problems.count
  109 + }.by(1)
  110 + end
  111 + end
  112 +
  113 + context "with xml with only a single line of backtrace" do
  114 + let(:xml){
  115 + Rails.root.join('spec','fixtures','hoptoad_test_notice_with_one_line_of_backtrace.xml').read
  116 + }
  117 + it "save a notice" do
  118 + expect {
  119 + error_report.generate_notice!
  120 + }.to change {
  121 + app.reload.problems.count
  122 + }.by(1)
  123 + end
  124 + end
44 end 125 end
45 126
46 describe "#valid?" do 127 describe "#valid?" do