raygun4ruby 1.2.1 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -2,20 +2,24 @@ require_relative "../test_helper.rb"
2
2
  require 'ostruct'
3
3
  require 'raygun/middleware/rails_insert_affected_user'
4
4
 
5
- class ClientTest < Raygun::UnitTest
5
+ class AffectedUserTest < Raygun::UnitTest
6
6
 
7
7
  class TestException < StandardError; end
8
8
 
9
9
  class MockController
10
10
 
11
11
  def user_with_email
12
- OpenStruct.new(email: "testemail@something.com")
12
+ OpenStruct.new(id: 123, email: "testemail@something.com")
13
13
  end
14
14
 
15
15
  def user_with_login
16
16
  OpenStruct.new(login: "topsecret")
17
17
  end
18
18
 
19
+ def user_with_full_details
20
+ OpenStruct.new(id: 123, email: "testemail@something.com", first_name: "Taylor", last_name: "Lodge")
21
+ end
22
+
19
23
  def user_as_string
20
24
  "some-string-identifier"
21
25
  end
@@ -56,22 +60,24 @@ class ClientTest < Raygun::UnitTest
56
60
 
57
61
  begin
58
62
  @middleware.call("action_controller.instance" => @controller)
59
- rescue TestException
60
- user_hash = { :identifier => "testemail@something.com" }
63
+ rescue TestException
64
+ user_hash = { :Identifier => 123, :Email => "testemail@something.com", :IsAnonymous => false }
61
65
  assert_equal user_hash, @app.env["raygun.affected_user"]
62
66
  end
63
67
  end
64
68
 
65
- def test_inserting_user_object_with_login
69
+ def test_changing_method_mapping
66
70
  Raygun.configuration.affected_user_method = :user_with_login
67
- Raygun.configuration.affected_user_identifier_methods << :login
68
-
71
+ Raygun.configuration.affected_user_mapping = {
72
+ identifier: :login
73
+ }
74
+
69
75
  assert @controller.respond_to?(Raygun.configuration.affected_user_method)
70
76
 
71
77
  begin
72
78
  @middleware.call("action_controller.instance" => @controller)
73
- rescue TestException
74
- user_hash = { :identifier => "topsecret" }
79
+ rescue TestException
80
+ user_hash = { :Identifier => "topsecret", :IsAnonymous => false }
75
81
  assert_equal user_hash, @app.env["raygun.affected_user"]
76
82
  end
77
83
  end
@@ -82,8 +88,8 @@ class ClientTest < Raygun::UnitTest
82
88
 
83
89
  begin
84
90
  @middleware.call("action_controller.instance" => @controller)
85
- rescue TestException
86
- user_hash = { :identifier => "some-string-identifier" }
91
+ rescue TestException
92
+ user_hash = { :Identifier => "some-string-identifier", :IsAnonymous => true }
87
93
  assert_equal user_hash, @app.env["raygun.affected_user"]
88
94
  end
89
95
  end
@@ -94,8 +100,9 @@ class ClientTest < Raygun::UnitTest
94
100
 
95
101
  begin
96
102
  @middleware.call("action_controller.instance" => @controller)
97
- rescue TestException
98
- assert_nil @app.env["raygun.affected_user"]
103
+ rescue TestException
104
+ user_hash = { :IsAnonymous => true }
105
+ assert_equal user_hash, @app.env["raygun.affected_user"]
99
106
  end
100
107
  end
101
108
 
@@ -105,10 +112,25 @@ class ClientTest < Raygun::UnitTest
105
112
 
106
113
  begin
107
114
  @middleware.call("action_controller.instance" => @controller)
108
- rescue TestException
109
- user_hash = { :identifier => "testemail@something.com" }
115
+ rescue TestException
116
+ user_hash = {:IsAnonymous=>false, :Identifier=>123, :Email=>"testemail@something.com"}
110
117
  assert_equal user_hash, @app.env["raygun.affected_user"]
111
118
  end
112
119
  end
113
120
 
114
- end
121
+ def test_with_proc_for_mapping
122
+ Raygun.configuration.affected_user_method = :user_with_full_details
123
+ Raygun.configuration.affected_user_mapping = Raygun::AffectedUser::DEFAULT_MAPPING.merge({
124
+ full_name: ->(user) { "#{user.first_name} #{user.last_name}" }
125
+ })
126
+
127
+ assert @controller.respond_to?(Raygun.configuration.affected_user_method, true)
128
+
129
+ begin
130
+ @middleware.call("action_controller.instance" => @controller)
131
+ rescue TestException
132
+ user_hash = {:IsAnonymous=>false, :Identifier=>123, :Email=>"testemail@something.com", :FullName => "Taylor Lodge", :FirstName => "Taylor"}
133
+ assert_equal user_hash, @app.env["raygun.affected_user"]
134
+ end
135
+ end
136
+ end
@@ -4,7 +4,12 @@ require 'stringio'
4
4
 
5
5
  class ClientTest < Raygun::UnitTest
6
6
 
7
- class TestException < StandardError; end
7
+ class TestException < StandardError
8
+ def initialize(message = nil)
9
+ super(message || "A test message")
10
+ end
11
+ end
12
+
8
13
  class NilMessageError < StandardError
9
14
  def message
10
15
  nil
@@ -43,20 +48,7 @@ class ClientTest < Raygun::UnitTest
43
48
  end
44
49
 
45
50
  def test_error_details
46
- e = TestException.new("A test message")
47
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
48
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
49
-
50
- expected_hash = {
51
- className: "ClientTest::TestException",
52
- message: e.message,
53
- stackTrace: [
54
- { lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" },
55
- { lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run"}
56
- ]
57
- }
58
-
59
- assert_equal expected_hash, @client.send(:error_details, e)
51
+ assert_equal exception_hash, @client.send(:error_details, test_exception)
60
52
  end
61
53
 
62
54
  def test_error_details_with_nil_message
@@ -85,11 +77,10 @@ class ClientTest < Raygun::UnitTest
85
77
  end
86
78
 
87
79
  def test_affected_user
88
- e = TestException.new("A test message")
89
80
  test_env = { "raygun.affected_user" => { :identifier => "somepooruser@yourapp.com" } }
90
81
  expected_hash = test_env["raygun.affected_user"]
91
82
 
92
- assert_equal expected_hash, @client.send(:build_payload_hash, e, test_env)[:details][:user]
83
+ assert_equal expected_hash, @client.send(:build_payload_hash, test_exception, test_env)[:details][:user]
93
84
  end
94
85
 
95
86
  def test_tags
@@ -101,11 +92,10 @@ class ClientTest < Raygun::UnitTest
101
92
  config.tags = configuration_tags
102
93
  end
103
94
 
104
- e = TestException.new("A test message")
105
95
  test_env = { tags: explicit_env_tags }
106
96
  expected_tags = configuration_tags + explicit_env_tags + rack_env_tag
107
97
 
108
- assert_equal expected_tags, @client.send(:build_payload_hash, e, test_env)[:details][:tags]
98
+ assert_equal expected_tags, @client.send(:build_payload_hash, test_exception, test_env)[:details][:tags]
109
99
  end
110
100
 
111
101
  def test_hostname
@@ -141,10 +131,6 @@ class ClientTest < Raygun::UnitTest
141
131
  def test_full_payload_hash
142
132
  Timecop.freeze do
143
133
  Raygun.configuration.version = 123
144
- e = TestException.new("A test message")
145
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
146
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
147
-
148
134
  grouping_key = "my custom group"
149
135
 
150
136
  expected_hash = {
@@ -157,14 +143,7 @@ class ClientTest < Raygun::UnitTest
157
143
  version: Raygun::VERSION,
158
144
  clientUrl: Raygun::CLIENT_URL
159
145
  },
160
- error: {
161
- className: "ClientTest::TestException",
162
- message: e.message,
163
- stackTrace: [
164
- { lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" },
165
- { lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run"}
166
- ]
167
- },
146
+ error: exception_hash,
168
147
  userCustomData: {},
169
148
  tags: ["test"],
170
149
  request: {},
@@ -172,33 +151,15 @@ class ClientTest < Raygun::UnitTest
172
151
  }
173
152
  }
174
153
 
175
- assert_equal expected_hash, @client.send(:build_payload_hash, e, { grouping_key: grouping_key })
154
+ assert_equal expected_hash, @client.send(:build_payload_hash, test_exception, { grouping_key: grouping_key })
176
155
  end
177
156
  end
178
157
 
179
158
  def test_getting_request_information
180
- sample_env_hash = {
181
- "SERVER_NAME"=>"localhost",
182
- "REQUEST_METHOD"=>"GET",
183
- "REQUEST_PATH"=>"/",
184
- "PATH_INFO"=>"/",
159
+ env_hash = sample_env_hash.merge({
185
160
  "QUERY_STRING"=>"a=b&c=4945438",
186
161
  "REQUEST_URI"=>"/?a=b&c=4945438",
187
- "HTTP_VERSION"=>"HTTP/1.1",
188
- "HTTP_HOST"=>"localhost:3000",
189
- "HTTP_CONNECTION"=>"keep-alive",
190
- "HTTP_CACHE_CONTROL"=>"max-age=0",
191
- "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
192
- "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
193
- "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
194
- "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
195
- "HTTP_COOKIE"=>"cookieval",
196
- "GATEWAY_INTERFACE"=>"CGI/1.2",
197
- "SERVER_PORT"=>"3000",
198
- "SERVER_PROTOCOL"=>"HTTP/1.1",
199
- "SCRIPT_NAME"=>"",
200
- "REMOTE_ADDR"=>"127.0.0.1"
201
- }
162
+ })
202
163
 
203
164
  expected_hash = {
204
165
  hostName: "localhost",
@@ -206,12 +167,12 @@ class ClientTest < Raygun::UnitTest
206
167
  httpMethod: "GET",
207
168
  iPAddress: "127.0.0.1",
208
169
  queryString: { "a" => "b", "c" => "4945438" },
209
- headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Connection"=>"keep-alive", "Cache-Control"=>"max-age=0", "Accept"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "User-Agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36", "Accept-Encoding"=>"gzip,deflate,sdch", "Accept-Language"=>"en-US,en;q=0.8", "Cookie"=>"cookieval" },
170
+ headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Cookie"=>"cookieval" },
210
171
  form: {},
211
172
  rawData: {}
212
173
  }
213
174
 
214
- assert_equal expected_hash, @client.send(:request_information, sample_env_hash)
175
+ assert_equal expected_hash, @client.send(:request_information, env_hash)
215
176
  end
216
177
 
217
178
  def test_getting_request_information_with_nil_env
@@ -219,37 +180,47 @@ class ClientTest < Raygun::UnitTest
219
180
  end
220
181
 
221
182
  def test_non_form_parameters
222
- put_body_env_hash = {
223
- "SERVER_NAME"=>"localhost",
183
+ put_body_env_hash = sample_env_hash.merge({
224
184
  "REQUEST_METHOD"=>"PUT",
225
- "REQUEST_PATH"=>"/",
226
- "PATH_INFO"=>"/",
227
- "QUERY_STRING"=>"",
228
- "REQUEST_URI"=>"/",
229
- "HTTP_VERSION"=>"HTTP/1.1",
230
- "HTTP_HOST"=>"localhost:3000",
231
- "HTTP_CONNECTION"=>"keep-alive",
232
- "HTTP_CACHE_CONTROL"=>"max-age=0",
233
- "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
234
- "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
235
- "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
236
- "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
237
- "HTTP_COOKIE"=>"cookieval",
238
- "GATEWAY_INTERFACE"=>"CGI/1.2",
239
- "SERVER_PORT"=>"3000",
240
- "SERVER_PROTOCOL"=>"HTTP/1.1",
241
- "SCRIPT_NAME"=>"",
242
- "REMOTE_ADDR"=>"127.0.0.1",
243
185
  "action_dispatch.request.parameters"=> { "a" => "b", "c" => "4945438", "password" => "swordfish" }
244
- }
186
+ })
245
187
 
246
188
  expected_form_hash = { "a" => "b", "c" => "4945438", "password" => "[FILTERED]" }
247
189
 
248
190
  assert_equal expected_form_hash, @client.send(:request_information, put_body_env_hash)[:rawData]
249
191
  end
250
192
 
193
+ def test_error_raygun_custom_data
194
+ custom_data = { "kappa" => "keepo" }
195
+ e = Raygun::Error.new("A test message", custom_data)
196
+ test_env = {}
197
+ expected_form_hash = test_env.merge(custom_data)
198
+
199
+ assert_equal expected_form_hash, @client.send(:build_payload_hash, e, test_env)[:details][:userCustomData]
200
+ end
201
+
202
+ def test_custom_data_configuration_with_hash
203
+ custom_data = {foo: '123'}
204
+ Raygun.configuration.custom_data = custom_data
205
+
206
+ assert_equal custom_data, @client.send(:build_payload_hash, test_exception, sample_env_hash)[:details][:userCustomData]
207
+ end
208
+
209
+ def test_custom_data_configuration_with_proc
210
+ Raygun.configuration.custom_data do |exception, env|
211
+ {exception_message: exception.message, server_name: env["SERVER_NAME"]}
212
+ end
213
+ expected = {
214
+ exception_message: "A test message",
215
+ server_name: "localhost"
216
+ }
217
+
218
+ assert_equal expected, @client.send(:build_payload_hash, test_exception, sample_env_hash)[:details][:userCustomData]
219
+ end
220
+
251
221
  def test_filtering_parameters
252
222
  post_body_env_hash = sample_env_hash.merge(
223
+ "REQUEST_METHOD" => "POST",
253
224
  "rack.input"=>StringIO.new("a=b&c=4945438&password=swordfish")
254
225
  )
255
226
 
@@ -260,6 +231,7 @@ class ClientTest < Raygun::UnitTest
260
231
 
261
232
  def test_filtering_nested_params
262
233
  post_body_env_hash = sample_env_hash.merge(
234
+ "REQUEST_METHOD" => "POST",
263
235
  "rack.input" => StringIO.new("a=b&bank%5Bcredit_card%5D%5Bcard_number%5D=my_secret_bank_number&bank%5Bname%5D=something&c=123456&user%5Bpassword%5D=my_fancy_password")
264
236
  )
265
237
 
@@ -282,6 +254,7 @@ class ClientTest < Raygun::UnitTest
282
254
  end
283
255
 
284
256
  post_body_env_hash = sample_env_hash.merge(
257
+ "REQUEST_METHOD" => "POST",
285
258
  "rack.input" => StringIO.new("nsa_only_info=123&nsa_only_metadata=seekrit&something_normal=hello")
286
259
  )
287
260
 
@@ -311,6 +284,7 @@ class ClientTest < Raygun::UnitTest
311
284
  }
312
285
 
313
286
  post_body_env_hash = sample_env_hash.merge(
287
+ "REQUEST_METHOD" => "POST",
314
288
  "rack.input" => StringIO.new(URI.encode_www_form(parameters))
315
289
  )
316
290
 
@@ -320,93 +294,38 @@ class ClientTest < Raygun::UnitTest
320
294
  end
321
295
 
322
296
  def test_ip_address_from_action_dispatch
323
- sample_env_hash = {
324
- "HTTP_VERSION"=>"HTTP/1.1",
325
- "HTTP_HOST"=>"localhost:3000",
326
- "HTTP_CONNECTION"=>"keep-alive",
327
- "HTTP_CACHE_CONTROL"=>"max-age=0",
328
- "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
329
- "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
330
- "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
331
- "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
332
- "HTTP_COOKIE"=>"cookieval",
333
- "GATEWAY_INTERFACE"=>"CGI/1.2",
334
- "SERVER_PORT"=>"3000",
335
- "SERVER_PROTOCOL"=>"HTTP/1.1",
336
- "SCRIPT_NAME"=>"",
337
- "REMOTE_ADDR"=>"127.0.0.1",
297
+ env_hash = sample_env_hash.merge({
338
298
  "action_dispatch.remote_ip"=> "123.456.789.012"
339
- }
299
+ })
340
300
 
341
- assert_equal "123.456.789.012", @client.send(:ip_address_from, sample_env_hash)
342
- assert_equal "123.456.789.012", @client.send(:request_information, sample_env_hash)[:iPAddress]
301
+ assert_equal "123.456.789.012", @client.send(:ip_address_from, env_hash)
302
+ assert_equal "123.456.789.012", @client.send(:request_information, env_hash)[:iPAddress]
343
303
  end
344
304
 
345
305
  def test_ip_address_from_old_action_dispatch
346
306
  old_action_dispatch_ip = FakeActionDispatcherIp.new("123.456.789.012")
347
- sample_env_hash = {
348
- "HTTP_VERSION"=>"HTTP/1.1",
349
- "HTTP_HOST"=>"localhost:3000",
350
- "HTTP_CONNECTION"=>"keep-alive",
351
- "HTTP_CACHE_CONTROL"=>"max-age=0",
352
- "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
353
- "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
354
- "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
355
- "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
356
- "HTTP_COOKIE"=>"cookieval",
357
- "GATEWAY_INTERFACE"=>"CGI/1.2",
358
- "SERVER_PORT"=>"3000",
359
- "SERVER_PROTOCOL"=>"HTTP/1.1",
360
- "SCRIPT_NAME"=>"",
361
- "REMOTE_ADDR"=>"127.0.0.1",
307
+ env_hash = sample_env_hash.merge({
362
308
  "action_dispatch.remote_ip"=> old_action_dispatch_ip
363
- }
309
+ })
364
310
 
365
- assert_equal old_action_dispatch_ip, @client.send(:ip_address_from, sample_env_hash)
366
- assert_equal "123.456.789.012", @client.send(:request_information, sample_env_hash)[:iPAddress]
311
+ assert_equal old_action_dispatch_ip, @client.send(:ip_address_from, env_hash)
312
+ assert_equal "123.456.789.012", @client.send(:request_information, env_hash)[:iPAddress]
367
313
  end
368
314
 
369
315
  def test_ip_address_from_raygun_specific_key
370
- sample_env_hash = {
371
- "HTTP_VERSION"=>"HTTP/1.1",
372
- "HTTP_HOST"=>"localhost:3000",
373
- "HTTP_CONNECTION"=>"keep-alive",
374
- "HTTP_CACHE_CONTROL"=>"max-age=0",
375
- "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
376
- "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
377
- "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
378
- "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
379
- "HTTP_COOKIE"=>"cookieval",
380
- "GATEWAY_INTERFACE"=>"CGI/1.2",
381
- "SERVER_PORT"=>"3000",
382
- "SERVER_PROTOCOL"=>"HTTP/1.1",
383
- "SCRIPT_NAME"=>"",
384
- "REMOTE_ADDR"=>"127.0.0.1",
316
+ env_hash = sample_env_hash.merge({
385
317
  "raygun.remote_ip"=>"123.456.789.012"
386
- }
318
+ })
387
319
 
388
- assert_equal "123.456.789.012", @client.send(:ip_address_from, sample_env_hash)
389
- assert_equal "123.456.789.012", @client.send(:request_information, sample_env_hash)[:iPAddress]
320
+ assert_equal "123.456.789.012", @client.send(:ip_address_from, env_hash)
321
+ assert_equal "123.456.789.012", @client.send(:request_information, env_hash)[:iPAddress]
390
322
  end
391
323
 
392
324
  def test_ip_address_returns_not_available_if_not_set
393
- sample_env_hash = {
394
- "HTTP_VERSION"=>"HTTP/1.1",
395
- "HTTP_HOST"=>"localhost:3000",
396
- "HTTP_CONNECTION"=>"keep-alive",
397
- "HTTP_CACHE_CONTROL"=>"max-age=0",
398
- "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
399
- "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
400
- "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
401
- "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
402
- "HTTP_COOKIE"=>"cookieval",
403
- "GATEWAY_INTERFACE"=>"CGI/1.2",
404
- "SERVER_PORT"=>"3000",
405
- "SERVER_PROTOCOL"=>"HTTP/1.1",
406
- "SCRIPT_NAME"=>""
407
- }
325
+ env_hash = sample_env_hash.dup
326
+ env_hash.delete("REMOTE_ADDR")
408
327
 
409
- assert_equal "(Not Available)", @client.send(:ip_address_from, sample_env_hash)
328
+ assert_equal "(Not Available)", @client.send(:ip_address_from, env_hash)
410
329
  end
411
330
 
412
331
  def test_setting_up_http_proxy
@@ -427,11 +346,7 @@ class ClientTest < Raygun::UnitTest
427
346
  Raygun.configuration.filter_payload_with_whitelist = true
428
347
  Raygun.configuration.whitelist_payload_shape = {}
429
348
 
430
- e = TestException.new("A test message")
431
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
432
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
433
-
434
- client_details = @client.send(:client_details)
349
+ e = test_exception
435
350
 
436
351
  assert_equal Time.now.utc.iso8601, @client.send(:build_payload_hash, e)[:occurredOn]
437
352
  assert_equal Hash, @client.send(:build_payload_hash, e)[:details].class
@@ -442,34 +357,17 @@ class ClientTest < Raygun::UnitTest
442
357
  Raygun.configuration.filter_payload_with_whitelist = true
443
358
  Raygun.configuration.whitelist_payload_shape = {}
444
359
 
445
- e = TestException.new("A test message")
446
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
447
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
448
-
449
360
  client_details = @client.send(:client_details)
450
361
 
451
- assert_equal client_details, @client.send(:build_payload_hash, e)[:details][:client]
362
+ assert_equal client_details, @client.send(:build_payload_hash, test_exception)[:details][:client]
452
363
  end
453
364
 
454
365
  def test_filter_payload_with_whitelist_default_error
455
366
  Raygun.configuration.filter_payload_with_whitelist = true
456
367
 
457
- e = TestException.new("A test message")
458
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
459
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
460
-
461
- details = @client.send(:build_payload_hash, e)[:details]
368
+ details = @client.send(:build_payload_hash, test_exception)[:details]
462
369
 
463
- expected_hash = {
464
- className: "ClientTest::TestException",
465
- message: e.message,
466
- stackTrace: [
467
- { lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" },
468
- { lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run" }
469
- ]
470
- }
471
-
472
- assert_equal expected_hash, details[:error]
370
+ assert_equal exception_hash, details[:error]
473
371
  end
474
372
 
475
373
  def test_filter_payload_with_whitelist_exclude_error_keys
@@ -482,22 +380,9 @@ class ClientTest < Raygun::UnitTest
482
380
  }
483
381
  }
484
382
 
485
- e = TestException.new("A test message")
486
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
487
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
488
-
489
- details = @client.send(:build_payload_hash, e)[:details]
490
-
491
- expected_hash = {
492
- className: "ClientTest::TestException",
493
- message: e.message,
494
- stackTrace: [
495
- { lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" },
496
- { lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run" }
497
- ]
498
- }
383
+ details = @client.send(:build_payload_hash, test_exception)[:details]
499
384
 
500
- assert_equal expected_hash, details[:error]
385
+ assert_equal exception_hash, details[:error]
501
386
  end
502
387
 
503
388
  def test_filter_payload_with_whitelist_exclude_error_except_stacktrace
@@ -509,17 +394,11 @@ class ClientTest < Raygun::UnitTest
509
394
  }
510
395
  }
511
396
 
512
- e = TestException.new("A test message")
513
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
514
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
515
-
516
- details = @client.send(:build_payload_hash, e)[:details]
397
+ details = @client.send(:build_payload_hash, test_exception)[:details]
517
398
 
518
- expected_hash = {
519
- className: "ClientTest::TestException",
520
- message: "A test message",
399
+ expected_hash = exception_hash.merge({
521
400
  stackTrace: "[FILTERED]"
522
- }
401
+ })
523
402
 
524
403
  assert_equal expected_hash, details[:error]
525
404
  end
@@ -530,36 +409,20 @@ class ClientTest < Raygun::UnitTest
530
409
  payload
531
410
  end
532
411
 
533
- e = TestException.new("A test message")
534
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
535
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
412
+ details = @client.send(:build_payload_hash, test_exception)[:details]
536
413
 
537
- details = @client.send(:build_payload_hash, e)[:details]
538
-
539
- expected_hash = {
540
- className: "ClientTest::TestException",
541
- message: "A test message",
542
- stackTrace: [
543
- { lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" },
544
- { lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run" }
545
- ]
546
- }
547
-
548
- assert_equal expected_hash, details[:error]
414
+ assert_equal exception_hash, details[:error]
549
415
  end
550
416
 
551
417
  def test_filter_payload_with_whitelist_default_request_post
552
418
  Raygun.configuration.filter_payload_with_whitelist = true
553
419
 
554
- e = TestException.new("A test message")
555
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
556
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
557
-
558
420
  post_body_env_hash = sample_env_hash.merge(
421
+ "REQUEST_METHOD" => "POST",
559
422
  "rack.input"=>StringIO.new("a=b&c=4945438&password=swordfish")
560
423
  )
561
424
 
562
- details = @client.send(:build_payload_hash, e, post_body_env_hash)[:details]
425
+ details = @client.send(:build_payload_hash, test_exception, post_body_env_hash)[:details]
563
426
 
564
427
  expected_hash = {
565
428
  hostName: "localhost",
@@ -567,7 +430,7 @@ class ClientTest < Raygun::UnitTest
567
430
  httpMethod: "POST",
568
431
  iPAddress: "127.0.0.1",
569
432
  queryString: { },
570
- headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Connection"=>"keep-alive", "Cache-Control"=>"max-age=0", "Accept"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "User-Agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36", "Accept-Encoding"=>"gzip,deflate,sdch", "Accept-Language"=>"en-US,en;q=0.8", "Cookie"=>"cookieval" },
433
+ headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Cookie"=>"cookieval" },
571
434
  form: { "a" => "[FILTERED]", "c" => "[FILTERED]", "password" => "[FILTERED]" },
572
435
  rawData: nil
573
436
  }
@@ -585,15 +448,12 @@ class ClientTest < Raygun::UnitTest
585
448
  )
586
449
  Raygun.configuration.whitelist_payload_shape = shape
587
450
 
588
- e = TestException.new("A test message")
589
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
590
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
591
-
592
451
  post_body_env_hash = sample_env_hash.merge(
452
+ "REQUEST_METHOD" => "POST",
593
453
  "rack.input"=>StringIO.new("username=foo&password=swordfish")
594
454
  )
595
455
 
596
- details = @client.send(:build_payload_hash, e, post_body_env_hash)[:details]
456
+ details = @client.send(:build_payload_hash, test_exception, post_body_env_hash)[:details]
597
457
 
598
458
  expected_hash = {
599
459
  hostName: "localhost",
@@ -601,7 +461,7 @@ class ClientTest < Raygun::UnitTest
601
461
  httpMethod: "POST",
602
462
  iPAddress: "127.0.0.1",
603
463
  queryString: { },
604
- headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Connection"=>"keep-alive", "Cache-Control"=>"max-age=0", "Accept"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "User-Agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36", "Accept-Encoding"=>"gzip,deflate,sdch", "Accept-Language"=>"en-US,en;q=0.8", "Cookie"=>"cookieval" },
464
+ headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Cookie"=>"cookieval" },
605
465
  form: { "username" => "foo", "password" => "[FILTERED]" },
606
466
  rawData: nil
607
467
  }
@@ -612,45 +472,22 @@ class ClientTest < Raygun::UnitTest
612
472
  def test_filter_payload_with_whitelist_default_request_get
613
473
  Raygun.configuration.filter_payload_with_whitelist = true
614
474
 
615
- e = TestException.new("A test message")
616
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
617
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
618
-
619
- sample_env_hash = {
620
- "SERVER_NAME"=>"localhost",
621
- "REQUEST_METHOD"=>"GET",
622
- "REQUEST_PATH"=>"/",
623
- "PATH_INFO"=>"/",
475
+ env_hash = sample_env_hash.merge({
624
476
  "QUERY_STRING"=>"a=b&c=4945438",
625
477
  "REQUEST_URI"=>"/?a=b&c=4945438",
626
- "HTTP_VERSION"=>"HTTP/1.1",
627
- "HTTP_HOST"=>"localhost:3000",
628
- "HTTP_CONNECTION"=>"keep-alive",
629
- "HTTP_CACHE_CONTROL"=>"max-age=0",
630
- "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
631
- "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
632
- "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
633
- "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
634
- "HTTP_COOKIE"=>"cookieval",
635
- "GATEWAY_INTERFACE"=>"CGI/1.2",
636
- "SERVER_PORT"=>"3000",
637
- "SERVER_PROTOCOL"=>"HTTP/1.1",
638
- "SCRIPT_NAME"=>"",
639
- "REMOTE_ADDR"=>"127.0.0.1"
640
- }
641
-
478
+ })
642
479
  expected_hash = {
643
480
  hostName: "localhost",
644
481
  url: "/",
645
482
  httpMethod: "GET",
646
483
  iPAddress: "127.0.0.1",
647
484
  queryString: { "a" => "b", "c" => "4945438" },
648
- headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Connection"=>"keep-alive", "Cache-Control"=>"max-age=0", "Accept"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "User-Agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36", "Accept-Encoding"=>"gzip,deflate,sdch", "Accept-Language"=>"en-US,en;q=0.8", "Cookie"=>"cookieval" },
485
+ headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Cookie"=>"cookieval" },
649
486
  form: {},
650
487
  rawData: {}
651
488
  }
652
489
 
653
- details = @client.send(:build_payload_hash, e, sample_env_hash)[:details]
490
+ details = @client.send(:build_payload_hash, test_exception, env_hash)[:details]
654
491
 
655
492
  assert_equal expected_hash, details[:request]
656
493
  end
@@ -663,90 +500,41 @@ class ClientTest < Raygun::UnitTest
663
500
  end
664
501
  Raygun.configuration.whitelist_payload_shape = shape
665
502
 
666
- e = TestException.new("A test message")
667
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
668
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
669
-
670
- sample_env_hash = {
671
- "SERVER_NAME"=>"localhost",
672
- "REQUEST_METHOD"=>"GET",
673
- "REQUEST_PATH"=>"/",
674
- "PATH_INFO"=>"/",
675
- "QUERY_STRING"=>"a=b&c=4945438",
676
- "REQUEST_URI"=>"/?a=b&c=4945438",
677
- "HTTP_VERSION"=>"HTTP/1.1",
678
- "HTTP_HOST"=>"localhost:3000",
679
- "HTTP_CONNECTION"=>"keep-alive",
680
- "HTTP_CACHE_CONTROL"=>"max-age=0",
681
- "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
682
- "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
683
- "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
684
- "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
685
- "HTTP_COOKIE"=>"cookieval",
686
- "GATEWAY_INTERFACE"=>"CGI/1.2",
687
- "SERVER_PORT"=>"3000",
688
- "SERVER_PROTOCOL"=>"HTTP/1.1",
689
- "SCRIPT_NAME"=>"",
690
- "REMOTE_ADDR"=>"127.0.0.1"
691
- }
692
-
693
503
  expected_hash = {
694
504
  hostName: "localhost",
695
505
  url: "/",
696
506
  httpMethod: "GET",
697
507
  iPAddress: "127.0.0.1",
698
508
  queryString: "[FILTERED]",
699
- headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Connection"=>"keep-alive", "Cache-Control"=>"max-age=0", "Accept"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "User-Agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36", "Accept-Encoding"=>"gzip,deflate,sdch", "Accept-Language"=>"en-US,en;q=0.8", "Cookie"=>"cookieval" },
509
+ headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Cookie"=>"cookieval" },
700
510
  form: {},
701
511
  rawData: {}
702
512
  }
703
513
 
704
- details = @client.send(:build_payload_hash, e, sample_env_hash)[:details]
514
+ details = @client.send(:build_payload_hash, test_exception, sample_env_hash)[:details]
705
515
 
706
516
  assert_equal expected_hash, details[:request]
707
517
  end
708
518
 
709
519
  def test_filter_payload_with_whitelist_being_false_does_not_filter_query_string
710
520
  Raygun.configuration.filter_payload_with_whitelist = false
711
- e = TestException.new("A test message")
712
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
713
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
714
521
 
715
- sample_env_hash = {
716
- "SERVER_NAME"=>"localhost",
717
- "REQUEST_METHOD"=>"GET",
718
- "REQUEST_PATH"=>"/",
719
- "PATH_INFO"=>"/",
522
+ env_hash = sample_env_hash.merge({
720
523
  "QUERY_STRING"=>"a=b&c=4945438",
721
524
  "REQUEST_URI"=>"/?a=b&c=4945438",
722
- "HTTP_VERSION"=>"HTTP/1.1",
723
- "HTTP_HOST"=>"localhost:3000",
724
- "HTTP_CONNECTION"=>"keep-alive",
725
- "HTTP_CACHE_CONTROL"=>"max-age=0",
726
- "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
727
- "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
728
- "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
729
- "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
730
- "HTTP_COOKIE"=>"cookieval",
731
- "GATEWAY_INTERFACE"=>"CGI/1.2",
732
- "SERVER_PORT"=>"3000",
733
- "SERVER_PROTOCOL"=>"HTTP/1.1",
734
- "SCRIPT_NAME"=>"",
735
- "REMOTE_ADDR"=>"127.0.0.1"
736
- }
737
-
525
+ })
738
526
  expected_hash = {
739
527
  hostName: "localhost",
740
528
  url: "/",
741
529
  httpMethod: "GET",
742
530
  iPAddress: "127.0.0.1",
743
531
  queryString: { "a" => "b", "c" => "4945438" },
744
- headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Connection"=>"keep-alive", "Cache-Control"=>"max-age=0", "Accept"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8", "User-Agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36", "Accept-Encoding"=>"gzip,deflate,sdch", "Accept-Language"=>"en-US,en;q=0.8", "Cookie"=>"cookieval" },
532
+ headers: { "Version"=>"HTTP/1.1", "Host"=>"localhost:3000", "Cookie"=>"cookieval" },
745
533
  form: {},
746
534
  rawData: {}
747
535
  }
748
536
 
749
- details = @client.send(:build_payload_hash, e, sample_env_hash)[:details]
537
+ details = @client.send(:build_payload_hash, test_exception, env_hash)[:details]
750
538
 
751
539
  assert_equal expected_hash, details[:request]
752
540
  end
@@ -761,16 +549,12 @@ class ClientTest < Raygun::UnitTest
761
549
  }
762
550
  }
763
551
 
764
- e = TestException.new("A test message")
765
- e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
766
- "/another/path/foo.rb:1234:in `block (3 levels) run'"])
767
-
768
- details = @client.send(:build_payload_hash, e, sample_env_hash)[:details]
552
+ details = @client.send(:build_payload_hash, test_exception, sample_env_hash)[:details]
769
553
 
770
554
  expected_hash = {
771
555
  hostName: "localhost",
772
556
  url: "/",
773
- httpMethod: "POST",
557
+ httpMethod: "GET",
774
558
  iPAddress: "[FILTERED]",
775
559
  queryString: "[FILTERED]",
776
560
  headers: "[FILTERED]",
@@ -781,25 +565,51 @@ class ClientTest < Raygun::UnitTest
781
565
  assert_equal expected_hash, details[:request]
782
566
  end
783
567
 
568
+ def test_build_payload_hash_adds_affected_user_details_when_supplied_with_user
569
+ user = OpenStruct.new(id: '123', email: 'test@email.com', first_name: 'Taylor')
570
+ expected_details = {
571
+ :IsAnonymous => false,
572
+ :Identifier => '123',
573
+ :Email => 'test@email.com',
574
+ :FirstName => 'Taylor',
575
+ }
576
+
577
+ user_details = @client.send(:build_payload_hash, test_exception, sample_env_hash, user)[:details][:user]
578
+
579
+ assert_equal expected_details, user_details
580
+ end
784
581
 
785
582
  private
786
583
 
584
+ def test_exception
585
+ e = TestException.new
586
+ e.set_backtrace(["/some/folder/some_file.rb:123:in `some_method_name'",
587
+ "/another/path/foo.rb:1234:in `block (3 levels) run'"])
588
+
589
+ e
590
+ end
591
+
592
+ def exception_hash
593
+ {
594
+ className: "ClientTest::TestException",
595
+ message: "A test message",
596
+ stackTrace: [
597
+ { lineNumber: "123", fileName: "/some/folder/some_file.rb", methodName: "some_method_name" },
598
+ { lineNumber: "1234", fileName: "/another/path/foo.rb", methodName: "block (3 levels) run"}
599
+ ]
600
+ }
601
+ end
602
+
787
603
  def sample_env_hash
788
604
  {
789
605
  "SERVER_NAME"=>"localhost",
790
- "REQUEST_METHOD"=>"POST",
606
+ "REQUEST_METHOD"=>"GET",
791
607
  "REQUEST_PATH"=>"/",
792
608
  "PATH_INFO"=>"/",
793
609
  "QUERY_STRING"=>"",
794
610
  "REQUEST_URI"=>"/",
795
611
  "HTTP_VERSION"=>"HTTP/1.1",
796
612
  "HTTP_HOST"=>"localhost:3000",
797
- "HTTP_CONNECTION"=>"keep-alive",
798
- "HTTP_CACHE_CONTROL"=>"max-age=0",
799
- "HTTP_ACCEPT"=>"text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
800
- "HTTP_USER_AGENT"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.22 Safari/537.36",
801
- "HTTP_ACCEPT_ENCODING"=>"gzip,deflate,sdch",
802
- "HTTP_ACCEPT_LANGUAGE"=>"en-US,en;q=0.8",
803
613
  "HTTP_COOKIE"=>"cookieval",
804
614
  "GATEWAY_INTERFACE"=>"CGI/1.2",
805
615
  "SERVER_PORT"=>"3000",