postageapp 0.0.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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,14 @@
|
|
1
|
+
require 'postageapp'
|
2
|
+
|
3
|
+
module PostageApp::Rails
|
4
|
+
|
5
|
+
def self.initialize
|
6
|
+
PostageApp.configure do |config|
|
7
|
+
config.framework = "Rails #{::Rails.version}" if defined?(::Rails.version)
|
8
|
+
config.project_root = ::Rails.root if defined?(::Rails.root)
|
9
|
+
config.environment = ::Rails.env if defined?(::Rails.env)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
PostageApp::Rails.initialize
|
@@ -0,0 +1,87 @@
|
|
1
|
+
class PostageApp::Request
|
2
|
+
|
3
|
+
API_VERSION = '1.0'
|
4
|
+
|
5
|
+
HEADERS = {
|
6
|
+
'Content-type' => 'application/json',
|
7
|
+
'Accept' => 'text/json, application/json'
|
8
|
+
}
|
9
|
+
|
10
|
+
# Unique ID of the request
|
11
|
+
attr_accessor :uid
|
12
|
+
|
13
|
+
# The API method being called (example: send_message)
|
14
|
+
# This controls the url of the request (example: https://api.postageapp.com/v.1.0/send_message.json)
|
15
|
+
attr_accessor :method
|
16
|
+
|
17
|
+
# A list of arguments in a Hash format passed along with the request
|
18
|
+
attr_accessor :arguments
|
19
|
+
|
20
|
+
def initialize(method, arguments = {})
|
21
|
+
@method = method
|
22
|
+
@uid = arguments.delete(:uid)
|
23
|
+
@arguments = arguments
|
24
|
+
end
|
25
|
+
|
26
|
+
# Skipping resend doesn't trigger PostageApp::FailedRequest.resend_all
|
27
|
+
# it's needed so the request being resend doesn't create duplicate queue
|
28
|
+
def send(skip_failed_requests_processing = false)
|
29
|
+
http = Net::HTTP::Proxy(
|
30
|
+
PostageApp.configuration.proxy_host,
|
31
|
+
PostageApp.configuration.proxy_port,
|
32
|
+
PostageApp.configuration.proxy_user,
|
33
|
+
PostageApp.configuration.proxy_pass
|
34
|
+
).new(url.host, url.port)
|
35
|
+
|
36
|
+
http.read_timeout = PostageApp.configuration.http_read_timeout
|
37
|
+
http.open_timeout = PostageApp.configuration.http_open_timeout
|
38
|
+
http.use_ssl = PostageApp.configuration.secure?
|
39
|
+
|
40
|
+
PostageApp.logger.info(self)
|
41
|
+
|
42
|
+
http_response = begin
|
43
|
+
http.post(
|
44
|
+
url.path,
|
45
|
+
self.arguments_to_send.to_json,
|
46
|
+
HEADERS.merge('User-Agent' => "PostageApp-RubyGem #{PostageApp::VERSION} (Ruby #{RUBY_VERSION}, #{PostageApp.configuration.framework})")
|
47
|
+
)
|
48
|
+
rescue TimeoutError
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
|
52
|
+
response = PostageApp::Response.new(http_response)
|
53
|
+
|
54
|
+
PostageApp.logger.info(response)
|
55
|
+
|
56
|
+
unless skip_failed_requests_processing
|
57
|
+
response.fail?? PostageApp::FailedRequest.store(self) : PostageApp::FailedRequest.resend_all
|
58
|
+
end
|
59
|
+
|
60
|
+
response
|
61
|
+
end
|
62
|
+
|
63
|
+
# URL of the where PostageApp::Request will be directed at
|
64
|
+
def url
|
65
|
+
URI.parse("#{PostageApp.configuration.url}/v.#{API_VERSION}/#{self.method}.json")
|
66
|
+
end
|
67
|
+
|
68
|
+
# Unique ID of the request
|
69
|
+
def uid(reload = false)
|
70
|
+
@uid = nil if reload
|
71
|
+
@uid ||= Digest::SHA1.hexdigest("#{Time.now.to_f}#{self.arguments}")
|
72
|
+
end
|
73
|
+
|
74
|
+
# Arguments need to be appended with some some stuff before it's ready to be send out
|
75
|
+
def arguments_to_send
|
76
|
+
hash = { 'uid' => self.uid, 'api_key' => PostageApp.configuration.api_key }
|
77
|
+
|
78
|
+
if !self.arguments.nil? && !self.arguments.empty?
|
79
|
+
if !PostageApp.configuration.recipient_override.nil? && self.method.to_sym == :send_message
|
80
|
+
self.arguments.merge!('recipient_override' => PostageApp.configuration.recipient_override)
|
81
|
+
end
|
82
|
+
hash.merge!('arguments' => self.arguments.stringify_keys!)
|
83
|
+
end
|
84
|
+
hash
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class PostageApp::Response
|
2
|
+
|
3
|
+
# The UID should match the Request's UID. If Request didn't provide with one
|
4
|
+
# PostageApp service should generate it for the Response
|
5
|
+
attr_reader :uid
|
6
|
+
|
7
|
+
# The status of the response in string format (like: ok, bad_request)
|
8
|
+
# Will be set to +fail+ if Request times out
|
9
|
+
attr_reader :status
|
10
|
+
|
11
|
+
# The message of the response. Could be used as an error explanation.
|
12
|
+
attr_reader :message
|
13
|
+
|
14
|
+
# The data payload of the response. This is usually the return value of the
|
15
|
+
# request we're looking for
|
16
|
+
attr_reader :data
|
17
|
+
|
18
|
+
# Takes in Net::HTTPResponse object as the attribute.
|
19
|
+
# If something goes wrong Response will be thought of as failed
|
20
|
+
def initialize(http_response)
|
21
|
+
hash = JSON::parse(http_response.body)
|
22
|
+
@status = hash['response']['status']
|
23
|
+
@uid = hash['response']['uid']
|
24
|
+
@message = hash['response']['message']
|
25
|
+
@data = hash['data']
|
26
|
+
rescue
|
27
|
+
@status = 'fail'
|
28
|
+
end
|
29
|
+
|
30
|
+
# Little helper that checks for the Response status
|
31
|
+
# => @response.ok?
|
32
|
+
# >> true
|
33
|
+
# => @response.fail?
|
34
|
+
# >> false
|
35
|
+
def method_missing(method)
|
36
|
+
/.*?\?$/.match(method.to_s) ? "#{self.status}?" == method.to_s : super(method)
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
class Hash
|
2
|
+
|
3
|
+
# Example usage:
|
4
|
+
# @hash.dig(:k1) # same as @hash[:k1]
|
5
|
+
# @hash.dig(:k1, :k2) # same as @hash[:k1] && @hash[:k1][:k2]
|
6
|
+
# @hash.dig(:k1, :k2, k3) # same as @hash[:k1] && @hash[:k1][:k2] && @hash[:k1][:k2][:k3]
|
7
|
+
def dig(*path)
|
8
|
+
path.inject(self) do |location, key|
|
9
|
+
location.respond_to?(:keys) ? location[key] : nil
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
# Destructively convert all keys to strings.
|
14
|
+
def stringify_keys!
|
15
|
+
keys.each do |key|
|
16
|
+
self[key.to_s] = delete(key)
|
17
|
+
end
|
18
|
+
self
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class Net::HTTP
|
23
|
+
# Getting rid of the 'warning: peer certificate won't be verified in this SSL session'
|
24
|
+
alias_method :old_initialize, :initialize
|
25
|
+
def initialize(*args)
|
26
|
+
old_initialize(*args)
|
27
|
+
@ssl_context = OpenSSL::SSL::SSLContext.new
|
28
|
+
@ssl_context.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
29
|
+
end
|
30
|
+
end
|
data/postageapp.gemspec
CHANGED
@@ -5,28 +5,65 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{postageapp}
|
8
|
-
s.version = "
|
8
|
+
s.version = "1.0.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Oleg Khabarov, The Working Group Inc"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-07-23}
|
13
13
|
s.description = %q{Gem that interfaces with PostageApp.com service to send emails from web apps}
|
14
14
|
s.email = %q{oleg@twg.ca}
|
15
15
|
s.extra_rdoc_files = [
|
16
16
|
"LICENSE",
|
17
|
-
"README.
|
17
|
+
"README.md"
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
".document",
|
21
21
|
".gitignore",
|
22
22
|
"LICENSE",
|
23
|
-
"README.
|
23
|
+
"README.md",
|
24
24
|
"Rakefile",
|
25
25
|
"VERSION",
|
26
|
+
"generators/postageapp/postageapp_generator.rb",
|
27
|
+
"generators/postageapp/templates/initializer.rb",
|
28
|
+
"generators/postageapp/templates/postageapp_tasks.rake",
|
29
|
+
"lib/generators/postageapp/postageapp_generator.rb",
|
26
30
|
"lib/postageapp.rb",
|
31
|
+
"lib/postageapp/configuration.rb",
|
32
|
+
"lib/postageapp/failed_request.rb",
|
33
|
+
"lib/postageapp/logger.rb",
|
34
|
+
"lib/postageapp/mailer.rb",
|
35
|
+
"lib/postageapp/mailer/mailer_2.rb",
|
36
|
+
"lib/postageapp/mailer/mailer_3.rb",
|
37
|
+
"lib/postageapp/rails.rb",
|
38
|
+
"lib/postageapp/request.rb",
|
39
|
+
"lib/postageapp/response.rb",
|
40
|
+
"lib/postageapp/utils.rb",
|
41
|
+
"lib/postageapp/version.rb",
|
27
42
|
"postageapp.gemspec",
|
43
|
+
"test/configuration_test.rb",
|
44
|
+
"test/failed_request_test.rb",
|
28
45
|
"test/helper.rb",
|
29
|
-
"test/
|
46
|
+
"test/mailer/action_mailer_2/notifier.rb",
|
47
|
+
"test/mailer/action_mailer_2/notifier/with_body_and_attachment.erb",
|
48
|
+
"test/mailer/action_mailer_2/notifier/with_html_and_text_views.text.html.erb",
|
49
|
+
"test/mailer/action_mailer_2/notifier/with_html_and_text_views.text.plain.erb",
|
50
|
+
"test/mailer/action_mailer_2/notifier/with_simple_view.erb",
|
51
|
+
"test/mailer/action_mailer_2/notifier/with_text_only_view.text.plain.erb",
|
52
|
+
"test/mailer/action_mailer_3/notifier.rb",
|
53
|
+
"test/mailer/action_mailer_3/notifier/with_html_and_text_views.html.erb",
|
54
|
+
"test/mailer/action_mailer_3/notifier/with_html_and_text_views.text.erb",
|
55
|
+
"test/mailer/action_mailer_3/notifier/with_old_api.html.erb",
|
56
|
+
"test/mailer/action_mailer_3/notifier/with_old_api.text.erb",
|
57
|
+
"test/mailer/action_mailer_3/notifier/with_simple_view.erb",
|
58
|
+
"test/mailer/action_mailer_3/notifier/with_text_only_view.text.erb",
|
59
|
+
"test/mailer_2_test.rb",
|
60
|
+
"test/mailer_3_test.rb",
|
61
|
+
"test/mailer_helper_methods_test.rb",
|
62
|
+
"test/postageapp_test.rb",
|
63
|
+
"test/rails_initialization_test.rb",
|
64
|
+
"test/request_integration_test.rb",
|
65
|
+
"test/request_test.rb",
|
66
|
+
"test/response_test.rb"
|
30
67
|
]
|
31
68
|
s.homepage = %q{http://github.com/theworkinggroup/postageapp-gem}
|
32
69
|
s.rdoc_options = ["--charset=UTF-8"]
|
@@ -34,8 +71,19 @@ Gem::Specification.new do |s|
|
|
34
71
|
s.rubygems_version = %q{1.3.6}
|
35
72
|
s.summary = %q{Easier way to send email from web apps}
|
36
73
|
s.test_files = [
|
37
|
-
"test/
|
38
|
-
"test/
|
74
|
+
"test/configuration_test.rb",
|
75
|
+
"test/failed_request_test.rb",
|
76
|
+
"test/helper.rb",
|
77
|
+
"test/mailer/action_mailer_2/notifier.rb",
|
78
|
+
"test/mailer/action_mailer_3/notifier.rb",
|
79
|
+
"test/mailer_2_test.rb",
|
80
|
+
"test/mailer_3_test.rb",
|
81
|
+
"test/mailer_helper_methods_test.rb",
|
82
|
+
"test/postageapp_test.rb",
|
83
|
+
"test/rails_initialization_test.rb",
|
84
|
+
"test/request_integration_test.rb",
|
85
|
+
"test/request_test.rb",
|
86
|
+
"test/response_test.rb"
|
39
87
|
]
|
40
88
|
|
41
89
|
if s.respond_to? :specification_version then
|
@@ -43,9 +91,15 @@ Gem::Specification.new do |s|
|
|
43
91
|
s.specification_version = 3
|
44
92
|
|
45
93
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
94
|
+
s.add_runtime_dependency(%q<json>, ["= 1.2.4"])
|
95
|
+
s.add_development_dependency(%q<mocha>, [">= 0.9.8"])
|
46
96
|
else
|
97
|
+
s.add_dependency(%q<json>, ["= 1.2.4"])
|
98
|
+
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
47
99
|
end
|
48
100
|
else
|
101
|
+
s.add_dependency(%q<json>, ["= 1.2.4"])
|
102
|
+
s.add_dependency(%q<mocha>, [">= 0.9.8"])
|
49
103
|
end
|
50
104
|
end
|
51
105
|
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class ConfigurationTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_intitialization_defaults
|
6
|
+
config = PostageApp::Configuration.new
|
7
|
+
|
8
|
+
assert_equal true, config.secure
|
9
|
+
assert_equal nil, config.api_key
|
10
|
+
assert_equal 'https', config.protocol
|
11
|
+
assert_equal 'api.postageapp.com', config.host
|
12
|
+
assert_equal 443, config.port
|
13
|
+
assert_equal nil, config.proxy_host
|
14
|
+
assert_equal nil, config.proxy_port
|
15
|
+
assert_equal nil, config.proxy_user
|
16
|
+
assert_equal nil, config.proxy_pass
|
17
|
+
assert_equal 5, config.http_open_timeout
|
18
|
+
assert_equal 10, config.http_read_timeout
|
19
|
+
assert_equal nil, config.recipient_override
|
20
|
+
assert_equal %w( send_message ), config.requests_to_resend
|
21
|
+
assert_equal nil, config.project_root
|
22
|
+
assert_equal 'production', config.environment
|
23
|
+
assert_equal nil, config.logger
|
24
|
+
assert_equal 'undefined framework', config.framework
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_initialization_overrides
|
28
|
+
config = PostageApp::Configuration.new
|
29
|
+
|
30
|
+
config.protocol = 'http'
|
31
|
+
config.port = 999
|
32
|
+
|
33
|
+
assert_equal 'http', config.protocol
|
34
|
+
assert_equal 999, config.port
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_intitialization_for_secure
|
38
|
+
config = PostageApp::Configuration.new
|
39
|
+
|
40
|
+
config.secure = true
|
41
|
+
assert_equal true, config.secure
|
42
|
+
assert_equal 'https', config.protocol
|
43
|
+
assert_equal 443, config.port
|
44
|
+
|
45
|
+
assert config.secure?
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_intialization_for_insecure
|
49
|
+
config = PostageApp::Configuration.new
|
50
|
+
|
51
|
+
config.secure = false
|
52
|
+
assert_equal false, config.secure
|
53
|
+
assert_equal 'http', config.protocol
|
54
|
+
assert_equal 80, config.port
|
55
|
+
|
56
|
+
assert !config.secure?
|
57
|
+
end
|
58
|
+
|
59
|
+
def test_method_url
|
60
|
+
config = PostageApp::Configuration.new
|
61
|
+
|
62
|
+
config.host = 'api.postageapp.com'
|
63
|
+
assert_equal 'https://api.postageapp.com:443', config.url
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require File.expand_path('../helper', __FILE__)
|
2
|
+
|
3
|
+
class FailedRequestTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def setup
|
6
|
+
super
|
7
|
+
PostageApp.configuration.project_root = File.expand_path('../', __FILE__)
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_store_and_initialize
|
11
|
+
assert_match /.*?\/tmp\/postageapp_failed_requests/, PostageApp::FailedRequest.store_path
|
12
|
+
|
13
|
+
request = PostageApp::Request.new(:send_message, {
|
14
|
+
:headers => { 'from' => 'sender@test.test',
|
15
|
+
'subject' => 'Test Message'},
|
16
|
+
:recipients => 'test@test.test',
|
17
|
+
:content => {
|
18
|
+
'text/plain' => 'text content',
|
19
|
+
'text/html' => 'html content'
|
20
|
+
}
|
21
|
+
})
|
22
|
+
assert PostageApp::FailedRequest.store(request)
|
23
|
+
file_path = File.join(PostageApp::FailedRequest.store_path, request.uid)
|
24
|
+
assert File.exists?(file_path)
|
25
|
+
|
26
|
+
stored_request = PostageApp::FailedRequest.initialize_request(request.uid)
|
27
|
+
assert stored_request.is_a?(PostageApp::Request)
|
28
|
+
assert_equal request.url, stored_request.url
|
29
|
+
assert_equal request.uid, stored_request.uid
|
30
|
+
assert_equal request.arguments_to_send, stored_request.arguments_to_send
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_initialize_request_when_not_found
|
34
|
+
assert !PostageApp::FailedRequest.initialize_request('not_there')
|
35
|
+
end
|
36
|
+
|
37
|
+
def test_store_for_wrong_call_type
|
38
|
+
request = PostageApp::Request.new(:get_project_info)
|
39
|
+
assert !PostageApp::FailedRequest.store(request)
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_store_with_no_file_path_defined
|
43
|
+
PostageApp.configuration.project_root = nil
|
44
|
+
assert !PostageApp::FailedRequest.store_path
|
45
|
+
assert !PostageApp::FailedRequest.store('something')
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_resend_all
|
49
|
+
mock_failed_send
|
50
|
+
|
51
|
+
request = PostageApp::Request.new(:send_message, {
|
52
|
+
:headers => { 'from' => 'sender@test.test',
|
53
|
+
'subject' => 'Test Message'},
|
54
|
+
:recipients => 'test@test.test',
|
55
|
+
:content => {
|
56
|
+
'text/plain' => 'text content',
|
57
|
+
'text/html' => 'html content'
|
58
|
+
}
|
59
|
+
})
|
60
|
+
response = request.send
|
61
|
+
assert response.fail?
|
62
|
+
file_path = File.join(PostageApp::FailedRequest.store_path, request.uid)
|
63
|
+
assert File.exists?(file_path)
|
64
|
+
|
65
|
+
mock_successful_send
|
66
|
+
|
67
|
+
request = PostageApp::Request.new(:get_project_info)
|
68
|
+
|
69
|
+
message_receipt_response = stub(:ok? => false, :not_found? => true)
|
70
|
+
message_receipt_request = stub(:send => message_receipt_response)
|
71
|
+
PostageApp::Request.stubs(:new).with{|a,b| a == :get_message_receipt}.returns(message_receipt_request)
|
72
|
+
|
73
|
+
response = request.send
|
74
|
+
assert response.ok?
|
75
|
+
|
76
|
+
assert !File.exists?(file_path)
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
data/test/helper.rb
CHANGED
@@ -3,7 +3,73 @@ require 'test/unit'
|
|
3
3
|
|
4
4
|
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
5
5
|
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
6
|
+
|
6
7
|
require 'postageapp'
|
8
|
+
require 'postageapp/mailer'
|
9
|
+
|
10
|
+
begin require 'redgreen' unless ENV['TM_FILEPATH']; rescue LoadError; end
|
11
|
+
require 'mocha'
|
7
12
|
|
8
13
|
class Test::Unit::TestCase
|
14
|
+
|
15
|
+
def setup
|
16
|
+
# resetting to default configuration
|
17
|
+
PostageApp.configure do |config|
|
18
|
+
config.api_key = '1234567890abcdef'
|
19
|
+
config.secure = true
|
20
|
+
config.protocol = 'https'
|
21
|
+
config.host = 'api.postageapp.com'
|
22
|
+
config.port = 443
|
23
|
+
config.proxy_host = nil
|
24
|
+
config.proxy_port = nil
|
25
|
+
config.proxy_user = nil
|
26
|
+
config.proxy_pass = nil
|
27
|
+
config.http_open_timeout = 5
|
28
|
+
config.http_read_timeout = 10
|
29
|
+
config.recipient_override = nil
|
30
|
+
config.requests_to_resend = %w( send_message )
|
31
|
+
config.project_root = File.expand_path('../', __FILE__)
|
32
|
+
config.environment = 'production'
|
33
|
+
config.logger = nil
|
34
|
+
config.framework = 'undefined framework'
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def mock_successful_send
|
39
|
+
Net::HTTP.any_instance.stubs(:post).returns(Net::HTTPResponse.new(nil, nil, nil))
|
40
|
+
Net::HTTPResponse.any_instance.stubs(:body).returns({
|
41
|
+
:response => {
|
42
|
+
:uid => 'sha1hashuid23456789012345678901234567890',
|
43
|
+
:status => 'ok'
|
44
|
+
},
|
45
|
+
:data => {
|
46
|
+
:message => { :id => 999 }
|
47
|
+
}
|
48
|
+
}.to_json)
|
49
|
+
end
|
50
|
+
|
51
|
+
def mock_failed_send
|
52
|
+
Net::HTTP.any_instance.stubs(:post).returns(nil)
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
# Setting up constants just for the duration of the test
|
58
|
+
module ConstantDefinitions
|
59
|
+
|
60
|
+
def setup
|
61
|
+
@defined_constants = []
|
62
|
+
end
|
63
|
+
|
64
|
+
def teardown
|
65
|
+
@defined_constants.each do |constant|
|
66
|
+
Object.__send__(:remove_const, constant)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def define_constant(name, value)
|
71
|
+
Object.const_set(name, value)
|
72
|
+
@defined_constants << name
|
73
|
+
end
|
74
|
+
|
9
75
|
end
|