rollbar 2.18.2 → 2.19.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +15 -0
  3. data/.travis.yml +155 -93
  4. data/Gemfile +19 -13
  5. data/README.md +12 -0
  6. data/gemfiles/rails30.gemfile +17 -10
  7. data/gemfiles/rails31.gemfile +20 -12
  8. data/gemfiles/rails32.gemfile +16 -7
  9. data/gemfiles/rails40.gemfile +16 -5
  10. data/gemfiles/rails41.gemfile +15 -5
  11. data/gemfiles/rails42.gemfile +25 -14
  12. data/gemfiles/rails50.gemfile +15 -8
  13. data/gemfiles/rails51.gemfile +15 -8
  14. data/gemfiles/rails52.gemfile +62 -0
  15. data/gemfiles/ruby_1_8_and_1_9_2.gemfile +2 -2
  16. data/lib/rails/rollbar_runner.rb +16 -1
  17. data/lib/rollbar/capistrano.rb +71 -39
  18. data/lib/rollbar/capistrano3.rb +53 -1
  19. data/lib/rollbar/capistrano_tasks.rb +131 -0
  20. data/lib/rollbar/configuration.rb +13 -4
  21. data/lib/rollbar/delay/active_job.rb +17 -0
  22. data/lib/rollbar/delay/sidekiq.rb +3 -1
  23. data/lib/rollbar/delay/thread.rb +1 -1
  24. data/lib/rollbar/deploy.rb +69 -0
  25. data/lib/rollbar/item.rb +17 -6
  26. data/lib/rollbar/middleware/js.rb +25 -3
  27. data/lib/rollbar/middleware/js/json_value.rb +26 -0
  28. data/lib/rollbar/notifier.rb +32 -13
  29. data/lib/rollbar/plugins/active_job.rb +3 -0
  30. data/lib/rollbar/plugins/rails/controller_methods.rb +2 -1
  31. data/lib/rollbar/plugins/rails/railtie_mixin.rb +7 -1
  32. data/lib/rollbar/rake_tasks.rb +126 -67
  33. data/lib/rollbar/scrubbers/params.rb +6 -0
  34. data/lib/rollbar/util.rb +75 -45
  35. data/lib/rollbar/util/hash.rb +15 -6
  36. data/lib/rollbar/version.rb +1 -1
  37. data/rollbar.gemspec +2 -3
  38. metadata +9 -261
  39. data/lib/rollbar/tasks/rollbar.cap +0 -47
  40. data/spec/cacert.pem +0 -3988
  41. data/spec/controllers/home_controller_spec.rb +0 -480
  42. data/spec/delay/sidekiq_spec.rb +0 -61
  43. data/spec/delay/sucker_punch_spec.rb +0 -25
  44. data/spec/delayed/backend/test.rb +0 -140
  45. data/spec/delayed/serialization/test.rb +0 -0
  46. data/spec/dummyapp/.gitignore +0 -73
  47. data/spec/dummyapp/Rakefile +0 -7
  48. data/spec/dummyapp/app/assets/javascripts/application.js +0 -3
  49. data/spec/dummyapp/app/assets/stylesheets/application.css.scss +0 -37
  50. data/spec/dummyapp/app/controllers/application_controller.rb +0 -3
  51. data/spec/dummyapp/app/controllers/home_controller.rb +0 -60
  52. data/spec/dummyapp/app/controllers/users_controller.rb +0 -17
  53. data/spec/dummyapp/app/helpers/.gitkeep +0 -0
  54. data/spec/dummyapp/app/mailers/.gitkeep +0 -0
  55. data/spec/dummyapp/app/models/.gitkeep +0 -0
  56. data/spec/dummyapp/app/models/book.rb +0 -5
  57. data/spec/dummyapp/app/models/post.rb +0 -9
  58. data/spec/dummyapp/app/models/user.rb +0 -9
  59. data/spec/dummyapp/app/views/devise/registrations/edit.html.erb +0 -27
  60. data/spec/dummyapp/app/views/devise/registrations/new.html.erb +0 -20
  61. data/spec/dummyapp/app/views/devise/shared/_links.html.erb +0 -25
  62. data/spec/dummyapp/app/views/home/cause_exception.html.erb +0 -1
  63. data/spec/dummyapp/app/views/home/index.html.erb +0 -4
  64. data/spec/dummyapp/app/views/home/report_exception.html.erb +0 -1
  65. data/spec/dummyapp/app/views/js/test.html.erb +0 -1
  66. data/spec/dummyapp/app/views/layouts/_messages.html.erb +0 -5
  67. data/spec/dummyapp/app/views/layouts/_navigation.html.erb +0 -21
  68. data/spec/dummyapp/app/views/layouts/application.html.erb +0 -25
  69. data/spec/dummyapp/app/views/layouts/simple.html.erb +0 -18
  70. data/spec/dummyapp/app/views/users/index.html.erb +0 -8
  71. data/spec/dummyapp/app/views/users/show.html.erb +0 -3
  72. data/spec/dummyapp/config.ru +0 -4
  73. data/spec/dummyapp/config/application.rb +0 -59
  74. data/spec/dummyapp/config/boot.rb +0 -10
  75. data/spec/dummyapp/config/database.yml +0 -25
  76. data/spec/dummyapp/config/environment.rb +0 -5
  77. data/spec/dummyapp/config/environments/development.rb +0 -37
  78. data/spec/dummyapp/config/environments/production.rb +0 -67
  79. data/spec/dummyapp/config/environments/test.rb +0 -37
  80. data/spec/dummyapp/config/initializers/backtrace_silencers.rb +0 -7
  81. data/spec/dummyapp/config/initializers/inflections.rb +0 -15
  82. data/spec/dummyapp/config/initializers/mime_types.rb +0 -5
  83. data/spec/dummyapp/config/initializers/rollbar.rb +0 -26
  84. data/spec/dummyapp/config/initializers/secret_token.rb +0 -7
  85. data/spec/dummyapp/config/initializers/session_store.rb +0 -8
  86. data/spec/dummyapp/config/initializers/wrap_parameters.rb +0 -16
  87. data/spec/dummyapp/config/locales/devise.en.yml +0 -58
  88. data/spec/dummyapp/config/locales/en.yml +0 -5
  89. data/spec/dummyapp/config/routes.rb +0 -17
  90. data/spec/dummyapp/config/secrets.yml +0 -2
  91. data/spec/dummyapp/db/migrate/20121121184652_devise_create_users.rb +0 -46
  92. data/spec/dummyapp/db/migrate/20121121184654_add_name_to_users.rb +0 -5
  93. data/spec/dummyapp/db/migrate/20161219184410_create_books.rb +0 -10
  94. data/spec/dummyapp/db/migrate/20161219185529_add_username_to_users.rb +0 -5
  95. data/spec/dummyapp/db/schema.rb +0 -41
  96. data/spec/dummyapp/db/seeds.rb +0 -12
  97. data/spec/dummyapp/lib/assets/.gitkeep +0 -0
  98. data/spec/dummyapp/public/404.html +0 -26
  99. data/spec/dummyapp/public/422.html +0 -26
  100. data/spec/dummyapp/public/500.html +0 -25
  101. data/spec/dummyapp/public/favicon.ico +0 -0
  102. data/spec/dummyapp/script/rails +0 -6
  103. data/spec/fixtures/file1 +0 -1
  104. data/spec/fixtures/file2 +0 -1
  105. data/spec/fixtures/payloads/message.json +0 -25
  106. data/spec/fixtures/payloads/sample.trace.json +0 -275
  107. data/spec/fixtures/payloads/sample.trace_chain.json +0 -530
  108. data/spec/fixtures/plugins/dummy1.rb +0 -5
  109. data/spec/fixtures/plugins/dummy2.rb +0 -5
  110. data/spec/generators/rollbar/rollbar_generator_rails30_spec.rb +0 -31
  111. data/spec/generators/rollbar/rollbar_generator_spec.rb +0 -51
  112. data/spec/requests/home_spec.rb +0 -49
  113. data/spec/rollbar/configuration_spec.rb +0 -74
  114. data/spec/rollbar/delay/delayed_job_spec.rb +0 -22
  115. data/spec/rollbar/delay/girl_friday_spec.rb +0 -41
  116. data/spec/rollbar/delay/resque_spec.rb +0 -37
  117. data/spec/rollbar/delay/shoryuken_spec.rb +0 -44
  118. data/spec/rollbar/delay/thread_spec.rb +0 -27
  119. data/spec/rollbar/encoding/encoder_spec.rb +0 -63
  120. data/spec/rollbar/item/backtrace_spec.rb +0 -26
  121. data/spec/rollbar/item/frame_spec.rb +0 -267
  122. data/spec/rollbar/item_spec.rb +0 -736
  123. data/spec/rollbar/json/oj_spec.rb +0 -18
  124. data/spec/rollbar/json_spec.rb +0 -110
  125. data/spec/rollbar/lazy_store_spec.rb +0 -99
  126. data/spec/rollbar/logger_proxy_spec.rb +0 -69
  127. data/spec/rollbar/logger_spec.rb +0 -124
  128. data/spec/rollbar/middleware/js_spec.rb +0 -428
  129. data/spec/rollbar/middleware/sinatra_spec.rb +0 -197
  130. data/spec/rollbar/notifier_spec.rb +0 -67
  131. data/spec/rollbar/plugin_spec.rb +0 -209
  132. data/spec/rollbar/plugins/active_job_spec.rb +0 -45
  133. data/spec/rollbar/plugins/delayed_job/job_data_spec.rb +0 -48
  134. data/spec/rollbar/plugins/delayed_job_spec.rb +0 -129
  135. data/spec/rollbar/plugins/rack_spec.rb +0 -152
  136. data/spec/rollbar/plugins/rails_js_spec.rb +0 -19
  137. data/spec/rollbar/plugins/rake_spec.rb +0 -34
  138. data/spec/rollbar/plugins/resque/failure_spec.rb +0 -36
  139. data/spec/rollbar/plugins/sidekiq_spec.rb +0 -169
  140. data/spec/rollbar/plugins/validations_spec.rb +0 -56
  141. data/spec/rollbar/plugins_spec.rb +0 -68
  142. data/spec/rollbar/request_data_extractor_spec.rb +0 -321
  143. data/spec/rollbar/scrubbers/params_spec.rb +0 -598
  144. data/spec/rollbar/scrubbers/url_spec.rb +0 -240
  145. data/spec/rollbar/scrubbers_spec.rb +0 -31
  146. data/spec/rollbar/sidekig/clear_scope_spec.rb +0 -19
  147. data/spec/rollbar/truncation/frames_strategy_spec.rb +0 -70
  148. data/spec/rollbar/truncation/min_body_strategy_spec.rb +0 -57
  149. data/spec/rollbar/truncation/strings_strategy_spec.rb +0 -89
  150. data/spec/rollbar/truncation_spec.rb +0 -27
  151. data/spec/rollbar/util/hash_spec.rb +0 -22
  152. data/spec/rollbar/util/ip_anonymizer_spec.rb +0 -30
  153. data/spec/rollbar/util_spec.rb +0 -80
  154. data/spec/rollbar_bc_spec.rb +0 -380
  155. data/spec/rollbar_spec.rb +0 -1737
  156. data/spec/spec_helper.rb +0 -84
  157. data/spec/support/cause_exception.rb +0 -1
  158. data/spec/support/encoding_helpers.rb +0 -8
  159. data/spec/support/encodings/iso_8859_9 +0 -1
  160. data/spec/support/fixture_helpers.rb +0 -10
  161. data/spec/support/get_ip_raising.rb +0 -7
  162. data/spec/support/helpers.rb +0 -5
  163. data/spec/support/matchers.rb +0 -23
  164. data/spec/support/notifier_helpers.rb +0 -57
  165. data/spec/support/rollbar_api.rb +0 -57
  166. data/spec/support/secure_headers_mocks.rb +0 -83
  167. data/spec/support/shared_contexts.rb +0 -12
@@ -1,480 +0,0 @@
1
- require 'spec_helper'
2
-
3
-
4
- def wrap_process_args(*args)
5
- if ::Gem::Version.new(::Rails.version) >= ::Gem::Version.new('5.0')
6
- [{ :params => args[0], :headers => args[1] }]
7
- else
8
- args
9
- end
10
- end
11
-
12
- describe HomeController do
13
- let(:logger_mock) { double("Rails.logger").as_null_object }
14
- let(:notifier) { Rollbar.notifier }
15
-
16
- before do
17
- Rollbar.clear_notifier!
18
- reset_configuration
19
- preconfigure_rails_notifier
20
-
21
- Rollbar.configure do |config|
22
- config.access_token = test_access_token
23
- config.logger = logger_mock
24
- config.open_timeout = 60
25
- config.request_timeout = 60
26
- end
27
- end
28
-
29
- context "rollbar base_data" do
30
- it 'should have the Rails environment' do
31
- data = Rollbar.notifier.send(:build_item, 'error', 'message', nil, nil, nil)
32
- data['data'][:environment].should == ::Rails.env
33
- end
34
-
35
- it 'should have an overridden environment' do
36
- Rollbar.configure do |config|
37
- config.environment = 'dev'
38
- end
39
-
40
- data = Rollbar.notifier.send(:build_item, 'error', 'message', nil, nil, nil)
41
- data['data'][:environment].should == 'dev'
42
- end
43
-
44
- it 'should use the default "unspecified" environment if rails env ends up being empty' do
45
- old_env, ::Rails.env = ::Rails.env, ''
46
- preconfigure_rails_notifier
47
-
48
- data = Rollbar.notifier.send(:build_item, 'error', 'message', nil, nil, nil)
49
- data['data'][:environment].should == 'unspecified'
50
-
51
- ::Rails.env = old_env
52
- end
53
- end
54
-
55
- context "rollbar controller methods with %s requests" % (local? ? 'local' : 'non-local') do
56
- # TODO run these for a a more-real request
57
- it "should build valid request data" do
58
- data = @controller.rollbar_request_data
59
- data.should have_key(:params)
60
- data.should have_key(:url)
61
- data.should have_key(:user_ip)
62
- data.should have_key(:headers)
63
- data.should have_key(:session)
64
- data.should have_key(:method)
65
- end
66
-
67
- it "should build empty person data when no one is logged-in" do
68
- data = @controller.rollbar_person_data
69
- data.should == {}
70
- end
71
-
72
- context 'rollbar_scrub_headers' do
73
- it 'should filter authentication by default' do
74
- headers = {
75
- 'HTTP_AUTHORIZATION' => 'some-user',
76
- 'HTTP_USER_AGENT' => 'spec'
77
- }
78
-
79
- filtered = controller.send( :rollbar_headers, headers )
80
-
81
- expect(filtered['Authorization']).to match(/\**/)
82
- expect(filtered['User-Agent']).to be_eql('spec')
83
- end
84
-
85
- it 'should filter custom headers' do
86
- Rollbar.configure do |config|
87
- config.scrub_headers = ['Auth', 'Token']
88
- end
89
-
90
- headers = {
91
- 'HTTP_AUTH' => 'auth-value',
92
- 'HTTP_TOKEN' => 'token-value',
93
- 'HTTP_CONTENT_TYPE' => 'text/html'
94
- }
95
-
96
- filtered = controller.send( :rollbar_headers, headers )
97
- expect(filtered['Auth']).to match(/\**/)
98
- expect(filtered['Token']).to match(/\**/)
99
- expect(filtered['Content-Type']).to be_eql('text/html')
100
- end
101
-
102
- end
103
-
104
- context "rollbar_request_url" do
105
- it "should build simple http urls" do
106
- req = controller.request
107
- req.host = 'rollbar.com'
108
-
109
- controller.send(:rollbar_request_data)[:url].should == 'http://rollbar.com'
110
- end
111
-
112
- it "should respect forwarded host" do
113
- req = controller.request
114
- req.host = '127.0.0.1:8080'
115
- req.env['HTTP_X_FORWARDED_HOST'] = 'test.com'
116
-
117
- controller.send(:rollbar_request_data)[:url].should == 'http://test.com'
118
- end
119
-
120
- it "should respect forwarded proto" do
121
- req = controller.request
122
- req.host = 'rollbar.com'
123
- req.env['HTTP_X_FORWARDED_PROTO'] = 'https'
124
-
125
- controller.send(:rollbar_request_data)[:url].should == 'https://rollbar.com'
126
- end
127
-
128
- it "should respect forwarded port" do
129
- req = controller.request
130
- req.host = '127.0.0.1:8080'
131
- req.env['HTTP_X_FORWARDED_HOST'] = 'test.com'
132
- req.env['HTTP_X_FORWARDED_PORT'] = '80'
133
-
134
- controller.send(:rollbar_request_data)[:url].should == 'http://test.com'
135
-
136
- req.env['HTTP_X_FORWARDED_PORT'] = '81'
137
- controller.send(:rollbar_request_data)[:url].should == 'http://test.com:81'
138
- end
139
- end
140
-
141
- context "rollbar_user_ip" do
142
- it "should use X-Real-Ip when set" do
143
- controller.request.env["HTTP_X_REAL_IP"] = '1.1.1.1'
144
- controller.request.env["HTTP_X_FORWARDED_FOR"] = '1.2.3.4'
145
- controller.send(:rollbar_request_data)[:user_ip].should == '1.1.1.1'
146
- end
147
-
148
- it "should use X-Forwarded-For when set" do
149
- controller.request.env["HTTP_X_FORWARDED_FOR"] = '1.2.3.4'
150
- controller.send(:rollbar_request_data)[:user_ip].should == '1.2.3.4'
151
- end
152
-
153
- it "should use the remote_addr when neither is set" do
154
- controller.send(:rollbar_request_data)[:user_ip].should == '0.0.0.0'
155
- end
156
-
157
- context "rollbar_user_ip obfuscator" do
158
- before do
159
- Rollbar.configure do |config|
160
- config.user_ip_obfuscator_secret = 'secret'
161
- end
162
- end
163
-
164
- it "should obfuscate the ip when user_ip_obfuscator_secret is set" do
165
- real_ip = '1.1.1.1'
166
- obfuscated_ip = '95.191.35.149'
167
- controller.request.env["HTTP_X_REAL_IP"] = real_ip
168
- controller.send(:rollbar_request_data)[:user_ip].should == obfuscated_ip
169
- end
170
-
171
- it "should clear the ip field when an invalid ip is provided" do
172
- invalid_ip = '1.1.1.999'
173
- controller.request.env["HTTP_X_REAL_IP"] = invalid_ip
174
- controller.send(:rollbar_request_data)[:user_ip].should == nil
175
- end
176
- end
177
- end
178
-
179
- context "rollbar_route_params", :type => 'request' do
180
- it "should save controller and action in the payload body" do
181
- post '/report_exception'
182
-
183
- route = controller.send(:rollbar_request_data)[:params]
184
-
185
- route[:controller].should == 'home'
186
- route[:action].should == 'report_exception'
187
-
188
- Rollbar.last_report.should_not be_nil
189
- Rollbar.last_report[:context].should == 'home#report_exception'
190
- end
191
- end
192
- end
193
-
194
- context "param_scrubbing", :type => "request" do
195
- it "should scrub the default scrub_fields" do
196
- params = {
197
- :passwd => "hidden",
198
- :password => "hidden",
199
- :secret => "hidden",
200
- :notpass => "visible",
201
- :secret_token => "f6805fea1cae0fb79c5e63bbdcd12bc6",
202
- }
203
-
204
- post '/report_exception', *wrap_process_args(params)
205
-
206
- filtered = Rollbar.last_report[:request][:POST]
207
-
208
- expect(filtered["passwd"]).to match(/\**/)
209
- expect(filtered["password"]).to match(/\**/)
210
- expect(filtered["secret"]).to match(/\**/)
211
- expect(filtered["notpass"]).to match(/\**/)
212
- expect(filtered["secret_token"]).to match(/\**/)
213
- end
214
-
215
- it "should scrub custom scrub_fields" do
216
- Rollbar.configure do |config|
217
- config.scrub_fields = [:notpass, :secret]
218
- end
219
-
220
- params = {
221
- :passwd => "visible",
222
- :password => "visible",
223
- :secret => "hidden",
224
- :notpass => "hidden"
225
- }
226
-
227
- post '/report_exception', *wrap_process_args(params)
228
-
229
- filtered = Rollbar.last_report[:request][:POST]
230
-
231
- filtered["passwd"].should == "visible"
232
- # config.filter_parameters is set to [:password] in
233
- # spec/dummyapp/config/application.rb
234
- expect(filtered["password"]).to match(/\**/)
235
- expect(filtered["secret"]).to match(/\**/)
236
- expect(filtered["notpass"]).to match(/\**/)
237
- end
238
- end
239
-
240
- describe "GET 'index'" do
241
- it "should be successful and report two messages" do
242
- logger_mock.should_receive(:info).with('[Rollbar] Success').twice
243
- get 'index'
244
- response.should be_success
245
- end
246
- end
247
-
248
- describe "'report_exception'", :type => "request" do
249
- it "should raise a NameError and report an exception after a GET" do
250
- logger_mock.should_receive(:info).with('[Rollbar] Success').once
251
-
252
- get '/report_exception'
253
- response.should be_success
254
- end
255
-
256
- it "should raise a NameError and have PUT params in the reported exception" do
257
- logger_mock.should_receive(:info).with('[Rollbar] Success')
258
-
259
- put '/report_exception', *wrap_process_args({ :putparam => "putval" })
260
-
261
- Rollbar.last_report.should_not be_nil
262
- Rollbar.last_report[:request][:POST]["putparam"].should == "putval"
263
- end
264
-
265
- context 'using deprecated report_exception' do
266
- it 'reports the errors successfully' do
267
- logger_mock.should_receive(:info).with('[Rollbar] Success')
268
-
269
- put '/deprecated_report_exception', *wrap_process_args({ :putparam => "putval" })
270
-
271
- Rollbar.last_report.should_not be_nil
272
- Rollbar.last_report[:request][:POST]["putparam"].should == "putval"
273
- end
274
- end
275
-
276
- it "should raise a NameError and have JSON POST params" do
277
- logger_mock.should_receive(:info).with('[Rollbar] Success')
278
- @request.env["HTTP_ACCEPT"] = "application/json"
279
-
280
- params = { :jsonparam => 'jsonval' }.to_json
281
- post '/report_exception', *wrap_process_args(params, { 'CONTENT_TYPE' => 'application/json' })
282
-
283
- Rollbar.last_report.should_not be_nil
284
- expect(Rollbar.last_report[:request][:body]).to be_eql(params)
285
- end
286
- end
287
-
288
- describe "'cause_exception'", :type => "request" do
289
- it "should raise an uncaught exception and report a message" do
290
- logger_mock.should_receive(:info).with('[Rollbar] Success').once
291
-
292
- expect { get '/cause_exception' }.to raise_exception(NameError)
293
- end
294
-
295
- context 'show_exceptions' do
296
- before(:each) do
297
- if Dummy::Application.respond_to? :env_config
298
- config = Dummy::Application.env_config
299
- else
300
- config = Dummy::Application.env_defaults
301
- end
302
-
303
- config['action_dispatch.show_exceptions'] = true
304
- end
305
-
306
- after do
307
- if Dummy::Application.respond_to? :env_config
308
- config = Dummy::Application.env_config
309
- else
310
- config = Dummy::Application.env_defaults
311
- end
312
-
313
- config['action_dispatch.show_exceptions'] = false
314
- end
315
-
316
- it "middleware should catch the exception and only report to rollbar once" do
317
- logger_mock.should_receive(:info).with('[Rollbar] Success').once
318
-
319
- get '/cause_exception'
320
- end
321
-
322
- it 'should not fail if the controller doesnt contain the person method' do
323
- Rollbar.configure do |config|
324
- config.person_method = 'invalid_method'
325
- end
326
-
327
- get '/cause_exception'
328
- end
329
-
330
- context 'with logged user' do
331
- let(:user) do
332
- User.create(:email => 'foo@bar.com',
333
- :username => 'the_username')
334
- end
335
-
336
- before { cookies[:session_id] = user.id }
337
-
338
- subject(:person_data) do
339
- put '/report_exception', *wrap_process_args('foo' => 'bar')
340
-
341
- Rollbar.last_report[:person]
342
- end
343
-
344
- context 'default' do
345
- it 'sends the current user data excluding personally identifiable information' do
346
- expect(person_data).to eq(:id => user.id,
347
- :email => nil,
348
- :username => nil)
349
- end
350
- end
351
-
352
- context 'without EU GDPR subjects' do
353
- context 'configured to send email addresses' do
354
- before { Rollbar.configure { |config| config.person_email_method = 'email' } }
355
-
356
- it 'sends the current user data including email address' do
357
- expect(person_data).to eq(:id => user.id,
358
- :email => 'foo@bar.com',
359
- :username => nil)
360
- end
361
-
362
- context 'configured to send email addresses and username' do
363
- before { Rollbar.configure { |config| config.person_username_method = 'username' } }
364
-
365
- it 'sends the current user data including email address and username' do
366
- expect(person_data).to eq(:id => user.id,
367
- :email => 'foo@bar.com',
368
- :username => 'the_username')
369
- end
370
- end
371
- end
372
- end
373
- end
374
- end
375
- end
376
-
377
- context 'with routing errors', :type => :request do
378
- it 'raises a RoutingError exception' do
379
- expect { get '/foo/bar', *wrap_process_args({ :foo => :bar }) }.to raise_exception(ActionController::RoutingError)
380
-
381
- report = Rollbar.last_report
382
- expect(report[:request][:GET]['foo']).to be_eql('bar')
383
- end
384
- end
385
-
386
- context 'with ip parsing raising error' do
387
- it 'raise a IpSpoofAttackError exception' do
388
- controller.request.env['action_dispatch.remote_ip'] = GetIpRaising.new
389
-
390
- expect do
391
- expect(controller.send(:rollbar_request_data)[:user_ip]).to be_nil
392
- end.not_to raise_exception
393
- end
394
- end
395
-
396
- context 'with file uploads',:type => "request" do
397
- let(:file1) { fixture_file_upload('spec/fixtures/file1') }
398
- let(:file2) { fixture_file_upload('spec/fixtures/file2') }
399
-
400
- context 'with a single upload' do
401
- it "saves attachment data" do
402
- expect { post '/file_upload', *wrap_process_args({ :upload => file1 }) }.to raise_exception(NameError)
403
-
404
- upload_param = Rollbar.last_report[:request][:POST]['upload']
405
-
406
- expect(upload_param).to have_key(:filename)
407
- expect(upload_param).to have_key(:type)
408
- expect(upload_param).to have_key(:name)
409
- expect(upload_param).to have_key(:head)
410
-
411
- expect(upload_param[:tempfile]).to be_eql("Skipped value of class 'Tempfile'")
412
- end
413
- end
414
-
415
- context 'with multiple uploads', :type => :request do
416
- it "saves attachment data for all uploads" do
417
- expect { post '/file_upload', *wrap_process_args({ :upload => [file1, file2] }) }.to raise_exception(NameError)
418
- sent_params = Rollbar.last_report[:request][:POST]['upload']
419
-
420
- expect(sent_params).to be_kind_of(Array)
421
- expect(sent_params.size).to be(2)
422
- end
423
- end
424
- end
425
-
426
- context 'with session data', :type => :request do
427
- before { get '/set_session_data' }
428
-
429
- it 'reports the session data' do
430
- expect { get '/use_session_data' }.to raise_exception(NoMethodError)
431
-
432
- session_data = Rollbar.last_report[:request][:session]
433
-
434
- expect(session_data['some_value']).to be_eql('this-is-a-cool-value')
435
- end
436
- end
437
-
438
- context 'with json ACCEPT header', :type => 'request' do
439
- let(:params) { { :foo => :bar } }
440
-
441
- it 'parses the correct headers' do
442
- expect do
443
- post '/cause_exception', *wrap_process_args(params, { 'ACCEPT' => 'application/vnd.github.v3+json' })
444
- end.to raise_exception(NameError)
445
-
446
- expect(Rollbar.last_report[:request][:POST]['foo']).to be_eql('bar')
447
- end
448
- end
449
-
450
- context 'with params to be scrubed from URL', :type => :request do
451
- next unless Rollbar::LanguageSupport.can_scrub_url?
452
-
453
- before do
454
- Rollbar.configure do |config|
455
- config.scrub_fields = [:password]
456
- end
457
- end
458
-
459
- let(:headers) do
460
- {
461
- 'ORIGINAL_FULLPATH' => '/cause_exception?password=my-secret-password'
462
- }
463
- end
464
-
465
- it 'scrubs sensible data from URL' do
466
- expect { get '/cause_exception', *wrap_process_args({ :password => 'my-secret-password' }, headers) }.to raise_exception(NameError)
467
-
468
- request_data = Rollbar.last_report[:request]
469
-
470
- expect(request_data[:url]).to match('http:\/\/www.example.com\/cause_exception\?password=\*{3,8}')
471
- end
472
- end
473
-
474
- after do
475
- Rollbar.configure do |config|
476
- config.logger = ::Rails.logger
477
- end
478
- end
479
-
480
- end