mailgunner 2.6.0 → 3.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +218 -0
- data/LICENSE.txt +1 -1
- data/README.md +14 -31
- data/lib/mailgunner.rb +13 -0
- data/lib/mailgunner/client.rb +19 -48
- data/lib/mailgunner/client/domains.rb +35 -3
- data/lib/mailgunner/client/email_validation.rb +15 -3
- data/lib/mailgunner/client/events.rb +2 -2
- data/lib/mailgunner/client/ips.rb +2 -2
- data/lib/mailgunner/client/mailing_lists.rb +6 -6
- data/lib/mailgunner/client/messages.rb +2 -2
- data/lib/mailgunner/client/routes.rb +4 -4
- data/lib/mailgunner/client/stats.rb +2 -8
- data/lib/mailgunner/client/suppressions.rb +25 -9
- data/lib/mailgunner/client/tags.rb +3 -3
- data/lib/mailgunner/client/webhooks.rb +2 -2
- data/lib/mailgunner/config.rb +45 -0
- data/lib/mailgunner/delivery_method.rb +4 -2
- data/lib/mailgunner/errors.rb +25 -7
- data/lib/mailgunner/params.rb +16 -0
- data/lib/mailgunner/railtie.rb +1 -0
- data/lib/mailgunner/struct.rb +49 -0
- data/lib/mailgunner/version.rb +1 -1
- data/mailgunner.gemspec +4 -9
- metadata +14 -83
- data/spec/mailgunner_delivery_method_spec.rb +0 -37
- data/spec/mailgunner_spec.rb +0 -747
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mailgunner
|
4
|
+
class Struct
|
5
|
+
def initialize(hash = nil)
|
6
|
+
@hash = hash || {}
|
7
|
+
end
|
8
|
+
|
9
|
+
def [](key)
|
10
|
+
@hash[key.to_s]
|
11
|
+
end
|
12
|
+
|
13
|
+
def []=(key, value)
|
14
|
+
@hash[key] = value
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_h
|
18
|
+
@hash
|
19
|
+
end
|
20
|
+
|
21
|
+
def ==(other)
|
22
|
+
other.is_a?(self.class) && other.to_h == @hash
|
23
|
+
end
|
24
|
+
|
25
|
+
def respond_to_missing?(name, include_all)
|
26
|
+
@hash.key?(name.to_s)
|
27
|
+
end
|
28
|
+
|
29
|
+
def method_missing(name, *args)
|
30
|
+
return @hash[name.to_s] if @hash.key?(name.to_s)
|
31
|
+
|
32
|
+
super
|
33
|
+
end
|
34
|
+
|
35
|
+
def pretty_print(q)
|
36
|
+
q.object_address_group(self) do
|
37
|
+
q.seplist(@hash, lambda { q.text ',' }) do |key, value|
|
38
|
+
q.breakable
|
39
|
+
q.text key.to_s
|
40
|
+
q.text '='
|
41
|
+
q.group(1) {
|
42
|
+
q.breakable ''
|
43
|
+
q.pp value
|
44
|
+
}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/mailgunner/version.rb
CHANGED
data/mailgunner.gemspec
CHANGED
@@ -7,21 +7,16 @@ Gem::Specification.new do |s|
|
|
7
7
|
s.platform = Gem::Platform::RUBY
|
8
8
|
s.authors = ['Tim Craft']
|
9
9
|
s.email = ['mail@timcraft.com']
|
10
|
-
s.homepage = '
|
10
|
+
s.homepage = 'https://github.com/readysteady/mailgunner'
|
11
11
|
s.description = 'Ruby client for the Mailgun API'
|
12
12
|
s.summary = 'Ruby client for the Mailgun API'
|
13
|
-
s.files = Dir.glob('
|
14
|
-
s.required_ruby_version = '>=
|
15
|
-
s.add_development_dependency('rake', '>= 12')
|
16
|
-
s.add_development_dependency('webmock', '~> 3')
|
17
|
-
s.add_development_dependency('mail', '~> 2')
|
18
|
-
s.add_development_dependency('actionmailer', '~> 5')
|
19
|
-
s.add_development_dependency('mocha', '~> 1')
|
13
|
+
s.files = Dir.glob('lib/**/*.rb') + %w(CHANGES.md LICENSE.txt README.md mailgunner.gemspec)
|
14
|
+
s.required_ruby_version = '>= 2.5.0'
|
20
15
|
s.require_path = 'lib'
|
21
16
|
s.metadata = {
|
22
17
|
'homepage' => 'https://github.com/readysteady/mailgunner',
|
23
18
|
'source_code_uri' => 'https://github.com/readysteady/mailgunner',
|
24
19
|
'bug_tracker_uri' => 'https://github.com/readysteady/mailgunner/issues',
|
25
|
-
'changelog_uri' => 'https://github.com/readysteady/mailgunner/blob/
|
20
|
+
'changelog_uri' => 'https://github.com/readysteady/mailgunner/blob/main/CHANGES.md'
|
26
21
|
}
|
27
22
|
end
|
metadata
CHANGED
@@ -1,85 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailgunner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 3.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Craft
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: rake
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '12'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '12'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: webmock
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '3'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '3'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: mail
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '2'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '2'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: actionmailer
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '5'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '5'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: mocha
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '1'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '1'
|
11
|
+
date: 2020-11-03 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
83
13
|
description: Ruby client for the Mailgun API
|
84
14
|
email:
|
85
15
|
- mail@timcraft.com
|
@@ -87,6 +17,7 @@ executables: []
|
|
87
17
|
extensions: []
|
88
18
|
extra_rdoc_files: []
|
89
19
|
files:
|
20
|
+
- CHANGES.md
|
90
21
|
- LICENSE.txt
|
91
22
|
- README.md
|
92
23
|
- lib/mailgunner.rb
|
@@ -102,22 +33,23 @@ files:
|
|
102
33
|
- lib/mailgunner/client/suppressions.rb
|
103
34
|
- lib/mailgunner/client/tags.rb
|
104
35
|
- lib/mailgunner/client/webhooks.rb
|
36
|
+
- lib/mailgunner/config.rb
|
105
37
|
- lib/mailgunner/delivery_method.rb
|
106
38
|
- lib/mailgunner/errors.rb
|
39
|
+
- lib/mailgunner/params.rb
|
107
40
|
- lib/mailgunner/railtie.rb
|
41
|
+
- lib/mailgunner/struct.rb
|
108
42
|
- lib/mailgunner/version.rb
|
109
43
|
- mailgunner.gemspec
|
110
|
-
|
111
|
-
- spec/mailgunner_spec.rb
|
112
|
-
homepage: http://github.com/readysteady/mailgunner
|
44
|
+
homepage: https://github.com/readysteady/mailgunner
|
113
45
|
licenses:
|
114
46
|
- LGPL-3.0
|
115
47
|
metadata:
|
116
48
|
homepage: https://github.com/readysteady/mailgunner
|
117
49
|
source_code_uri: https://github.com/readysteady/mailgunner
|
118
50
|
bug_tracker_uri: https://github.com/readysteady/mailgunner/issues
|
119
|
-
changelog_uri: https://github.com/readysteady/mailgunner/blob/
|
120
|
-
post_install_message:
|
51
|
+
changelog_uri: https://github.com/readysteady/mailgunner/blob/main/CHANGES.md
|
52
|
+
post_install_message:
|
121
53
|
rdoc_options: []
|
122
54
|
require_paths:
|
123
55
|
- lib
|
@@ -125,16 +57,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
125
57
|
requirements:
|
126
58
|
- - ">="
|
127
59
|
- !ruby/object:Gem::Version
|
128
|
-
version:
|
60
|
+
version: 2.5.0
|
129
61
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
62
|
requirements:
|
131
63
|
- - ">="
|
132
64
|
- !ruby/object:Gem::Version
|
133
65
|
version: '0'
|
134
66
|
requirements: []
|
135
|
-
|
136
|
-
|
137
|
-
signing_key:
|
67
|
+
rubygems_version: 3.1.4
|
68
|
+
signing_key:
|
138
69
|
specification_version: 4
|
139
70
|
summary: Ruby client for the Mailgun API
|
140
71
|
test_files: []
|
@@ -1,37 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'webmock/minitest'
|
3
|
-
require 'action_mailer'
|
4
|
-
require 'mailgunner'
|
5
|
-
require 'mailgunner/delivery_method'
|
6
|
-
|
7
|
-
class ExampleMailer < ActionMailer::Base
|
8
|
-
default from: 'testing@localhost'
|
9
|
-
|
10
|
-
def registration_confirmation(user)
|
11
|
-
mail to: user[:email], subject: 'Welcome!', body: 'Hello!'
|
12
|
-
end
|
13
|
-
end
|
14
|
-
|
15
|
-
describe 'Mailgunner::DeliveryMethod' do
|
16
|
-
before do
|
17
|
-
@api_key = 'xxx'
|
18
|
-
|
19
|
-
@domain = 'samples.mailgun.org'
|
20
|
-
|
21
|
-
@base_url = 'https://api.mailgun.net/v3'
|
22
|
-
|
23
|
-
@auth = ['api', @api_key]
|
24
|
-
|
25
|
-
@address = 'user@example.com'
|
26
|
-
|
27
|
-
ActionMailer::Base.delivery_method = :mailgun
|
28
|
-
|
29
|
-
ActionMailer::Base.mailgun_settings = {api_key: @api_key, domain: @domain}
|
30
|
-
end
|
31
|
-
|
32
|
-
it 'delivers the mail to mailgun in mime format' do
|
33
|
-
stub_request(:post, "#@base_url/#@domain/messages.mime").with(basic_auth: @auth)
|
34
|
-
|
35
|
-
ExampleMailer.registration_confirmation(email: @address).deliver_now
|
36
|
-
end
|
37
|
-
end
|
data/spec/mailgunner_spec.rb
DELETED
@@ -1,747 +0,0 @@
|
|
1
|
-
require 'minitest/autorun'
|
2
|
-
require 'webmock/minitest'
|
3
|
-
require 'mocha/setup'
|
4
|
-
require 'mailgunner'
|
5
|
-
require 'json'
|
6
|
-
require 'mail'
|
7
|
-
|
8
|
-
describe 'Mailgunner::Client' do
|
9
|
-
before do
|
10
|
-
@domain = 'samples.mailgun.org'
|
11
|
-
|
12
|
-
@api_key = 'xxx'
|
13
|
-
|
14
|
-
@base_url = 'https://@api.mailgun.net/v3'
|
15
|
-
|
16
|
-
@json_response_object = {'key' => 'value'}
|
17
|
-
|
18
|
-
@client = Mailgunner::Client.new(domain: @domain, api_key: @api_key)
|
19
|
-
|
20
|
-
@address = 'user@example.com'
|
21
|
-
|
22
|
-
@encoded_address = 'user%40example.com'
|
23
|
-
|
24
|
-
@login = 'bob.bar'
|
25
|
-
|
26
|
-
@id = 'idxxx'
|
27
|
-
end
|
28
|
-
|
29
|
-
def stub(http_method, url, body: nil, headers: nil)
|
30
|
-
headers ||= {}
|
31
|
-
headers['User-Agent'] = /\ARuby\/\d+\.\d+\.\d+ Mailgunner\/\d+\.\d+\.\d+\z/
|
32
|
-
|
33
|
-
params = {basic_auth: ['api', @api_key]}
|
34
|
-
params[:headers] = headers
|
35
|
-
params[:body] = body if body
|
36
|
-
|
37
|
-
response_headers = {'Content-Type' => 'application/json;charset=utf-8'}
|
38
|
-
response_body = '{"key":"value"}'
|
39
|
-
|
40
|
-
stub_request(http_method, url).with(params).to_return(headers: response_headers, body: response_body)
|
41
|
-
end
|
42
|
-
|
43
|
-
describe 'http method' do
|
44
|
-
it 'returns a net http object' do
|
45
|
-
@client.http.must_be_instance_of(Net::HTTP)
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
describe 'http object' do
|
50
|
-
it 'uses ssl' do
|
51
|
-
@client.http.use_ssl?.must_equal(true)
|
52
|
-
end
|
53
|
-
|
54
|
-
it 'uses the address from the api_host option' do
|
55
|
-
api_host = 'api.eu.mailgun.net'
|
56
|
-
|
57
|
-
@client = Mailgunner::Client.new(api_key: @api_key, api_host: api_host)
|
58
|
-
|
59
|
-
@client.http.address.must_equal(api_host)
|
60
|
-
end
|
61
|
-
end
|
62
|
-
|
63
|
-
describe 'domain method' do
|
64
|
-
it 'returns the value passed to the constructor' do
|
65
|
-
@client.domain.must_equal(@domain)
|
66
|
-
end
|
67
|
-
|
68
|
-
it 'defaults to the domain in the MAILGUN_SMTP_LOGIN environment variable' do
|
69
|
-
ENV['MAILGUN_SMTP_LOGIN'] = 'postmaster@samples.mailgun.org'
|
70
|
-
|
71
|
-
Mailgunner::Client.new(api_key: @api_key).domain.must_equal(@domain)
|
72
|
-
|
73
|
-
ENV.delete('MAILGUN_SMTP_LOGIN')
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
describe 'api_key method' do
|
78
|
-
it 'returns the value passed to the constructor' do
|
79
|
-
@client.api_key.must_equal(@api_key)
|
80
|
-
end
|
81
|
-
|
82
|
-
it 'defaults to the value of MAILGUN_API_KEY environment variable' do
|
83
|
-
ENV['MAILGUN_API_KEY'] = @api_key
|
84
|
-
|
85
|
-
Mailgunner::Client.new(domain: @domain).api_key.must_equal(@api_key)
|
86
|
-
|
87
|
-
ENV.delete('MAILGUN_API_KEY')
|
88
|
-
end
|
89
|
-
end
|
90
|
-
|
91
|
-
describe 'validate_address method' do
|
92
|
-
it 'calls the address validate resource with the given email address and returns the response object' do
|
93
|
-
stub(:get, "#@base_url/address/validate?address=#@encoded_address")
|
94
|
-
|
95
|
-
@client.validate_address(@address).must_equal(@json_response_object)
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
describe 'parse_addresses method' do
|
100
|
-
it 'calls the address parse resource with the given email addresses and returns the response object' do
|
101
|
-
stub(:get, "#@base_url/address/parse?addresses=bob%40example.com%2Ceve%40example.com")
|
102
|
-
|
103
|
-
@client.parse_addresses(['bob@example.com', 'eve@example.com']).must_equal(@json_response_object)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
|
-
describe 'get_message method' do
|
108
|
-
it 'fetches the domain message resource with the given id and returns the response object' do
|
109
|
-
stub(:get, "#@base_url/domains/#@domain/messages/#@id")
|
110
|
-
|
111
|
-
@client.get_message(@id).must_equal(@json_response_object)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
describe 'get_mime_message method' do
|
116
|
-
it 'fetches the domain message resource with the given key and returns the response object' do
|
117
|
-
stub(:get, "#@base_url/domains/#@domain/messages/#@id", headers: {'Accept' => 'message/rfc2822'})
|
118
|
-
|
119
|
-
@client.get_mime_message(@id).must_equal(@json_response_object)
|
120
|
-
end
|
121
|
-
end
|
122
|
-
|
123
|
-
describe 'send_message method' do
|
124
|
-
it 'posts to the domain messages resource and returns the response object' do
|
125
|
-
stub(:post, "#@base_url/#@domain/messages", body: "to=#@encoded_address")
|
126
|
-
|
127
|
-
@client.send_message({to: @address}).must_equal(@json_response_object)
|
128
|
-
end
|
129
|
-
|
130
|
-
it 'raises an exception if the domain is not provided' do
|
131
|
-
@client = Mailgunner::Client.new(api_key: @api_key)
|
132
|
-
|
133
|
-
exception = proc { @client.send_message({}) }.must_raise(Mailgunner::Error)
|
134
|
-
exception.message.must_include('No domain provided')
|
135
|
-
end
|
136
|
-
|
137
|
-
it 'encodes the message attributes as multipart form data when sending attachments' do
|
138
|
-
# TODO
|
139
|
-
end
|
140
|
-
end
|
141
|
-
|
142
|
-
describe 'send_mime method' do
|
143
|
-
before do
|
144
|
-
@mail = Mail.new({
|
145
|
-
to: 'alice@example.com',
|
146
|
-
from: 'bob@example.com',
|
147
|
-
subject: 'Test email',
|
148
|
-
body: 'This is a test email'
|
149
|
-
})
|
150
|
-
end
|
151
|
-
|
152
|
-
it 'posts to the domain messages resource and returns the response object' do
|
153
|
-
stub(:post, "#@base_url/#@domain/messages.mime")
|
154
|
-
|
155
|
-
@client.send_mime(@mail).must_equal(@json_response_object)
|
156
|
-
end
|
157
|
-
|
158
|
-
it 'includes all recipients of the message' do
|
159
|
-
@mail.cc = 'carol@example.com'
|
160
|
-
@mail.bcc = 'dave@example.com'
|
161
|
-
|
162
|
-
stub(:post, "#@base_url/#@domain/messages.mime")
|
163
|
-
|
164
|
-
recipients = 'alice@example.com,carol@example.com,dave@example.com'
|
165
|
-
|
166
|
-
Net::HTTP::Post.any_instance.expects(:set_form).with(includes(['to', recipients]), 'multipart/form-data')
|
167
|
-
|
168
|
-
@client.send_mime(@mail)
|
169
|
-
end
|
170
|
-
end
|
171
|
-
|
172
|
-
describe 'delete_message method' do
|
173
|
-
it 'deletes the domain message resource with the given key and returns the response object' do
|
174
|
-
stub(:delete, "#@base_url/domains/#@domain/messages/#@id")
|
175
|
-
|
176
|
-
@client.delete_message(@id).must_equal(@json_response_object)
|
177
|
-
end
|
178
|
-
end
|
179
|
-
|
180
|
-
describe 'get_domains method' do
|
181
|
-
it 'fetches the domains resource and returns the response object' do
|
182
|
-
stub(:get, "#@base_url/domains")
|
183
|
-
|
184
|
-
@client.get_domains.must_equal(@json_response_object)
|
185
|
-
end
|
186
|
-
end
|
187
|
-
|
188
|
-
describe 'get_domain method' do
|
189
|
-
it 'fetches the domain resource and returns the response object' do
|
190
|
-
stub(:get, "#@base_url/domains/#@domain")
|
191
|
-
|
192
|
-
@client.get_domain(@domain).must_equal(@json_response_object)
|
193
|
-
end
|
194
|
-
end
|
195
|
-
|
196
|
-
describe 'add_domain method' do
|
197
|
-
it 'posts to the domains resource and returns the response object' do
|
198
|
-
stub(:post, "#@base_url/domains", body: "name=#@domain")
|
199
|
-
|
200
|
-
@client.add_domain({name: @domain}).must_equal(@json_response_object)
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
describe 'delete_domain method' do
|
205
|
-
it 'deletes the domain resource with the given name and returns the response object' do
|
206
|
-
stub(:delete, "#@base_url/domains/#@domain")
|
207
|
-
|
208
|
-
@client.delete_domain(@domain).must_equal(@json_response_object)
|
209
|
-
end
|
210
|
-
end
|
211
|
-
|
212
|
-
describe 'get_credentials method' do
|
213
|
-
it 'fetches the domain credentials resource and returns the response object' do
|
214
|
-
stub(:get, "#@base_url/domains/#@domain/credentials")
|
215
|
-
|
216
|
-
@client.get_credentials.must_equal(@json_response_object)
|
217
|
-
end
|
218
|
-
end
|
219
|
-
|
220
|
-
describe 'add_credentials method' do
|
221
|
-
it 'posts to the domain credentials resource and returns the response object' do
|
222
|
-
stub(:post, "#@base_url/domains/#@domain/credentials", body: "login=#@login")
|
223
|
-
|
224
|
-
@client.add_credentials(login: @login).must_equal(@json_response_object)
|
225
|
-
end
|
226
|
-
end
|
227
|
-
|
228
|
-
describe 'update_credentials method' do
|
229
|
-
it 'updates the domain credentials resource with the given login and returns the response object' do
|
230
|
-
stub(:put, "#@base_url/domains/#@domain/credentials/#@login", body: 'password=secret')
|
231
|
-
|
232
|
-
@client.update_credentials(@login, {password: 'secret'}).must_equal(@json_response_object)
|
233
|
-
end
|
234
|
-
end
|
235
|
-
|
236
|
-
describe 'delete_credentials method' do
|
237
|
-
it 'deletes the domain credentials resource with the given login and returns the response object' do
|
238
|
-
stub(:delete, "#@base_url/domains/#@domain/credentials/#@login")
|
239
|
-
|
240
|
-
@client.delete_credentials(@login).must_equal(@json_response_object)
|
241
|
-
end
|
242
|
-
end
|
243
|
-
|
244
|
-
describe 'get_connection_settings method' do
|
245
|
-
it 'fetches the domain connection settings resource and returns the response object' do
|
246
|
-
stub(:get, "#@base_url/domains/#@domain/connection")
|
247
|
-
|
248
|
-
@client.get_connection_settings.must_equal(@json_response_object)
|
249
|
-
end
|
250
|
-
end
|
251
|
-
|
252
|
-
describe 'update_connection_settings method' do
|
253
|
-
it 'updates the domain connection settings resource and returns the response object' do
|
254
|
-
stub(:put, "#@base_url/domains/#@domain/connection", body: 'require_tls=true')
|
255
|
-
|
256
|
-
@client.update_connection_settings({require_tls: true}).must_equal(@json_response_object)
|
257
|
-
end
|
258
|
-
end
|
259
|
-
|
260
|
-
describe 'get_unsubscribes method' do
|
261
|
-
it 'fetches the domain unsubscribes resource and returns the response object' do
|
262
|
-
stub(:get, "#@base_url/#@domain/unsubscribes")
|
263
|
-
|
264
|
-
@client.get_unsubscribes.must_equal(@json_response_object)
|
265
|
-
end
|
266
|
-
|
267
|
-
it 'encodes skip and limit parameters' do
|
268
|
-
stub(:get, "#@base_url/#@domain/unsubscribes?skip=1&limit=2")
|
269
|
-
|
270
|
-
@client.get_unsubscribes(skip: 1, limit: 2)
|
271
|
-
end
|
272
|
-
end
|
273
|
-
|
274
|
-
describe 'get_unsubscribe method' do
|
275
|
-
it 'fetches the unsubscribe resource with the given address and returns the response object' do
|
276
|
-
stub(:get, "#@base_url/#@domain/unsubscribes/#@encoded_address")
|
277
|
-
|
278
|
-
@client.get_unsubscribe(@address).must_equal(@json_response_object)
|
279
|
-
end
|
280
|
-
end
|
281
|
-
|
282
|
-
describe 'delete_unsubscribe method' do
|
283
|
-
it 'deletes the domain unsubscribe resource with the given address and returns the response object' do
|
284
|
-
stub(:delete, "#@base_url/#@domain/unsubscribes/#@encoded_address")
|
285
|
-
|
286
|
-
@client.delete_unsubscribe(@address).must_equal(@json_response_object)
|
287
|
-
end
|
288
|
-
end
|
289
|
-
|
290
|
-
describe 'add_unsubscribe method' do
|
291
|
-
it 'posts to the domain unsubscribes resource and returns the response object' do
|
292
|
-
stub(:post, "#@base_url/#@domain/unsubscribes", body: "address=#@encoded_address")
|
293
|
-
|
294
|
-
@client.add_unsubscribe({address: @address}).must_equal(@json_response_object)
|
295
|
-
end
|
296
|
-
end
|
297
|
-
|
298
|
-
describe 'get_complaints method' do
|
299
|
-
it 'fetches the domain complaints resource and returns the response object' do
|
300
|
-
stub(:get, "#@base_url/#@domain/complaints")
|
301
|
-
|
302
|
-
@client.get_complaints.must_equal(@json_response_object)
|
303
|
-
end
|
304
|
-
|
305
|
-
it 'encodes skip and limit parameters' do
|
306
|
-
stub(:get, "#@base_url/#@domain/complaints?skip=1&limit=2")
|
307
|
-
|
308
|
-
@client.get_complaints(skip: 1, limit: 2)
|
309
|
-
end
|
310
|
-
end
|
311
|
-
|
312
|
-
describe 'get_complaint method' do
|
313
|
-
it 'fetches the complaint resource with the given address and returns the response object' do
|
314
|
-
stub(:get, "#@base_url/#@domain/complaints/#@encoded_address")
|
315
|
-
|
316
|
-
@client.get_complaint(@address).must_equal(@json_response_object)
|
317
|
-
end
|
318
|
-
end
|
319
|
-
|
320
|
-
describe 'add_complaint method' do
|
321
|
-
it 'posts to the domain complaints resource and returns the response object' do
|
322
|
-
stub(:post, "#@base_url/#@domain/complaints", body: "address=#@encoded_address")
|
323
|
-
|
324
|
-
@client.add_complaint({address: @address}).must_equal(@json_response_object)
|
325
|
-
end
|
326
|
-
end
|
327
|
-
|
328
|
-
describe 'delete_complaint method' do
|
329
|
-
it 'deletes the domain complaint resource with the given address and returns the response object' do
|
330
|
-
stub(:delete, "#@base_url/#@domain/complaints/#@encoded_address")
|
331
|
-
|
332
|
-
@client.delete_complaint(@address).must_equal(@json_response_object)
|
333
|
-
end
|
334
|
-
end
|
335
|
-
|
336
|
-
describe 'get_bounces method' do
|
337
|
-
it 'fetches the domain bounces resource and returns the response object' do
|
338
|
-
stub(:get, "#@base_url/#@domain/bounces")
|
339
|
-
|
340
|
-
@client.get_bounces.must_equal(@json_response_object)
|
341
|
-
end
|
342
|
-
|
343
|
-
it 'encodes skip and limit parameters' do
|
344
|
-
stub(:get, "#@base_url/#@domain/bounces?skip=1&limit=2")
|
345
|
-
|
346
|
-
@client.get_bounces(skip: 1, limit: 2)
|
347
|
-
end
|
348
|
-
end
|
349
|
-
|
350
|
-
describe 'get_bounce method' do
|
351
|
-
it 'fetches the bounce resource with the given address and returns the response object' do
|
352
|
-
stub(:get, "#@base_url/#@domain/bounces/#@encoded_address")
|
353
|
-
|
354
|
-
@client.get_bounce(@address).must_equal(@json_response_object)
|
355
|
-
end
|
356
|
-
end
|
357
|
-
|
358
|
-
describe 'add_bounce method' do
|
359
|
-
it 'posts to the domain bounces resource and returns the response object' do
|
360
|
-
stub(:post, "#@base_url/#@domain/bounces", body: "address=#@encoded_address")
|
361
|
-
|
362
|
-
@client.add_bounce({address: @address}).must_equal(@json_response_object)
|
363
|
-
end
|
364
|
-
end
|
365
|
-
|
366
|
-
describe 'delete_bounce method' do
|
367
|
-
it 'deletes the domain bounce resource with the given address and returns the response object' do
|
368
|
-
stub(:delete, "#@base_url/#@domain/bounces/#@encoded_address")
|
369
|
-
|
370
|
-
@client.delete_bounce(@address).must_equal(@json_response_object)
|
371
|
-
end
|
372
|
-
end
|
373
|
-
|
374
|
-
describe 'delete_bounces method' do
|
375
|
-
it 'deletes the domain bounces resource and returns the response object' do
|
376
|
-
stub(:delete, "#@base_url/#@domain/bounces")
|
377
|
-
|
378
|
-
@client.delete_bounces.must_equal(@json_response_object)
|
379
|
-
end
|
380
|
-
end
|
381
|
-
|
382
|
-
describe 'get_stats method' do
|
383
|
-
before do
|
384
|
-
Kernel.stubs(:warn)
|
385
|
-
end
|
386
|
-
|
387
|
-
it 'fetches the domain stats resource and returns the response object' do
|
388
|
-
stub(:get, "#@base_url/#@domain/stats")
|
389
|
-
|
390
|
-
@client.get_stats.must_equal(@json_response_object)
|
391
|
-
end
|
392
|
-
|
393
|
-
it 'encodes skip and limit parameters' do
|
394
|
-
stub(:get, "#@base_url/#@domain/stats?skip=1&limit=2")
|
395
|
-
|
396
|
-
@client.get_stats(skip: 1, limit: 2)
|
397
|
-
end
|
398
|
-
|
399
|
-
it 'encodes an event parameter with multiple values' do
|
400
|
-
WebMock::Config.instance.query_values_notation = :flat_array
|
401
|
-
|
402
|
-
stub(:get, "#@base_url/#@domain/stats?event=opened&event=sent")
|
403
|
-
|
404
|
-
@client.get_stats(event: %w(sent opened))
|
405
|
-
|
406
|
-
WebMock::Config.instance.query_values_notation = nil
|
407
|
-
end
|
408
|
-
|
409
|
-
it 'emits a deprecation warning' do
|
410
|
-
stub(:get, "#@base_url/#@domain/stats")
|
411
|
-
|
412
|
-
Kernel.expects(:warn).with(regexp_matches(/Mailgunner::Client#get_stats is deprecated/))
|
413
|
-
|
414
|
-
@client.get_stats
|
415
|
-
end
|
416
|
-
end
|
417
|
-
|
418
|
-
describe 'get_total_stats method' do
|
419
|
-
it 'fetches the domain total stats resource and returns the response object' do
|
420
|
-
stub(:get, "#@base_url/#@domain/stats/total?event=delivered")
|
421
|
-
|
422
|
-
@client.get_total_stats(event: 'delivered').must_equal(@json_response_object)
|
423
|
-
end
|
424
|
-
|
425
|
-
it 'encodes optional parameters' do
|
426
|
-
stub(:get, "#@base_url/#@domain/stats/total?event=delivered&resolution=hour")
|
427
|
-
|
428
|
-
@client.get_total_stats(event: 'delivered', resolution: 'hour')
|
429
|
-
end
|
430
|
-
|
431
|
-
it 'encodes an event parameter with multiple values' do
|
432
|
-
WebMock::Config.instance.query_values_notation = :flat_array
|
433
|
-
|
434
|
-
stub(:get, "#@base_url/#@domain/stats/total?event=delivered&event=accepted")
|
435
|
-
|
436
|
-
@client.get_total_stats(event: %w(accepted delivered))
|
437
|
-
|
438
|
-
WebMock::Config.instance.query_values_notation = nil
|
439
|
-
end
|
440
|
-
end
|
441
|
-
|
442
|
-
describe 'get_events method' do
|
443
|
-
it 'fetches the domain events resource and returns the response object' do
|
444
|
-
stub(:get, "#@base_url/#@domain/events")
|
445
|
-
|
446
|
-
@client.get_events.must_equal(@json_response_object)
|
447
|
-
end
|
448
|
-
|
449
|
-
it 'encodes optional parameters' do
|
450
|
-
stub(:get, "#@base_url/#@domain/events?event=accepted&limit=10")
|
451
|
-
|
452
|
-
@client.get_events(event: 'accepted', limit: 10)
|
453
|
-
end
|
454
|
-
end
|
455
|
-
|
456
|
-
describe 'get_tags method' do
|
457
|
-
it 'fetches the domain tags resource and returns the response object' do
|
458
|
-
stub(:get, "#@base_url/#@domain/tags")
|
459
|
-
|
460
|
-
@client.get_tags.must_equal(@json_response_object)
|
461
|
-
end
|
462
|
-
|
463
|
-
it 'encodes optional limit parameter' do
|
464
|
-
stub(:get, "#@base_url/#@domain/tags?limit=2")
|
465
|
-
|
466
|
-
@client.get_tags(limit: 2)
|
467
|
-
end
|
468
|
-
end
|
469
|
-
|
470
|
-
describe 'get_tag method' do
|
471
|
-
it 'fetches the domain tag resource with the given id and returns the response object' do
|
472
|
-
stub(:get, "#@base_url/#@domain/tags/#@id")
|
473
|
-
|
474
|
-
@client.get_tag(@id).must_equal(@json_response_object)
|
475
|
-
end
|
476
|
-
end
|
477
|
-
|
478
|
-
describe 'update_tag method' do
|
479
|
-
it 'updates the domain tag resource with the given id and returns the response object' do
|
480
|
-
stub(:put, "#@base_url/#@domain/tags/#@id", body: 'description=Tag+description')
|
481
|
-
|
482
|
-
@client.update_tag(@id, {description: 'Tag description'}).must_equal(@json_response_object)
|
483
|
-
end
|
484
|
-
end
|
485
|
-
|
486
|
-
describe 'get_tag_stats method' do
|
487
|
-
it 'fetches the domain tag stats resource with the given id and returns the response object' do
|
488
|
-
stub(:get, "#@base_url/#@domain/tags/#@id/stats?event=accepted")
|
489
|
-
|
490
|
-
@client.get_tag_stats(@id, event: 'accepted').must_equal(@json_response_object)
|
491
|
-
end
|
492
|
-
end
|
493
|
-
|
494
|
-
describe 'delete_tag method' do
|
495
|
-
it 'deletes the domain tag resource with the given id and returns the response object' do
|
496
|
-
stub(:delete, "#@base_url/#@domain/tags/#@id")
|
497
|
-
|
498
|
-
@client.delete_tag(@id).must_equal(@json_response_object)
|
499
|
-
end
|
500
|
-
end
|
501
|
-
|
502
|
-
describe 'get_routes method' do
|
503
|
-
it 'fetches the routes resource and returns the response object' do
|
504
|
-
stub(:get, "#@base_url/routes")
|
505
|
-
|
506
|
-
@client.get_routes.must_equal(@json_response_object)
|
507
|
-
end
|
508
|
-
|
509
|
-
it 'encodes skip and limit parameters' do
|
510
|
-
stub(:get, "#@base_url/routes?skip=1&limit=2")
|
511
|
-
|
512
|
-
@client.get_routes(skip: 1, limit: 2)
|
513
|
-
end
|
514
|
-
end
|
515
|
-
|
516
|
-
describe 'get_route method' do
|
517
|
-
it 'fetches the route resource with the given id and returns the response object' do
|
518
|
-
stub(:get, "#@base_url/routes/#@id")
|
519
|
-
|
520
|
-
@client.get_route(@id).must_equal(@json_response_object)
|
521
|
-
end
|
522
|
-
end
|
523
|
-
|
524
|
-
describe 'add_route method' do
|
525
|
-
it 'posts to the routes resource and returns the response object' do
|
526
|
-
stub(:post, "#@base_url/routes", body: 'description=Example+route&priority=1')
|
527
|
-
|
528
|
-
@client.add_route({description: 'Example route', priority: 1}).must_equal(@json_response_object)
|
529
|
-
end
|
530
|
-
end
|
531
|
-
|
532
|
-
describe 'update_route method' do
|
533
|
-
it 'updates the route resource with the given id and returns the response object' do
|
534
|
-
stub(:put, "#@base_url/routes/#@id", body: 'priority=10')
|
535
|
-
|
536
|
-
@client.update_route(@id, {priority: 10}).must_equal(@json_response_object)
|
537
|
-
end
|
538
|
-
end
|
539
|
-
|
540
|
-
describe 'delete_route method' do
|
541
|
-
it 'deletes the route resource with the given id and returns the response object' do
|
542
|
-
stub(:delete, "#@base_url/routes/#@id")
|
543
|
-
|
544
|
-
@client.delete_route(@id).must_equal(@json_response_object)
|
545
|
-
end
|
546
|
-
end
|
547
|
-
|
548
|
-
describe 'get_webhooks method' do
|
549
|
-
it 'fetches the domain webhooks resource and returns the response object' do
|
550
|
-
stub(:get, "#@base_url/domains/#@domain/webhooks")
|
551
|
-
|
552
|
-
@client.get_webhooks.must_equal(@json_response_object)
|
553
|
-
end
|
554
|
-
end
|
555
|
-
|
556
|
-
describe 'get_webhook method' do
|
557
|
-
it 'fetches the domain webhook resource with the given id and returns the response object' do
|
558
|
-
stub(:get, "#@base_url/domains/#@domain/webhooks/#@id")
|
559
|
-
|
560
|
-
@client.get_webhook(@id).must_equal(@json_response_object)
|
561
|
-
end
|
562
|
-
end
|
563
|
-
|
564
|
-
describe 'add_webhook method' do
|
565
|
-
it 'posts to the domain webhooks resource and returns the response object' do
|
566
|
-
attributes = {id: @id, url: 'http://example.com/webhook'}
|
567
|
-
|
568
|
-
stub(:post, "#@base_url/domains/#@domain/webhooks", body: attributes)
|
569
|
-
|
570
|
-
@client.add_webhook(attributes).must_equal(@json_response_object)
|
571
|
-
end
|
572
|
-
end
|
573
|
-
|
574
|
-
describe 'update_webhook method' do
|
575
|
-
it 'updates the domain webhook resource with the given id and returns the response object' do
|
576
|
-
attributes = {url: 'http://example.com/webhook'}
|
577
|
-
|
578
|
-
stub(:put, "#@base_url/domains/#@domain/webhooks/#@id", body: attributes)
|
579
|
-
|
580
|
-
@client.update_webhook(@id, attributes).must_equal(@json_response_object)
|
581
|
-
end
|
582
|
-
end
|
583
|
-
|
584
|
-
describe 'delete_webhook method' do
|
585
|
-
it 'deletes the domain webhook resource with the given address and returns the response object' do
|
586
|
-
stub(:delete, "#@base_url/domains/#@domain/webhooks/#@id")
|
587
|
-
|
588
|
-
@client.delete_webhook(@id).must_equal(@json_response_object)
|
589
|
-
end
|
590
|
-
end
|
591
|
-
|
592
|
-
describe 'get_all_ips method' do
|
593
|
-
it 'fetches the ips resource and returns the response object' do
|
594
|
-
stub(:get, "#@base_url/ips")
|
595
|
-
|
596
|
-
@client.get_all_ips.must_equal(@json_response_object)
|
597
|
-
end
|
598
|
-
end
|
599
|
-
|
600
|
-
describe 'get_ip method' do
|
601
|
-
it 'fetches the ip resource with the given address and returns the response object' do
|
602
|
-
address = '127.0.0.1'
|
603
|
-
|
604
|
-
stub(:get, "#@base_url/ips/#{address}")
|
605
|
-
|
606
|
-
@client.get_ip(address).must_equal(@json_response_object)
|
607
|
-
end
|
608
|
-
end
|
609
|
-
|
610
|
-
describe 'get_ips method' do
|
611
|
-
it 'fetches the domain ips resource and returns the response object' do
|
612
|
-
stub(:get, "#@base_url/domains/#@domain/ips")
|
613
|
-
|
614
|
-
@client.get_ips.must_equal(@json_response_object)
|
615
|
-
end
|
616
|
-
end
|
617
|
-
|
618
|
-
describe 'add_ip method' do
|
619
|
-
it 'posts to the domain ips resource and returns the response object' do
|
620
|
-
address = '127.0.0.1'
|
621
|
-
|
622
|
-
stub(:post, "#@base_url/domains/#@domain/ips", body: {ip: address})
|
623
|
-
|
624
|
-
@client.add_ip(address).must_equal(@json_response_object)
|
625
|
-
end
|
626
|
-
end
|
627
|
-
|
628
|
-
describe 'delete_ip method' do
|
629
|
-
it 'deletes the domain ip resource with the given address and returns the response object' do
|
630
|
-
address = '127.0.0.1'
|
631
|
-
|
632
|
-
stub(:delete, "#@base_url/domains/#@domain/ips/#{address}")
|
633
|
-
|
634
|
-
@client.delete_ip(address).must_equal(@json_response_object)
|
635
|
-
end
|
636
|
-
end
|
637
|
-
|
638
|
-
describe 'get_lists method' do
|
639
|
-
it 'fetches the lists resource and returns the response object' do
|
640
|
-
stub(:get, "#@base_url/lists")
|
641
|
-
|
642
|
-
@client.get_lists.must_equal(@json_response_object)
|
643
|
-
end
|
644
|
-
|
645
|
-
it 'encodes skip and limit parameters' do
|
646
|
-
stub(:get, "#@base_url/lists?skip=1&limit=2")
|
647
|
-
|
648
|
-
@client.get_lists(skip: 1, limit: 2)
|
649
|
-
end
|
650
|
-
end
|
651
|
-
|
652
|
-
describe 'get_list method' do
|
653
|
-
it 'fetches the list resource with the given address and returns the response object' do
|
654
|
-
stub(:get, "#@base_url/lists/developers%40mailgun.net")
|
655
|
-
|
656
|
-
@client.get_list('developers@mailgun.net').must_equal(@json_response_object)
|
657
|
-
end
|
658
|
-
end
|
659
|
-
|
660
|
-
describe 'add_list method' do
|
661
|
-
it 'posts to the lists resource and returns the response object' do
|
662
|
-
stub(:post, "#@base_url/lists", body: 'address=developers%40mailgun.net')
|
663
|
-
|
664
|
-
@client.add_list({address: 'developers@mailgun.net'}).must_equal(@json_response_object)
|
665
|
-
end
|
666
|
-
end
|
667
|
-
|
668
|
-
describe 'update_list method' do
|
669
|
-
it 'updates the list resource and returns the response object' do
|
670
|
-
stub(:put, "#@base_url/lists/developers%40mailgun.net", body: 'name=Example+list')
|
671
|
-
|
672
|
-
@client.update_list('developers@mailgun.net', {name: 'Example list'}).must_equal(@json_response_object)
|
673
|
-
end
|
674
|
-
end
|
675
|
-
|
676
|
-
describe 'delete_list method' do
|
677
|
-
it 'deletes the list resource with the given address and returns the response object' do
|
678
|
-
stub(:delete, "#@base_url/lists/developers%40mailgun.net")
|
679
|
-
|
680
|
-
@client.delete_list('developers@mailgun.net').must_equal(@json_response_object)
|
681
|
-
end
|
682
|
-
end
|
683
|
-
|
684
|
-
describe 'get_list_members method' do
|
685
|
-
it 'fetches the list members resource and returns the response object' do
|
686
|
-
stub(:get, "#@base_url/lists/developers%40mailgun.net/members")
|
687
|
-
|
688
|
-
@client.get_list_members('developers@mailgun.net').must_equal(@json_response_object)
|
689
|
-
end
|
690
|
-
|
691
|
-
it 'encodes skip and limit parameters' do
|
692
|
-
stub(:get, "#@base_url/lists/developers%40mailgun.net/members?skip=1&limit=2")
|
693
|
-
|
694
|
-
@client.get_list_members('developers@mailgun.net', skip: 1, limit: 2)
|
695
|
-
end
|
696
|
-
end
|
697
|
-
|
698
|
-
describe 'get_list_member method' do
|
699
|
-
it 'fetches the list member resource with the given address and returns the response object' do
|
700
|
-
stub(:get, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address")
|
701
|
-
|
702
|
-
@client.get_list_member('developers@mailgun.net', @address).must_equal(@json_response_object)
|
703
|
-
end
|
704
|
-
end
|
705
|
-
|
706
|
-
describe 'add_list_member method' do
|
707
|
-
it 'posts to the list members resource and returns the response object' do
|
708
|
-
stub(:post, "#@base_url/lists/developers%40mailgun.net/members", body: "address=#@encoded_address")
|
709
|
-
|
710
|
-
@client.add_list_member('developers@mailgun.net', {address: @address}).must_equal(@json_response_object)
|
711
|
-
end
|
712
|
-
end
|
713
|
-
|
714
|
-
describe 'update_list_member method' do
|
715
|
-
it 'updates the list member resource with the given address and returns the response object' do
|
716
|
-
stub(:put, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address", body: 'subscribed=no')
|
717
|
-
|
718
|
-
@client.update_list_member('developers@mailgun.net', @address, {subscribed: 'no'}).must_equal(@json_response_object)
|
719
|
-
end
|
720
|
-
end
|
721
|
-
|
722
|
-
describe 'delete_list_member method' do
|
723
|
-
it 'deletes the list member resource with the given address and returns the response object' do
|
724
|
-
stub(:delete, "#@base_url/lists/developers%40mailgun.net/members/#@encoded_address")
|
725
|
-
|
726
|
-
@client.delete_list_member('developers@mailgun.net', @address).must_equal(@json_response_object)
|
727
|
-
end
|
728
|
-
end
|
729
|
-
|
730
|
-
it 'raises an exception for authentication errors' do
|
731
|
-
stub_request(:any, /api\.mailgun\.net/).to_return(status: 401)
|
732
|
-
|
733
|
-
proc { @client.get_message(@id) }.must_raise(Mailgunner::AuthenticationError)
|
734
|
-
end
|
735
|
-
|
736
|
-
it 'raises an exception for client errors' do
|
737
|
-
stub_request(:any, /api\.mailgun\.net/).to_return(status: 400)
|
738
|
-
|
739
|
-
proc { @client.get_message(@id) }.must_raise(Mailgunner::ClientError)
|
740
|
-
end
|
741
|
-
|
742
|
-
it 'raises an exception for server errors' do
|
743
|
-
stub_request(:any, /api\.mailgun\.net/).to_return(status: 500)
|
744
|
-
|
745
|
-
proc { @client.get_message(@id) }.must_raise(Mailgunner::ServerError)
|
746
|
-
end
|
747
|
-
end
|