postageapp 0.0.0 → 1.0.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.
- data/.gitignore +3 -0
- data/LICENSE +1 -1
- data/README.md +176 -0
- data/Rakefile +14 -12
- data/VERSION +1 -1
- data/generators/postageapp/postageapp_generator.rb +34 -0
- data/generators/postageapp/templates/initializer.rb +3 -0
- data/generators/postageapp/templates/postageapp_tasks.rake +78 -0
- data/lib/generators/postageapp/postageapp_generator.rb +27 -0
- data/lib/postageapp.rb +56 -0
- data/lib/postageapp/configuration.rb +91 -0
- data/lib/postageapp/failed_request.rb +64 -0
- data/lib/postageapp/logger.rb +16 -0
- data/lib/postageapp/mailer.rb +48 -0
- data/lib/postageapp/mailer/mailer_2.rb +92 -0
- data/lib/postageapp/mailer/mailer_3.rb +192 -0
- data/lib/postageapp/rails.rb +14 -0
- data/lib/postageapp/request.rb +87 -0
- data/lib/postageapp/response.rb +39 -0
- data/lib/postageapp/utils.rb +30 -0
- data/lib/postageapp/version.rb +7 -0
- data/postageapp.gemspec +61 -7
- data/test/configuration_test.rb +66 -0
- data/test/failed_request_test.rb +79 -0
- data/test/helper.rb +66 -0
- data/test/mailer/action_mailer_2/notifier.rb +64 -0
- data/test/mailer/action_mailer_2/notifier/with_body_and_attachment.erb +1 -0
- data/test/mailer/action_mailer_2/notifier/with_html_and_text_views.text.html.erb +1 -0
- data/test/mailer/action_mailer_2/notifier/with_html_and_text_views.text.plain.erb +1 -0
- data/test/mailer/action_mailer_2/notifier/with_simple_view.erb +1 -0
- data/test/mailer/action_mailer_2/notifier/with_text_only_view.text.plain.erb +1 -0
- data/test/mailer/action_mailer_3/notifier.rb +98 -0
- data/test/mailer/action_mailer_3/notifier/with_html_and_text_views.html.erb +1 -0
- data/test/mailer/action_mailer_3/notifier/with_html_and_text_views.text.erb +1 -0
- data/test/mailer/action_mailer_3/notifier/with_old_api.html.erb +1 -0
- data/test/mailer/action_mailer_3/notifier/with_old_api.text.erb +1 -0
- data/test/mailer/action_mailer_3/notifier/with_simple_view.erb +1 -0
- data/test/mailer/action_mailer_3/notifier/with_text_only_view.text.erb +1 -0
- data/test/mailer_2_test.rb +87 -0
- data/test/mailer_3_test.rb +104 -0
- data/test/mailer_helper_methods_test.rb +24 -0
- data/test/postageapp_test.rb +18 -0
- data/test/rails_initialization_test.rb +29 -0
- data/test/request_integration_test.rb +78 -0
- data/test/request_test.rb +81 -0
- data/test/response_test.rb +40 -0
- metadata +84 -9
- data/README.rdoc +0 -17
- data/test/test_postageapp.rb +0 -7
@@ -0,0 +1,64 @@
|
|
1
|
+
# Test mailer for ActionMailer 2
|
2
|
+
class Notifier < PostageApp::Mailer
|
3
|
+
|
4
|
+
self.template_root = File.expand_path('../', __FILE__)
|
5
|
+
|
6
|
+
def blank
|
7
|
+
# ... nothing to see here
|
8
|
+
end
|
9
|
+
|
10
|
+
def with_no_content
|
11
|
+
setup_headers
|
12
|
+
end
|
13
|
+
|
14
|
+
def with_text_only_view
|
15
|
+
setup_headers
|
16
|
+
end
|
17
|
+
|
18
|
+
def with_html_and_text_views
|
19
|
+
setup_headers
|
20
|
+
end
|
21
|
+
|
22
|
+
def with_simple_view
|
23
|
+
setup_headers
|
24
|
+
end
|
25
|
+
|
26
|
+
def with_manual_parts
|
27
|
+
setup_headers
|
28
|
+
part :content_type => 'text/html',
|
29
|
+
:body => 'html content'
|
30
|
+
part :content_type => 'text/plain',
|
31
|
+
:body => 'text content'
|
32
|
+
attachment :content_type => 'image/jpeg',
|
33
|
+
:filename => 'foo.jpg',
|
34
|
+
:body => '123456789'
|
35
|
+
end
|
36
|
+
|
37
|
+
def with_body_and_attachment
|
38
|
+
setup_headers
|
39
|
+
attachment :content_type => 'image/jpeg',
|
40
|
+
:filename => 'foo.jpg',
|
41
|
+
:body => '123456789'
|
42
|
+
end
|
43
|
+
|
44
|
+
def with_custom_postage_variables
|
45
|
+
from 'test@test.test'
|
46
|
+
subject 'Test Email'
|
47
|
+
|
48
|
+
recipients ({
|
49
|
+
'test1@test.text' => { 'name' => 'Test 1' },
|
50
|
+
'test2@test.text' => { 'name' => 'Test 2' }
|
51
|
+
})
|
52
|
+
postage_template 'test_template'
|
53
|
+
postage_variables 'variable' => 'value'
|
54
|
+
end
|
55
|
+
|
56
|
+
private
|
57
|
+
|
58
|
+
def setup_headers
|
59
|
+
recipients 'test@test.test'
|
60
|
+
from 'text@test.test'
|
61
|
+
subject 'Test Email'
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
body text
|
@@ -0,0 +1 @@
|
|
1
|
+
html and text: html
|
@@ -0,0 +1 @@
|
|
1
|
+
html and text: plain text
|
@@ -0,0 +1 @@
|
|
1
|
+
simple view content
|
@@ -0,0 +1 @@
|
|
1
|
+
text only: plain text
|
@@ -0,0 +1,98 @@
|
|
1
|
+
# Test mailer for ActionMailer 3
|
2
|
+
class Notifier < PostageApp::Mailer
|
3
|
+
|
4
|
+
self.append_view_path(File.expand_path('../', __FILE__))
|
5
|
+
|
6
|
+
def blank
|
7
|
+
# ... nothing to see here
|
8
|
+
end
|
9
|
+
|
10
|
+
def with_no_content
|
11
|
+
mail(headers_hash)
|
12
|
+
end
|
13
|
+
|
14
|
+
def with_text_only_view
|
15
|
+
mail(headers_hash)
|
16
|
+
end
|
17
|
+
|
18
|
+
def with_html_and_text_views
|
19
|
+
mail(headers_hash) do |format|
|
20
|
+
format.text
|
21
|
+
format.html
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def with_simple_view
|
26
|
+
mail(headers_hash)
|
27
|
+
end
|
28
|
+
|
29
|
+
def with_body_and_attachment_as_file
|
30
|
+
attachments['sample_file.txt'] = 'File content'
|
31
|
+
mail(headers_hash) do |format|
|
32
|
+
format.html { render :text => 'manual body text'}
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def with_body_and_attachment_as_hash
|
37
|
+
attachments['sample_file.txt'] = {
|
38
|
+
:content_type => 'text/rich',
|
39
|
+
:body => 'File content'
|
40
|
+
}
|
41
|
+
mail(headers_hash) do |format|
|
42
|
+
format.html { render :text => 'manual body text'}
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def with_custom_postage_variables
|
47
|
+
postage_template 'test_template'
|
48
|
+
postage_variables 'variable' => 'value'
|
49
|
+
|
50
|
+
mail(
|
51
|
+
:from => 'test@test.test',
|
52
|
+
:subject => 'Test Message',
|
53
|
+
:to => {
|
54
|
+
'test1@test.test' => { 'name' => 'Test 1' },
|
55
|
+
'test2@test.test' => { 'name' => 'Test 2' }
|
56
|
+
}
|
57
|
+
)
|
58
|
+
end
|
59
|
+
|
60
|
+
def with_old_api
|
61
|
+
from 'test@test.test'
|
62
|
+
subject 'Test Email'
|
63
|
+
recipients 'test@test.test'
|
64
|
+
end
|
65
|
+
|
66
|
+
def with_old_api_and_manual_parts
|
67
|
+
from 'test@test.test'
|
68
|
+
subject 'Test Email'
|
69
|
+
|
70
|
+
headers ({'custom_header' => 'value'})
|
71
|
+
|
72
|
+
recipients ({
|
73
|
+
'test1@test.test' => { 'name' => 'Test 1' },
|
74
|
+
'test2@test.test' => { 'name' => 'Test 2' }
|
75
|
+
})
|
76
|
+
|
77
|
+
part :content_type => 'text/html',
|
78
|
+
:body => 'html content'
|
79
|
+
part :content_type => 'text/plain',
|
80
|
+
:body => 'text content'
|
81
|
+
attachment :content_type => 'image/jpeg',
|
82
|
+
:filename => 'foo.jpg',
|
83
|
+
:body => '123456789'
|
84
|
+
|
85
|
+
postage_template 'test_template'
|
86
|
+
postage_variables 'variable' => 'value'
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
def headers_hash(options = {})
|
92
|
+
{ :from => 'sender@test.test',
|
93
|
+
:subject => 'Test Message',
|
94
|
+
:to => 'test@test.test'
|
95
|
+
}.merge(options)
|
96
|
+
end
|
97
|
+
|
98
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
html content
|
@@ -0,0 +1 @@
|
|
1
|
+
text content
|
@@ -0,0 +1 @@
|
|
1
|
+
html content
|
@@ -0,0 +1 @@
|
|
1
|
+
text content
|
@@ -0,0 +1 @@
|
|
1
|
+
simple view content
|
@@ -0,0 +1 @@
|
|
1
|
+
text content
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
# tests for ActionMailer bundled with Rails 2
|
4
|
+
class Mailer3Test < Test::Unit::TestCase
|
5
|
+
|
6
|
+
if ActionMailer::VERSION::MAJOR < 3
|
7
|
+
|
8
|
+
require File.expand_path('../mailer/action_mailer_2/notifier', __FILE__)
|
9
|
+
puts "\e[0m\e[32mRunning #{File.basename(__FILE__)} for action_mailer #{ActionMailer::VERSION::STRING}\e[0m"
|
10
|
+
|
11
|
+
def test_create_blank
|
12
|
+
assert mail = Notifier.create_blank
|
13
|
+
assert_equal :send_message, mail.method
|
14
|
+
assert_equal 'https://api.postageapp.com/v.1.0/send_message.json', mail.url.to_s
|
15
|
+
assert mail.arguments.blank?
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_create_with_no_content
|
19
|
+
assert mail = Notifier.create_with_no_content
|
20
|
+
assert_equal 'test@test.test', mail.arguments['recipients']
|
21
|
+
assert_equal ({ 'from' => 'text@test.test', 'subject' => 'Test Email' }), mail.arguments['headers']
|
22
|
+
assert mail.arguments['content'].blank?
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_create_with_text_only_view
|
26
|
+
assert mail = Notifier.create_with_text_only_view
|
27
|
+
assert_equal 'text only: plain text', mail.arguments['content']['text/plain']
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_create_with_html_and_text_views
|
31
|
+
assert mail = Notifier.create_with_html_and_text_views
|
32
|
+
assert_equal 'html and text: plain text', mail.arguments['content']['text/plain']
|
33
|
+
assert_equal 'html and text: html', mail.arguments['content']['text/html']
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_deliver_with_html_and_text_views
|
37
|
+
mock_successful_send
|
38
|
+
|
39
|
+
assert response = Notifier.deliver_with_html_and_text_views
|
40
|
+
assert response.is_a?(PostageApp::Response)
|
41
|
+
assert response.ok?
|
42
|
+
end
|
43
|
+
|
44
|
+
def test_create_with_simple_view
|
45
|
+
assert mail = Notifier.create_with_simple_view
|
46
|
+
assert_equal 'simple view content', mail.arguments['content']['text/plain']
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_create_with_manual_parts
|
50
|
+
assert mail = Notifier.create_with_manual_parts
|
51
|
+
assert_equal 'text content', mail.arguments['content']['text/plain']
|
52
|
+
assert_equal 'html content', mail.arguments['content']['text/html']
|
53
|
+
assert !mail.arguments['attachments'].blank?
|
54
|
+
assert !mail.arguments['attachments']['foo.jpg']['content'].blank?
|
55
|
+
assert_equal 'image/jpeg', mail.arguments['attachments']['foo.jpg']['content_type']
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_create_with_body_and_attachment
|
59
|
+
assert mail = Notifier.create_with_body_and_attachment
|
60
|
+
assert !mail.arguments['content'].blank?
|
61
|
+
assert !mail.arguments['content']['text/plain'].blank?
|
62
|
+
assert_equal 'body text', mail.arguments['content']['text/plain']
|
63
|
+
assert !mail.arguments['attachments'].blank?
|
64
|
+
assert !mail.arguments['attachments']['foo.jpg']['content'].blank?
|
65
|
+
assert_equal 'image/jpeg', mail.arguments['attachments']['foo.jpg']['content_type']
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_create_with_custom_postage_variables
|
69
|
+
assert mail = Notifier.create_with_custom_postage_variables
|
70
|
+
assert_equal 'test_template', mail.arguments['template']
|
71
|
+
assert_equal ({ 'variable' => 'value' }), mail.arguments['variables']
|
72
|
+
assert_equal ({ 'test2@test.text' => { 'name' => 'Test 2'},
|
73
|
+
'test1@test.text' => { 'name' => 'Test 1'}}), mail.arguments['recipients']
|
74
|
+
end
|
75
|
+
|
76
|
+
def test_create_with_recipient_override
|
77
|
+
PostageApp.configuration.recipient_override = 'oleg@test.test'
|
78
|
+
assert mail = Notifier.create_with_html_and_text_views
|
79
|
+
assert_equal 'test@test.test', mail.arguments['recipients']
|
80
|
+
assert_equal 'oleg@test.test', mail.arguments_to_send['arguments']['recipient_override']
|
81
|
+
end
|
82
|
+
|
83
|
+
else
|
84
|
+
puts "\e[0m\e[31mSkipping #{File.basename(__FILE__)}\e[0m"
|
85
|
+
def test_nothing ; end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
# tests for ActionMailer bundled with Rails 3
|
4
|
+
class Mailer3Test < Test::Unit::TestCase
|
5
|
+
|
6
|
+
if ActionMailer::VERSION::MAJOR >= 3
|
7
|
+
|
8
|
+
require File.expand_path('../mailer/action_mailer_3/notifier', __FILE__)
|
9
|
+
puts "\e[0m\e[32mRunning #{File.basename(__FILE__)} for action_mailer #{ActionMailer::VERSION::STRING}\e[0m"
|
10
|
+
|
11
|
+
def test_create_blank
|
12
|
+
mail = Notifier.blank
|
13
|
+
assert mail.is_a?(PostageApp::Request)
|
14
|
+
end
|
15
|
+
|
16
|
+
def test_create_with_no_content
|
17
|
+
mail = Notifier.with_no_content
|
18
|
+
assert_equal ({}), mail.arguments['content']
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_create_with_simple_view
|
22
|
+
mail = Notifier.with_simple_view
|
23
|
+
assert_equal 'simple view content', mail.arguments['content']['text/html']
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_create_with_text_only_view
|
27
|
+
mail = Notifier.with_text_only_view
|
28
|
+
assert_equal 'text content', mail.arguments['content']['text/plain']
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_create_with_html_and_text_views
|
32
|
+
mail = Notifier.with_html_and_text_views
|
33
|
+
assert_equal 'text content', mail.arguments['content']['text/plain']
|
34
|
+
assert_equal 'html content', mail.arguments['content']['text/html']
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_deliver_with_html_and_text_views
|
38
|
+
mock_successful_send
|
39
|
+
|
40
|
+
assert response = Notifier.with_html_and_text_views.deliver
|
41
|
+
assert response.is_a?(PostageApp::Response)
|
42
|
+
assert response.ok?
|
43
|
+
end
|
44
|
+
|
45
|
+
def test_create_with_body_and_attachment_as_file
|
46
|
+
mail = Notifier.with_body_and_attachment_as_file
|
47
|
+
assert_equal 'manual body text', mail.arguments['content']['text/html']
|
48
|
+
assert_equal 'text/plain', mail.arguments['attachments']['sample_file.txt']['content_type']
|
49
|
+
assert_equal "RmlsZSBjb250ZW50\n", mail.arguments['attachments']['sample_file.txt']['content']
|
50
|
+
end
|
51
|
+
|
52
|
+
def test_create_with_body_and_attachment_as_hash
|
53
|
+
mail = Notifier.with_body_and_attachment_as_hash
|
54
|
+
assert_equal 'manual body text', mail.arguments['content']['text/html']
|
55
|
+
assert_equal 'text/rich', mail.arguments['attachments']['sample_file.txt']['content_type']
|
56
|
+
assert_equal "RmlsZSBjb250ZW50\n", mail.arguments['attachments']['sample_file.txt']['content']
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_create_with_custom_postage_variables
|
60
|
+
mail = Notifier.with_custom_postage_variables
|
61
|
+
assert_equal ({
|
62
|
+
'test1@test.test' => { 'name' => 'Test 1'},
|
63
|
+
'test2@test.test' => { 'name' => 'Test 2'}
|
64
|
+
}), mail.arguments['recipients']
|
65
|
+
assert_equal 'test_template', mail.arguments['template']
|
66
|
+
assert_equal ({ 'variable' => 'value' }), mail.arguments['variables']
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_create_with_old_api
|
70
|
+
mail = Notifier.with_old_api
|
71
|
+
assert_equal 'test@test.test', mail.arguments['headers']['from']
|
72
|
+
assert_equal 'Test Email', mail.arguments['headers']['subject']
|
73
|
+
assert_equal 'test@test.test', mail.arguments['recipients']
|
74
|
+
assert_equal 'html content', mail.arguments['content']['text/html']
|
75
|
+
assert_equal 'text content', mail.arguments['content']['text/plain']
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_create_with_old_api_and_manual_parts
|
79
|
+
mail = Notifier.with_old_api_and_manual_parts
|
80
|
+
assert_equal ({
|
81
|
+
'test2@test.test' => { 'name' => 'Test 2'},
|
82
|
+
'test1@test.test' => { 'name' => 'Test 1'}
|
83
|
+
}), mail.arguments['recipients']
|
84
|
+
assert_equal 'test@test.test', mail.arguments['headers']['from']
|
85
|
+
assert_equal 'Test Email', mail.arguments['headers']['subject']
|
86
|
+
assert_equal 'value', mail.arguments['headers']['custom_header']
|
87
|
+
assert_equal 'html content', mail.arguments['content']['text/html']
|
88
|
+
assert_equal 'text content', mail.arguments['content']['text/plain']
|
89
|
+
assert_equal 'image/jpeg', mail.arguments['attachments']['foo.jpg']['content_type']
|
90
|
+
assert_equal "MTIzNDU2Nzg5\n", mail.arguments['attachments']['foo.jpg']['content']
|
91
|
+
end
|
92
|
+
|
93
|
+
def test_create_with_recipient_override
|
94
|
+
PostageApp.configuration.recipient_override = 'oleg@test.test'
|
95
|
+
assert mail = Notifier.with_html_and_text_views
|
96
|
+
assert_equal 'test@test.test', mail.arguments['recipients']
|
97
|
+
assert_equal 'oleg@test.test', mail.arguments_to_send['arguments']['recipient_override']
|
98
|
+
end
|
99
|
+
|
100
|
+
else
|
101
|
+
puts "\e[0m\e[31mSkipping #{File.basename(__FILE__)}\e[0m"
|
102
|
+
def test_nothing ; end
|
103
|
+
end
|
104
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class MailerHelperMethodsTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_mailer_helper_methods
|
6
|
+
request = PostageApp::Request.new(:send_message, {
|
7
|
+
:headers => { 'from' => 'sender@test.test',
|
8
|
+
'subject' => 'Test Message'},
|
9
|
+
:recipients => 'test@test.test',
|
10
|
+
:content => {
|
11
|
+
'text/plain' => 'text content',
|
12
|
+
'text/html' => 'html content'
|
13
|
+
}
|
14
|
+
})
|
15
|
+
assert_equal 'test@test.test', request.to
|
16
|
+
assert_equal 'sender@test.test', request.from
|
17
|
+
assert_equal 'Test Message', request.subject
|
18
|
+
assert_equal ({
|
19
|
+
'text/html' => 'html content',
|
20
|
+
'text/plain' => 'text content'
|
21
|
+
}), request.body
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class PostageAppTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_method_configure
|
6
|
+
PostageApp.configure do |config|
|
7
|
+
config.api_key = 'abcdefg12345'
|
8
|
+
config.host = 'test.test'
|
9
|
+
end
|
10
|
+
assert_equal 'abcdefg12345', PostageApp.configuration.api_key
|
11
|
+
assert_equal 'test.test', PostageApp.configuration.host
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_logger
|
15
|
+
assert PostageApp.logger.is_a?(Logger)
|
16
|
+
end
|
17
|
+
|
18
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
require 'postageapp/rails'
|
4
|
+
|
5
|
+
class RailsInitializationTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
include ConstantDefinitions
|
8
|
+
|
9
|
+
def test_initialization
|
10
|
+
rails = Module.new do
|
11
|
+
def self.version
|
12
|
+
'9.9.9'
|
13
|
+
end
|
14
|
+
def self.root
|
15
|
+
'RAILS ROOT'
|
16
|
+
end
|
17
|
+
def self.env
|
18
|
+
"RAILS ENV"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
define_constant('Rails', rails)
|
22
|
+
PostageApp::Rails.initialize
|
23
|
+
|
24
|
+
assert_equal 'Rails 9.9.9', PostageApp.configuration.framework
|
25
|
+
assert_equal 'RAILS ROOT', PostageApp.configuration.project_root
|
26
|
+
assert_equal 'RAILS ENV', PostageApp.configuration.environment
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|