exception_notification 2.6.1 → 3.0.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +12 -0
- data/CONTRIBUTING.md +33 -0
- data/Gemfile.lock +61 -33
- data/README.md +59 -12
- data/exception_notification.gemspec +5 -3
- data/lib/exception_notifier.rb +7 -0
- data/lib/exception_notifier/campfire_notifier.rb +30 -0
- data/lib/exception_notifier/notifier.rb +55 -26
- data/lib/exception_notifier/views/exception_notifier/_backtrace.html.erb +1 -0
- data/lib/exception_notifier/views/exception_notifier/_data.html.erb +1 -0
- data/lib/exception_notifier/views/exception_notifier/_environment.html.erb +8 -0
- data/lib/exception_notifier/views/exception_notifier/_request.html.erb +5 -0
- data/lib/exception_notifier/views/exception_notifier/_session.html.erb +2 -0
- data/lib/exception_notifier/views/exception_notifier/_title.html.erb +3 -0
- data/lib/exception_notifier/views/exception_notifier/background_exception_notification.html.erb +26 -0
- data/lib/exception_notifier/views/exception_notifier/background_exception_notification.text.erb +5 -3
- data/lib/exception_notifier/views/exception_notifier/exception_notification.html.erb +36 -0
- data/lib/exception_notifier/views/exception_notifier/exception_notification.text.erb +4 -3
- data/test/background_exception_notification_test.rb +21 -6
- data/test/campfire_test.rb +52 -0
- data/test/dummy/Gemfile +1 -1
- data/test/dummy/Gemfile.lock +93 -58
- data/test/dummy/app/controllers/posts_controller.rb +1 -0
- data/test/dummy/app/views/exception_notifier/_new_bkg_section.html.erb +1 -0
- data/test/dummy/app/views/exception_notifier/_new_section.html.erb +1 -0
- data/test/dummy/app/views/exception_notifier/_new_section.text.erb +1 -1
- data/test/dummy/test/functional/posts_controller_test.rb +62 -10
- data/test/exception_notification_test.rb +27 -2
- data/test/test_helper.rb +3 -0
- metadata +55 -7
@@ -0,0 +1 @@
|
|
1
|
+
<%= raw @backtrace.join("\n") %>
|
@@ -0,0 +1 @@
|
|
1
|
+
* data: <%= raw PP.pp(@data, "") %>
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<% filtered_env = @request.filtered_env -%>
|
2
|
+
<% max = filtered_env.keys.map(&:to_s).max { |a, b| a.length <=> b.length } -%>
|
3
|
+
<% filtered_env.keys.map(&:to_s).sort.each do |key| -%>
|
4
|
+
* <%= raw("%-*s: %s" % [max.length, key, inspect_object(filtered_env[key])]) %>
|
5
|
+
<% end -%>
|
6
|
+
|
7
|
+
* Process: <%= raw $$ %>
|
8
|
+
* Server : <%= raw `hostname`.chomp %>
|
data/lib/exception_notifier/views/exception_notifier/background_exception_notification.html.erb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
<!DOCTYPE HTML>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<title>Exception</title>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
<pre style="font-size: 12px">
|
9
|
+
<%= @exception.class.to_s =~ /^[aeiou]/i ? 'An' : 'A' %> <%= @exception.class %> occurred in background at <%= raw Time.current %> :
|
10
|
+
|
11
|
+
<%= @exception.message %>
|
12
|
+
<%= @backtrace.first %>
|
13
|
+
<%
|
14
|
+
sections = @sections.map do |section|
|
15
|
+
summary = render(section).strip
|
16
|
+
unless summary.blank?
|
17
|
+
title = render("title", :title => section).strip
|
18
|
+
"#{title}\n\n#{summary.gsub(/^/, " ")}\n\n"
|
19
|
+
end
|
20
|
+
end.join
|
21
|
+
sections = sections.force_encoding('UTF-8').encode('UTF-16', :invalid => :replace).encode('UTF-8') if sections.respond_to?(:force_encoding)
|
22
|
+
%>
|
23
|
+
<%= raw sections %>
|
24
|
+
</pre>
|
25
|
+
</body>
|
26
|
+
</html>
|
data/lib/exception_notifier/views/exception_notifier/background_exception_notification.text.erb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
A <%= @exception.class %> occurred in background at <%= raw Time.current %> :
|
1
|
+
<%= @exception.class.to_s =~ /^[aeiou]/i ? 'An' : 'A' %> <%= @exception.class %> occurred in background at <%= raw Time.current %> :
|
2
2
|
|
3
3
|
<%= @exception.message %>
|
4
4
|
<%= @backtrace.first %>
|
@@ -9,5 +9,7 @@ A <%= @exception.class %> occurred in background at <%= raw Time.current %> :
|
|
9
9
|
title = render("title", :title => section).strip
|
10
10
|
"#{title}\n\n#{summary.gsub(/^/, " ")}\n\n"
|
11
11
|
end
|
12
|
-
end
|
13
|
-
|
12
|
+
end.join
|
13
|
+
sections = sections.force_encoding('UTF-8').encode('UTF-16', :invalid => :replace).encode('UTF-8') if sections.respond_to?(:force_encoding)
|
14
|
+
%>
|
15
|
+
<%= raw sections %>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<!DOCTYPE HTML>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="UTF-8">
|
5
|
+
<title>Exception</title>
|
6
|
+
</head>
|
7
|
+
<body>
|
8
|
+
<pre style="font-size: 12px">
|
9
|
+
<%= @exception.class.to_s =~ /^[aeiou]/i ? 'An' : 'A' %> <%= @exception.class %> occurred in <%= @kontroller.controller_name %>#<%= @kontroller.action_name %>:
|
10
|
+
|
11
|
+
<%= raw @exception.message %>
|
12
|
+
<%= raw @backtrace.first %>
|
13
|
+
|
14
|
+
<%
|
15
|
+
sections = @sections.map do |section|
|
16
|
+
begin
|
17
|
+
summary = render(section).strip
|
18
|
+
unless summary.blank?
|
19
|
+
title = render("title", :title => section).strip
|
20
|
+
"#{title}\n\n#{summary.gsub(/^/, " ")}\n\n"
|
21
|
+
end
|
22
|
+
|
23
|
+
rescue Exception => e
|
24
|
+
title = render("title", :title => section).strip
|
25
|
+
summary = ["ERROR: Failed to generate exception summary:", [e.class.to_s, e.message].join(": "), e.backtrace && e.backtrace.join("\n")].compact.join("\n\n")
|
26
|
+
|
27
|
+
[title, summary.gsub(/^/, " "), nil].join("\n\n")
|
28
|
+
end
|
29
|
+
end.join
|
30
|
+
sections = sections.force_encoding('UTF-8').encode('UTF-16', :invalid => :replace).encode('UTF-8') if sections.respond_to?(:force_encoding)
|
31
|
+
%>
|
32
|
+
|
33
|
+
<%= raw sections %>
|
34
|
+
</pre>
|
35
|
+
</body>
|
36
|
+
</html>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
A <%= @exception.class %> occurred in <%= @kontroller.controller_name %>#<%= @kontroller.action_name %>:
|
1
|
+
<%= @exception.class.to_s =~ /^[aeiou]/i ? 'An' : 'A' %> <%= @exception.class %> occurred in <%= @kontroller.controller_name %>#<%= @kontroller.action_name %>:
|
2
2
|
|
3
3
|
<%= raw @exception.message %>
|
4
4
|
<%= raw @backtrace.first %>
|
@@ -18,7 +18,8 @@ A <%= @exception.class %> occurred in <%= @kontroller.controller_name %>#<%= @ko
|
|
18
18
|
|
19
19
|
[title, summary.gsub(/^/, " "), nil].join("\n\n")
|
20
20
|
end
|
21
|
-
end
|
21
|
+
end.join
|
22
|
+
sections = sections.force_encoding('UTF-8').encode('UTF-16', :invalid => :replace).encode('UTF-8') if sections.respond_to?(:force_encoding)
|
22
23
|
%>
|
23
24
|
|
24
|
-
<%= raw sections
|
25
|
+
<%= raw sections %>
|
@@ -12,6 +12,10 @@ class BackgroundExceptionNotificationTest < ActiveSupport::TestCase
|
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
+
test "mail should be plain text and UTF-8 enconded by default" do
|
16
|
+
assert @mail.content_type == "text/plain; charset=UTF-8"
|
17
|
+
end
|
18
|
+
|
15
19
|
test "should have raised an exception" do
|
16
20
|
assert_not_nil @exception
|
17
21
|
end
|
@@ -33,18 +37,29 @@ class BackgroundExceptionNotificationTest < ActiveSupport::TestCase
|
|
33
37
|
end
|
34
38
|
|
35
39
|
test "mail should say exception was raised in background at show timestamp" do
|
36
|
-
assert @mail.
|
40
|
+
assert @mail.encoded.include? "A ZeroDivisionError occurred in background at #{@time}"
|
41
|
+
end
|
42
|
+
|
43
|
+
test "mail should prefix exception class with 'an' instead of 'a' when it starts with a vowel" do
|
44
|
+
begin
|
45
|
+
raise ActiveRecord::RecordNotFound
|
46
|
+
rescue => e
|
47
|
+
@vowel_exception = e
|
48
|
+
@vowel_mail = ExceptionNotifier::Notifier.background_exception_notification(@vowel_exception)
|
49
|
+
end
|
50
|
+
|
51
|
+
assert @vowel_mail.encoded.include? "An ActiveRecord::RecordNotFound occurred in background at #{@time}"
|
37
52
|
end
|
38
53
|
|
39
54
|
test "mail should contain backtrace in body" do
|
40
|
-
assert @mail.
|
55
|
+
assert @mail.encoded.include?("test/background_exception_notification_test.rb:6"), "\n#{@mail.inspect}"
|
41
56
|
end
|
42
57
|
|
43
58
|
test "mail should contain data in body" do
|
44
|
-
assert @mail.
|
45
|
-
assert @mail.
|
46
|
-
assert @mail.
|
47
|
-
assert @mail.
|
59
|
+
assert @mail.encoded.include? '* data:'
|
60
|
+
assert @mail.encoded.include? ':payload=>"1/0"'
|
61
|
+
assert @mail.encoded.include? ':job=>"DivideWorkerJob"'
|
62
|
+
assert @mail.encoded.include? "My Custom Message"
|
48
63
|
end
|
49
64
|
|
50
65
|
test "mail should not contain any attachments" do
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CampfireNotifierTest < ActiveSupport::TestCase
|
4
|
+
|
5
|
+
test "should send campfire notification if properly configured" do
|
6
|
+
ExceptionNotifier::CampfireNotifier.stubs(:new).returns(Object.new)
|
7
|
+
campfire = ExceptionNotifier::CampfireNotifier.new({:subdomain => 'test', :token => 'test_token', :room_name => 'test_room'})
|
8
|
+
campfire.stubs(:exception_notification).returns(fake_notification)
|
9
|
+
notif = campfire.exception_notification(fake_exception)
|
10
|
+
|
11
|
+
assert !notif[:message].empty?
|
12
|
+
assert_equal notif[:message][:type], 'PasteMessage'
|
13
|
+
assert notif[:message][:body].include? "A new exception occurred:"
|
14
|
+
assert notif[:message][:body].include? "divided by 0"
|
15
|
+
assert notif[:message][:body].include? "/exception_notification/test/campfire_test.rb:45"
|
16
|
+
end
|
17
|
+
|
18
|
+
test "should not send campfire notification if badly configured" do
|
19
|
+
wrong_params = {:subdomain => 'test', :token => 'bad_token', :room_name => 'test_room'}
|
20
|
+
Tinder::Campfire.stubs(:new).with('test', {:token => 'bad_token'}).returns(nil)
|
21
|
+
campfire = ExceptionNotifier::CampfireNotifier.new(wrong_params)
|
22
|
+
|
23
|
+
assert_nil campfire.room
|
24
|
+
assert_nil campfire.exception_notification(fake_exception)
|
25
|
+
end
|
26
|
+
|
27
|
+
test "should not send campfire notification if config attr missing" do
|
28
|
+
wrong_params = {:subdomain => 'test', :room_name => 'test_room'}
|
29
|
+
Tinder::Campfire.stubs(:new).with('test', {}).returns(nil)
|
30
|
+
campfire = ExceptionNotifier::CampfireNotifier.new(wrong_params)
|
31
|
+
|
32
|
+
assert_nil campfire.room
|
33
|
+
assert_nil campfire.exception_notification(fake_exception)
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def fake_notification
|
39
|
+
{:message => {:type => 'PasteMessage',
|
40
|
+
:body => "A new exception occurred: 'divided by 0' on '/Users/sebastian/exception_notification/test/campfire_test.rb:45:in `/'"
|
41
|
+
}
|
42
|
+
}
|
43
|
+
end
|
44
|
+
|
45
|
+
def fake_exception
|
46
|
+
exception = begin
|
47
|
+
5/0
|
48
|
+
rescue Exception => e
|
49
|
+
e
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/test/dummy/Gemfile
CHANGED
data/test/dummy/Gemfile.lock
CHANGED
@@ -1,83 +1,118 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ../../..
|
3
3
|
specs:
|
4
|
-
exception_notification (2.
|
4
|
+
exception_notification (2.6.1)
|
5
5
|
actionmailer (>= 3.0.4)
|
6
|
+
tinder (~> 1.8)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: http://rubygems.org/
|
9
10
|
specs:
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
rack (~> 1.2
|
21
|
-
rack-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
arel (
|
38
|
-
builder (
|
39
|
-
erubis (2.
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
11
|
+
actionmailer (3.2.8)
|
12
|
+
actionpack (= 3.2.8)
|
13
|
+
mail (~> 2.4.4)
|
14
|
+
actionpack (3.2.8)
|
15
|
+
activemodel (= 3.2.8)
|
16
|
+
activesupport (= 3.2.8)
|
17
|
+
builder (~> 3.0.0)
|
18
|
+
erubis (~> 2.7.0)
|
19
|
+
journey (~> 1.0.4)
|
20
|
+
rack (~> 1.4.0)
|
21
|
+
rack-cache (~> 1.2)
|
22
|
+
rack-test (~> 0.6.1)
|
23
|
+
sprockets (~> 2.1.3)
|
24
|
+
activemodel (3.2.8)
|
25
|
+
activesupport (= 3.2.8)
|
26
|
+
builder (~> 3.0.0)
|
27
|
+
activerecord (3.2.8)
|
28
|
+
activemodel (= 3.2.8)
|
29
|
+
activesupport (= 3.2.8)
|
30
|
+
arel (~> 3.0.2)
|
31
|
+
tzinfo (~> 0.3.29)
|
32
|
+
activeresource (3.2.8)
|
33
|
+
activemodel (= 3.2.8)
|
34
|
+
activesupport (= 3.2.8)
|
35
|
+
activesupport (3.2.8)
|
36
|
+
i18n (~> 0.6)
|
37
|
+
multi_json (~> 1.0)
|
38
|
+
arel (3.0.2)
|
39
|
+
builder (3.0.2)
|
40
|
+
erubis (2.7.0)
|
41
|
+
eventmachine (1.0.0)
|
42
|
+
faraday (0.8.4)
|
43
|
+
multipart-post (~> 1.1)
|
44
|
+
faraday_middleware (0.8.8)
|
45
|
+
faraday (>= 0.7.4, < 0.9)
|
46
|
+
hashie (1.2.0)
|
47
|
+
hike (1.2.1)
|
48
|
+
http_parser.rb (0.5.3)
|
49
|
+
i18n (0.6.1)
|
50
|
+
journey (1.0.4)
|
51
|
+
json (1.7.5)
|
52
|
+
mail (2.4.4)
|
44
53
|
i18n (>= 0.4.0)
|
45
54
|
mime-types (~> 1.16)
|
46
55
|
treetop (~> 1.4.8)
|
47
|
-
mime-types (1.
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
rack-
|
56
|
+
mime-types (1.19)
|
57
|
+
multi_json (1.3.6)
|
58
|
+
multipart-post (1.1.5)
|
59
|
+
polyglot (0.3.3)
|
60
|
+
rack (1.4.1)
|
61
|
+
rack-cache (1.2)
|
62
|
+
rack (>= 0.4)
|
63
|
+
rack-ssl (1.3.2)
|
64
|
+
rack
|
65
|
+
rack-test (0.6.1)
|
53
66
|
rack (>= 1.0)
|
54
|
-
rails (3.
|
55
|
-
actionmailer (= 3.
|
56
|
-
actionpack (= 3.
|
57
|
-
activerecord (= 3.
|
58
|
-
activeresource (= 3.
|
59
|
-
activesupport (= 3.
|
67
|
+
rails (3.2.8)
|
68
|
+
actionmailer (= 3.2.8)
|
69
|
+
actionpack (= 3.2.8)
|
70
|
+
activerecord (= 3.2.8)
|
71
|
+
activeresource (= 3.2.8)
|
72
|
+
activesupport (= 3.2.8)
|
60
73
|
bundler (~> 1.0)
|
61
|
-
railties (= 3.
|
62
|
-
railties (3.
|
63
|
-
actionpack (= 3.
|
64
|
-
activesupport (= 3.
|
74
|
+
railties (= 3.2.8)
|
75
|
+
railties (3.2.8)
|
76
|
+
actionpack (= 3.2.8)
|
77
|
+
activesupport (= 3.2.8)
|
78
|
+
rack-ssl (~> 1.3.2)
|
65
79
|
rake (>= 0.8.7)
|
66
80
|
rdoc (~> 3.4)
|
67
|
-
thor (
|
68
|
-
rake (0.9.2)
|
69
|
-
rdoc (3.
|
70
|
-
|
71
|
-
|
81
|
+
thor (>= 0.14.6, < 2.0)
|
82
|
+
rake (0.9.2.2)
|
83
|
+
rdoc (3.12)
|
84
|
+
json (~> 1.4)
|
85
|
+
simple_oauth (0.1.9)
|
86
|
+
sprockets (2.1.3)
|
87
|
+
hike (~> 1.2)
|
88
|
+
rack (~> 1.0)
|
89
|
+
tilt (~> 1.1, != 1.3.0)
|
90
|
+
sqlite3 (1.3.6)
|
91
|
+
thor (0.16.0)
|
92
|
+
tilt (1.3.3)
|
93
|
+
tinder (1.9.1)
|
94
|
+
eventmachine (>= 0.12.0, < 2)
|
95
|
+
faraday (~> 0.8)
|
96
|
+
faraday_middleware (~> 0.8)
|
97
|
+
hashie (~> 1.0)
|
98
|
+
json (~> 1.6)
|
99
|
+
mime-types (~> 1.16)
|
100
|
+
multi_json (~> 1.0)
|
101
|
+
multipart-post (~> 1.1)
|
102
|
+
twitter-stream (~> 0.1)
|
72
103
|
treetop (1.4.10)
|
73
104
|
polyglot
|
74
105
|
polyglot (>= 0.3.1)
|
75
|
-
|
106
|
+
twitter-stream (0.1.16)
|
107
|
+
eventmachine (>= 0.12.8)
|
108
|
+
http_parser.rb (~> 0.5.1)
|
109
|
+
simple_oauth (~> 0.1.4)
|
110
|
+
tzinfo (0.3.33)
|
76
111
|
|
77
112
|
PLATFORMS
|
78
113
|
ruby
|
79
114
|
|
80
115
|
DEPENDENCIES
|
81
116
|
exception_notification!
|
82
|
-
rails (= 3.
|
117
|
+
rails (= 3.2.8)
|
83
118
|
sqlite3
|
@@ -0,0 +1 @@
|
|
1
|
+
* New background section for testing
|
@@ -0,0 +1 @@
|
|
1
|
+
* New html section for testing
|
@@ -1 +1 @@
|
|
1
|
-
* New section for testing
|
1
|
+
* New text section for testing
|
@@ -19,6 +19,10 @@ class PostsControllerTest < ActionController::TestCase
|
|
19
19
|
assert_not_nil @mail
|
20
20
|
end
|
21
21
|
|
22
|
+
test "mail should be plain text and UTF-8 enconded by default" do
|
23
|
+
assert @mail.content_type == "text/plain; charset=UTF-8"
|
24
|
+
end
|
25
|
+
|
22
26
|
test "mail should have a from address set" do
|
23
27
|
assert @mail.from == ["dummynotifier@example.com"]
|
24
28
|
end
|
@@ -27,28 +31,32 @@ class PostsControllerTest < ActionController::TestCase
|
|
27
31
|
assert @mail.to == ["dummyexceptions@example.com"]
|
28
32
|
end
|
29
33
|
|
30
|
-
test "mail should have
|
31
|
-
assert @mail.subject.include? "[Dummy ERROR]
|
34
|
+
test "mail subject should have the proper prefix" do
|
35
|
+
assert @mail.subject.include? "[Dummy ERROR]"
|
36
|
+
end
|
37
|
+
|
38
|
+
test "mail subject should include descriptive error message" do
|
39
|
+
assert @mail.subject.include? "(NoMethodError) \"undefined method `nw'"
|
32
40
|
end
|
33
41
|
|
34
42
|
test "mail should contain backtrace in body" do
|
35
|
-
assert @mail.
|
43
|
+
assert @mail.encoded.include? "`method_missing'\r\n app/controllers/posts_controller.rb:18:in `create'\r\n"
|
36
44
|
end
|
37
45
|
|
38
46
|
test "mail should contain timestamp of exception in body" do
|
39
|
-
assert @mail.
|
47
|
+
assert @mail.encoded.include? "Timestamp : #{Time.current}"
|
40
48
|
end
|
41
49
|
|
42
50
|
test "mail should contain the newly defined section" do
|
43
|
-
assert @mail.
|
51
|
+
assert @mail.encoded.include? "* New text section for testing"
|
44
52
|
end
|
45
53
|
|
46
54
|
test "mail should contain the custom message" do
|
47
|
-
assert @mail.
|
55
|
+
assert @mail.encoded.include? "My Custom Message"
|
48
56
|
end
|
49
57
|
|
50
58
|
test "should filter sensible data" do
|
51
|
-
assert @mail.
|
59
|
+
assert @mail.encoded.include? "secret\"=>\"[FILTERED]"
|
52
60
|
end
|
53
61
|
|
54
62
|
test "mail should not contain any attachments" do
|
@@ -79,7 +87,7 @@ class PostsControllerTest < ActionController::TestCase
|
|
79
87
|
end
|
80
88
|
|
81
89
|
assert request.ssl?
|
82
|
-
assert @secured_mail.
|
90
|
+
assert @secured_mail.encoded.include? "* session id: [FILTERED]\r\n *"
|
83
91
|
end
|
84
92
|
|
85
93
|
test "should ignore exception if from unwanted cralwer" do
|
@@ -119,6 +127,21 @@ class PostsControllerTest < ActionController::TestCase
|
|
119
127
|
|
120
128
|
assert_nil @ignored_mail
|
121
129
|
end
|
130
|
+
|
131
|
+
test "should send html email when selected html format" do
|
132
|
+
begin
|
133
|
+
@post = posts(:one)
|
134
|
+
post :create, :post => @post.attributes
|
135
|
+
rescue => e
|
136
|
+
@exception = e
|
137
|
+
custom_env = request.env
|
138
|
+
custom_env['exception_notifier.options'] ||= {}
|
139
|
+
custom_env['exception_notifier.options'].merge!({:email_format => :html})
|
140
|
+
@mail = ExceptionNotifier::Notifier.exception_notification(custom_env, @exception)
|
141
|
+
end
|
142
|
+
|
143
|
+
assert @mail.content_type.include? "multipart/alternative"
|
144
|
+
end
|
122
145
|
end
|
123
146
|
|
124
147
|
class PostsControllerTestWithoutVerboseSubject < ActionController::TestCase
|
@@ -139,6 +162,35 @@ class PostsControllerTestWithoutVerboseSubject < ActionController::TestCase
|
|
139
162
|
end
|
140
163
|
end
|
141
164
|
|
165
|
+
class PostsControllerTestWithSmtpSettings < ActionController::TestCase
|
166
|
+
tests PostsController
|
167
|
+
setup do
|
168
|
+
ExceptionNotifier::Notifier.default_smtp_settings = {
|
169
|
+
:user_name => "Dummy user_name",
|
170
|
+
:password => "Dummy password"
|
171
|
+
}
|
172
|
+
|
173
|
+
begin
|
174
|
+
@post = posts(:one)
|
175
|
+
post :create, :post => @post.attributes
|
176
|
+
rescue => e
|
177
|
+
@exception = e
|
178
|
+
@mail = ExceptionNotifier::Notifier.exception_notification(request.env, @exception)
|
179
|
+
end
|
180
|
+
end
|
181
|
+
|
182
|
+
test "should have overridden smtp settings" do
|
183
|
+
assert_equal "Dummy user_name", @mail.delivery_method.settings[:user_name]
|
184
|
+
assert_equal "Dummy password", @mail.delivery_method.settings[:password]
|
185
|
+
end
|
186
|
+
|
187
|
+
test "should have overridden smtp settings with background notification" do
|
188
|
+
@mail = ExceptionNotifier::Notifier.background_exception_notification(@exception)
|
189
|
+
assert_equal "Dummy user_name", @mail.delivery_method.settings[:user_name]
|
190
|
+
assert_equal "Dummy password", @mail.delivery_method.settings[:password]
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
142
194
|
class PostsControllerTestBadRequestData < ActionController::TestCase
|
143
195
|
tests PostsController
|
144
196
|
setup do
|
@@ -162,7 +214,7 @@ class PostsControllerTestBadRequestData < ActionController::TestCase
|
|
162
214
|
end
|
163
215
|
|
164
216
|
test "should include error message in body" do
|
165
|
-
assert_match /ERROR: Failed to generate exception summary/, @mail.
|
217
|
+
assert_match /ERROR: Failed to generate exception summary/, @mail.encoded.to_s
|
166
218
|
end
|
167
219
|
end
|
168
220
|
|
@@ -178,6 +230,6 @@ class PostsControllerTestBackgroundNotification < ActionController::TestCase
|
|
178
230
|
end
|
179
231
|
|
180
232
|
test "mail should contain the specified section" do
|
181
|
-
assert @mail.
|
233
|
+
assert @mail.encoded.include? "* New background section for testing"
|
182
234
|
end
|
183
235
|
end
|