tanga_active_utils 2.2.3
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.
- checksums.yaml +7 -0
- data/.gitignore +5 -0
- data/.travis.yml +5 -0
- data/Gemfile +3 -0
- data/MIT-LICENSE +20 -0
- data/README.md +16 -0
- data/Rakefile +27 -0
- data/lib/active_utils.rb +22 -0
- data/lib/active_utils/common/connection.rb +170 -0
- data/lib/active_utils/common/country.rb +330 -0
- data/lib/active_utils/common/currency_code.rb +50 -0
- data/lib/active_utils/common/error.rb +29 -0
- data/lib/active_utils/common/network_connection_retries.rb +74 -0
- data/lib/active_utils/common/post_data.rb +24 -0
- data/lib/active_utils/common/posts_data.rb +77 -0
- data/lib/active_utils/common/requires_parameters.rb +16 -0
- data/lib/active_utils/common/utils.rb +20 -0
- data/lib/active_utils/common/validateable.rb +81 -0
- data/lib/active_utils/version.rb +3 -0
- data/lib/certs/cacert.pem +3866 -0
- data/shipit.rubygems.yml +1 -0
- data/tanga_active_utils.gemspec +27 -0
- data/test/test_helper.rb +8 -0
- data/test/unit/connection_test.rb +177 -0
- data/test/unit/country_code_test.rb +31 -0
- data/test/unit/country_test.rb +68 -0
- data/test/unit/currency_code_test.rb +37 -0
- data/test/unit/network_connection_retries_test.rb +141 -0
- data/test/unit/post_data_test.rb +50 -0
- data/test/unit/posts_data_test.rb +58 -0
- data/test/unit/utils_test.rb +7 -0
- data/test/unit/validateable_test.rb +59 -0
- metadata +132 -0
data/shipit.rubygems.yml
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
# using the default shipit config
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "active_utils/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "tanga_active_utils"
|
7
|
+
s.version = ActiveUtils::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Shopify"]
|
10
|
+
s.email = ["developers@jadedpixel.com"]
|
11
|
+
s.homepage = "http://github.com/shopify/active_utils"
|
12
|
+
s.summary = %q{Common utils used by active_merchant, active_fulfillment, and active_shipping}
|
13
|
+
s.license = 'MIT'
|
14
|
+
|
15
|
+
s.rubyforge_project = "active_utils"
|
16
|
+
|
17
|
+
s.add_dependency('activesupport', '>= 2.3.11')
|
18
|
+
s.add_dependency('i18n')
|
19
|
+
|
20
|
+
s.add_development_dependency('rake')
|
21
|
+
s.add_development_dependency('mocha')
|
22
|
+
|
23
|
+
s.files = `git ls-files`.split("\n")
|
24
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
25
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
26
|
+
s.require_paths = ["lib"]
|
27
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class ConnectionTest < Minitest::Test
|
4
|
+
|
5
|
+
def setup
|
6
|
+
@ok = stub(:code => 200, :message => 'OK', :body => 'success')
|
7
|
+
|
8
|
+
@endpoint = 'https://example.com/tx.php'
|
9
|
+
@connection = ActiveMerchant::Connection.new(@endpoint)
|
10
|
+
@connection.logger = stub(:info => nil, :debug => nil, :error => nil)
|
11
|
+
end
|
12
|
+
|
13
|
+
def test_connection_endpoint_parses_string_to_uri
|
14
|
+
assert_equal URI.parse(@endpoint), @connection.endpoint
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_connection_endpoint_accepts_uri
|
18
|
+
endpoint = URI.parse(@endpoint)
|
19
|
+
connection = ActiveMerchant::Connection.new(endpoint)
|
20
|
+
assert_equal endpoint, connection.endpoint
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_connection_endpoint_raises_uri_error
|
24
|
+
assert_raises URI::InvalidURIError do
|
25
|
+
ActiveMerchant::Connection.new("not a URI")
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_successful_get_request
|
30
|
+
@connection.logger.expects(:info).twice
|
31
|
+
Net::HTTP.any_instance.expects(:get).with('/tx.php', {}).returns(@ok)
|
32
|
+
response = @connection.request(:get, nil, {})
|
33
|
+
assert_equal 'success', response.body
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_successful_post_request
|
37
|
+
Net::HTTP.any_instance.expects(:post).with('/tx.php', 'data', ActiveMerchant::Connection::RUBY_184_POST_HEADERS).returns(@ok)
|
38
|
+
response = @connection.request(:post, 'data', {})
|
39
|
+
assert_equal 'success', response.body
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_successful_put_request
|
43
|
+
Net::HTTP.any_instance.expects(:put).with('/tx.php', 'data', {}).returns(@ok)
|
44
|
+
response = @connection.request(:put, 'data', {})
|
45
|
+
assert_equal 'success', response.body
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_successful_delete_request
|
49
|
+
Net::HTTP.any_instance.expects(:delete).with('/tx.php', {}).returns(@ok)
|
50
|
+
response = @connection.request(:delete, nil, {})
|
51
|
+
assert_equal 'success', response.body
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_get_raises_argument_error_if_passed_data
|
55
|
+
assert_raises(ArgumentError) do
|
56
|
+
@connection.request(:get, 'data', {})
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_request_raises_when_request_method_not_supported
|
61
|
+
assert_raises(ArgumentError) do
|
62
|
+
@connection.request(:head, nil, {})
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_override_max_retries
|
67
|
+
refute_equal 1, @connection.max_retries
|
68
|
+
@connection.max_retries = 1
|
69
|
+
assert_equal 1, @connection.max_retries
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_override_ssl_version
|
73
|
+
refute_equal :SSLv3, @connection.ssl_version
|
74
|
+
@connection.ssl_version = :SSLv3
|
75
|
+
assert_equal :SSLv3, @connection.ssl_version
|
76
|
+
end
|
77
|
+
|
78
|
+
def test_default_read_timeout
|
79
|
+
assert_equal ActiveMerchant::Connection::READ_TIMEOUT, @connection.read_timeout
|
80
|
+
end
|
81
|
+
|
82
|
+
def test_override_read_timeout
|
83
|
+
@connection.read_timeout = 20
|
84
|
+
assert_equal 20, @connection.read_timeout
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_default_open_timeout
|
88
|
+
@connection.open_timeout = 20
|
89
|
+
assert_equal 20, @connection.open_timeout
|
90
|
+
end
|
91
|
+
|
92
|
+
def test_default_verify_peer
|
93
|
+
assert_equal ActiveMerchant::Connection::VERIFY_PEER, @connection.verify_peer
|
94
|
+
end
|
95
|
+
|
96
|
+
def test_override_verify_peer
|
97
|
+
@connection.verify_peer = false
|
98
|
+
assert_equal false, @connection.verify_peer
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_default_ca_file
|
102
|
+
assert_equal ActiveMerchant::Connection::CA_FILE, @connection.ca_file
|
103
|
+
assert_equal ActiveMerchant::Connection::CA_FILE, @connection.send(:http).ca_file
|
104
|
+
end
|
105
|
+
|
106
|
+
def test_override_ca_file
|
107
|
+
@connection.ca_file = "/bogus"
|
108
|
+
assert_equal "/bogus", @connection.ca_file
|
109
|
+
assert_equal "/bogus", @connection.send(:http).ca_file
|
110
|
+
end
|
111
|
+
|
112
|
+
def test_default_ca_path
|
113
|
+
assert_equal ActiveMerchant::Connection::CA_PATH, @connection.ca_path
|
114
|
+
assert_equal ActiveMerchant::Connection::CA_PATH, @connection.send(:http).ca_path
|
115
|
+
end
|
116
|
+
|
117
|
+
def test_override_ca_path
|
118
|
+
@connection.ca_path = "/bogus"
|
119
|
+
assert_equal "/bogus", @connection.ca_path
|
120
|
+
assert_equal "/bogus", @connection.send(:http).ca_path
|
121
|
+
end
|
122
|
+
|
123
|
+
def test_unrecoverable_exception
|
124
|
+
@connection.logger.expects(:info).once
|
125
|
+
Net::HTTP.any_instance.expects(:post).raises(EOFError)
|
126
|
+
|
127
|
+
assert_raises(ActiveMerchant::ConnectionError) do
|
128
|
+
@connection.request(:post, '')
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_failure_then_success_with_recoverable_exception
|
133
|
+
@connection.logger.expects(:info).never
|
134
|
+
Net::HTTP.any_instance.expects(:post).times(2).raises(Errno::ECONNREFUSED).then.returns(@ok)
|
135
|
+
|
136
|
+
@connection.request(:post, '')
|
137
|
+
end
|
138
|
+
|
139
|
+
def test_failure_limit_reached
|
140
|
+
@connection.logger.expects(:info).once
|
141
|
+
Net::HTTP.any_instance.expects(:post).times(ActiveMerchant::Connection::MAX_RETRIES).raises(Errno::ECONNREFUSED)
|
142
|
+
|
143
|
+
assert_raises(ActiveMerchant::ConnectionError) do
|
144
|
+
@connection.request(:post, '')
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
def test_failure_then_success_with_retry_safe_enabled
|
149
|
+
Net::HTTP.any_instance.expects(:post).times(2).raises(EOFError).then.returns(@ok)
|
150
|
+
|
151
|
+
@connection.retry_safe = true
|
152
|
+
|
153
|
+
@connection.request(:post, '')
|
154
|
+
end
|
155
|
+
|
156
|
+
def test_mixture_of_failures_with_retry_safe_enabled
|
157
|
+
Net::HTTP.any_instance.expects(:post).times(3).raises(Errno::EHOSTUNREACH).
|
158
|
+
raises(Errno::ECONNREFUSED).
|
159
|
+
raises(EOFError)
|
160
|
+
|
161
|
+
@connection.retry_safe = true
|
162
|
+
|
163
|
+
assert_raises(ActiveMerchant::ConnectionError) do
|
164
|
+
@connection.request(:post, '')
|
165
|
+
end
|
166
|
+
end
|
167
|
+
|
168
|
+
def test_failure_with_ssl_certificate
|
169
|
+
@connection.logger.expects(:error).once
|
170
|
+
Net::HTTP.any_instance.expects(:post).raises(OpenSSL::X509::CertificateError)
|
171
|
+
|
172
|
+
assert_raises(ActiveMerchant::ClientCertificateError) do
|
173
|
+
@connection.request(:post, '')
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CountryCodeTest < Minitest::Test
|
4
|
+
def test_alpha2_country_code
|
5
|
+
code = CountryCode.new('CA')
|
6
|
+
assert_equal 'CA', code.value
|
7
|
+
assert_equal 'CA', code.to_s
|
8
|
+
assert_equal :alpha2, code.format
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_lower_alpha2_country_code
|
12
|
+
code = CountryCode.new('ca')
|
13
|
+
assert_equal 'CA', code.value
|
14
|
+
assert_equal 'CA', code.to_s
|
15
|
+
assert_equal :alpha2, code.format
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_alpha2_country_code
|
19
|
+
code = CountryCode.new('CAN')
|
20
|
+
assert_equal :alpha3, code.format
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_numeric_code
|
24
|
+
code = CountryCode.new('004')
|
25
|
+
assert_equal :numeric, code.format
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_invalid_code_format
|
29
|
+
assert_raises(CountryCodeFormatError){ CountryCode.new('Canada') }
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CountryTest < Minitest::Test
|
4
|
+
def test_country_from_hash
|
5
|
+
country = Country.new(:name => 'Canada', :alpha2 => 'CA', :alpha3 => 'CAN', :numeric => '124')
|
6
|
+
assert_equal 'CA', country.code(:alpha2).value
|
7
|
+
assert_equal 'CAN', country.code(:alpha3).value
|
8
|
+
assert_equal '124', country.code(:numeric).value
|
9
|
+
assert_equal 'Canada', country.to_s
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_country_for_alpha2_code
|
13
|
+
country = Country.find('CA')
|
14
|
+
assert_equal 'CA', country.code(:alpha2).value
|
15
|
+
assert_equal 'CAN', country.code(:alpha3).value
|
16
|
+
assert_equal '124', country.code(:numeric).value
|
17
|
+
assert_equal 'Canada', country.to_s
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_country_for_alpha3_code
|
21
|
+
country = Country.find('CAN')
|
22
|
+
assert_equal 'Canada', country.to_s
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_country_for_numeric_code
|
26
|
+
country = Country.find('124')
|
27
|
+
assert_equal 'Canada', country.to_s
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_find_country_by_name
|
31
|
+
country = Country.find('Canada')
|
32
|
+
assert_equal 'Canada', country.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_find_unknown_country_name
|
36
|
+
assert_raises(InvalidCountryCodeError) do
|
37
|
+
Country.find('Asskickistan')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_find_australia
|
42
|
+
country = Country.find('AU')
|
43
|
+
assert_equal 'AU', country.code(:alpha2).value
|
44
|
+
|
45
|
+
country = Country.find('Australia')
|
46
|
+
assert_equal 'AU', country.code(:alpha2).value
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_find_united_kingdom
|
50
|
+
country = Country.find('GB')
|
51
|
+
assert_equal 'GB', country.code(:alpha2).value
|
52
|
+
|
53
|
+
country = Country.find('United Kingdom')
|
54
|
+
assert_equal 'GB', country.code(:alpha2).value
|
55
|
+
end
|
56
|
+
|
57
|
+
def test_raise_on_nil_name
|
58
|
+
assert_raises(InvalidCountryCodeError) do
|
59
|
+
Country.find(nil)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_country_names_are_alphabetized
|
64
|
+
country_names = Country::COUNTRIES.map { | each | each[:name] }
|
65
|
+
assert_equal(country_names.sort, country_names)
|
66
|
+
end
|
67
|
+
|
68
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class CurrencyCodeTest < Minitest::Test
|
4
|
+
def test_is_iso_should_return_true_for_iso_currencies
|
5
|
+
assert CurrencyCode.is_iso?('CAD')
|
6
|
+
assert CurrencyCode.is_iso?('USD')
|
7
|
+
assert CurrencyCode.is_iso?('TWD')
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_is_iso_should_return_false_for_non_iso_currencies
|
11
|
+
assert !CurrencyCode.is_iso?('NTD')
|
12
|
+
assert !CurrencyCode.is_iso?('RMB')
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_standardize_should_not_change_iso_currencies
|
16
|
+
assert_equal 'CAD', CurrencyCode.standardize('CAD')
|
17
|
+
assert_equal 'USD', CurrencyCode.standardize('usd')
|
18
|
+
assert_equal 'TWD', CurrencyCode.standardize('TWD')
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_standardize_should_convert_known_non_iso_to_iso
|
22
|
+
assert_equal 'TWD', CurrencyCode.standardize('NTD')
|
23
|
+
assert_equal 'CNY', CurrencyCode.standardize('rmb')
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_standardize_should_raise_for_unknwon_currencies
|
27
|
+
assert_raises CurrencyCode::InvalidCurrencyCodeError do
|
28
|
+
CurrencyCode.standardize('Not Real')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_nil_code_should_raise_InvalidCurrencyCodeError
|
33
|
+
assert_raises CurrencyCode::InvalidCurrencyCodeError do
|
34
|
+
CurrencyCode.standardize(nil)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,141 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require 'openssl'
|
3
|
+
require 'net/http'
|
4
|
+
|
5
|
+
class NetworkConnectionRetriesTest < Minitest::Test
|
6
|
+
class MyNewError < StandardError
|
7
|
+
end
|
8
|
+
|
9
|
+
include NetworkConnectionRetries
|
10
|
+
|
11
|
+
def setup
|
12
|
+
@logger = stubs(:logger)
|
13
|
+
@requester = stubs(:requester)
|
14
|
+
@ok = stub(:code => 200, :message => 'OK', :body => 'success')
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_unrecoverable_exception
|
18
|
+
assert_raises(ActiveMerchant::ConnectionError) do
|
19
|
+
retry_exceptions do
|
20
|
+
raise EOFError
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_invalid_response_error
|
26
|
+
assert_raises(ActiveMerchant::InvalidResponseError) do
|
27
|
+
retry_exceptions do
|
28
|
+
raise Zlib::BufError
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def test_unrecoverable_exception_logged_if_logger_provided
|
34
|
+
@logger.expects(:info).once
|
35
|
+
assert_raises(ActiveMerchant::ConnectionError) do
|
36
|
+
retry_exceptions :logger => @logger do
|
37
|
+
raise EOFError
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_failure_then_success_with_recoverable_exception
|
43
|
+
@requester.expects(:post).times(2).raises(Errno::ECONNREFUSED).then.returns(@ok)
|
44
|
+
|
45
|
+
retry_exceptions do
|
46
|
+
@requester.post
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_failure_limit_reached
|
51
|
+
@requester.expects(:post).times(ActiveMerchant::NetworkConnectionRetries::DEFAULT_RETRIES).raises(Errno::ECONNREFUSED)
|
52
|
+
|
53
|
+
assert_raises(ActiveMerchant::ConnectionError) do
|
54
|
+
retry_exceptions do
|
55
|
+
@requester.post
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def test_failure_limit_reached_logs_final_error
|
61
|
+
@logger.expects(:info).times(3)
|
62
|
+
@requester.expects(:post).times(ActiveMerchant::NetworkConnectionRetries::DEFAULT_RETRIES).raises(Errno::ECONNREFUSED)
|
63
|
+
|
64
|
+
assert_raises(ActiveMerchant::ConnectionError) do
|
65
|
+
retry_exceptions(:logger => @logger) do
|
66
|
+
@requester.post
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def test_failure_then_success_with_retry_safe_enabled
|
72
|
+
@requester.expects(:post).times(2).raises(EOFError).then.returns(@ok)
|
73
|
+
|
74
|
+
retry_exceptions :retry_safe => true do
|
75
|
+
@requester.post
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_failure_then_success_logs_success
|
80
|
+
@logger.expects(:info).with(regexp_matches(/dropped/))
|
81
|
+
@logger.expects(:info).with(regexp_matches(/success/))
|
82
|
+
@requester.expects(:post).times(2).raises(EOFError).then.returns(@ok)
|
83
|
+
|
84
|
+
retry_exceptions(:logger => @logger, :retry_safe => true) do
|
85
|
+
@requester.post
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_mixture_of_failures_with_retry_safe_enabled
|
90
|
+
@requester.expects(:post).times(3).raises(Errno::EHOSTUNREACH).
|
91
|
+
raises(Errno::ECONNREFUSED).
|
92
|
+
raises(EOFError)
|
93
|
+
|
94
|
+
assert_raises(ActiveMerchant::ConnectionError) do
|
95
|
+
retry_exceptions :retry_safe => true do
|
96
|
+
@requester.post
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_failure_with_ssl_certificate
|
102
|
+
@requester.expects(:post).raises(OpenSSL::X509::CertificateError)
|
103
|
+
|
104
|
+
assert_raises(ActiveMerchant::ClientCertificateError) do
|
105
|
+
retry_exceptions do
|
106
|
+
@requester.post
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def test_failure_with_ssl_certificate_logs_error_if_logger_specified
|
112
|
+
@logger.expects(:error).once
|
113
|
+
@requester.expects(:post).raises(OpenSSL::X509::CertificateError)
|
114
|
+
|
115
|
+
assert_raises(ActiveMerchant::ClientCertificateError) do
|
116
|
+
retry_exceptions :logger => @logger do
|
117
|
+
@requester.post
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def test_failure_with_additional_exceptions_specified
|
123
|
+
@requester.expects(:post).raises(MyNewError)
|
124
|
+
|
125
|
+
assert_raises(ActiveMerchant::ConnectionError) do
|
126
|
+
retry_exceptions :connection_exceptions => {MyNewError => "my message"} do
|
127
|
+
@requester.post
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
|
132
|
+
def test_failure_without_additional_exceptions_specified
|
133
|
+
@requester.expects(:post).raises(MyNewError)
|
134
|
+
|
135
|
+
assert_raises(MyNewError) do
|
136
|
+
retry_exceptions do
|
137
|
+
@requester.post
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|