mailgunner 2.6.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE.txt +1 -1
- data/README.md +12 -30
- data/lib/mailgunner.rb +13 -0
- data/lib/mailgunner/client.rb +19 -48
- data/lib/mailgunner/client/domains.rb +19 -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 +1 -0
- 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 +6 -4
- metadata +38 -10
- data/spec/mailgunner_delivery_method_spec.rb +0 -37
- data/spec/mailgunner_spec.rb +0 -747
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
module Mailgunner
|
4
4
|
class Client
|
5
|
-
def get_tags(params =
|
6
|
-
get("/v3/#{escape @domain}/tags", params)
|
5
|
+
def get_tags(params = PARAMS)
|
6
|
+
get("/v3/#{escape @domain}/tags", query: params)
|
7
7
|
end
|
8
8
|
|
9
9
|
def get_tag(id)
|
@@ -15,7 +15,7 @@ module Mailgunner
|
|
15
15
|
end
|
16
16
|
|
17
17
|
def get_tag_stats(id, params)
|
18
|
-
get("/v3/#{escape @domain}/tags/#{escape id}/stats", params)
|
18
|
+
get("/v3/#{escape @domain}/tags/#{escape id}/stats", query: params)
|
19
19
|
end
|
20
20
|
|
21
21
|
def delete_tag(id)
|
@@ -10,11 +10,11 @@ module Mailgunner
|
|
10
10
|
get("/v3/domains/#{escape @domain}/webhooks/#{escape id}")
|
11
11
|
end
|
12
12
|
|
13
|
-
def add_webhook(attributes =
|
13
|
+
def add_webhook(attributes = ATTRIBUTES)
|
14
14
|
post("/v3/domains/#{escape @domain}/webhooks", attributes)
|
15
15
|
end
|
16
16
|
|
17
|
-
def update_webhook(id, attributes =
|
17
|
+
def update_webhook(id, attributes = ATTRIBUTES)
|
18
18
|
put("/v3/domains/#{escape @domain}/webhooks/#{escape id}", attributes)
|
19
19
|
end
|
20
20
|
|
@@ -0,0 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Mailgunner
|
4
|
+
class Config
|
5
|
+
def domain
|
6
|
+
@domain ||= default_domain
|
7
|
+
end
|
8
|
+
|
9
|
+
attr_writer :domain
|
10
|
+
|
11
|
+
def api_key
|
12
|
+
@api_key ||= ENV.fetch('MAILGUN_API_KEY')
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_writer :api_key
|
16
|
+
|
17
|
+
def api_host
|
18
|
+
@api_host ||= 'api.mailgun.net'
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_writer :api_host
|
22
|
+
|
23
|
+
def user_agent
|
24
|
+
@user_agent ||= "Ruby/#{RUBY_VERSION} Mailgunner/#{VERSION}"
|
25
|
+
end
|
26
|
+
|
27
|
+
attr_writer :user_agent
|
28
|
+
|
29
|
+
module NoDomainProvided
|
30
|
+
def self.to_s
|
31
|
+
raise Error, 'No domain provided'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
private_constant :NoDomainProvided
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def default_domain
|
40
|
+
return NoDomainProvided unless ENV.key?('MAILGUN_SMTP_LOGIN')
|
41
|
+
|
42
|
+
ENV['MAILGUN_SMTP_LOGIN'].to_s.split('@').last
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
data/lib/mailgunner/errors.rb
CHANGED
@@ -1,15 +1,33 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Mailgunner
|
2
|
-
class Error < StandardError
|
4
|
+
class Error < StandardError
|
5
|
+
# @private
|
6
|
+
def self.parse(response)
|
7
|
+
exception_class = case response
|
8
|
+
when Net::HTTPUnauthorized
|
9
|
+
AuthenticationError
|
10
|
+
when Net::HTTPClientError
|
11
|
+
ClientError
|
12
|
+
when Net::HTTPServerError
|
13
|
+
ServerError
|
14
|
+
else
|
15
|
+
Error
|
16
|
+
end
|
17
|
+
|
18
|
+
message = if response['Content-Type']&.start_with?('application/json')
|
19
|
+
JSON.parse(response.body)['message']
|
20
|
+
end
|
21
|
+
|
22
|
+
message ||= "HTTP #{response.code} response from Mailgun API"
|
23
|
+
|
24
|
+
exception_class.new(message)
|
25
|
+
end
|
26
|
+
end
|
3
27
|
|
4
28
|
class ClientError < Error; end
|
5
29
|
|
6
30
|
class AuthenticationError < ClientError; end
|
7
31
|
|
8
32
|
class ServerError < Error; end
|
9
|
-
|
10
|
-
module NoDomainProvided
|
11
|
-
def self.to_s
|
12
|
-
raise Error, 'No domain provided'
|
13
|
-
end
|
14
|
-
end
|
15
33
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require 'cgi'
|
3
|
+
|
4
|
+
module Mailgunner
|
5
|
+
module Params
|
6
|
+
def self.encode(params)
|
7
|
+
params.flat_map { |k, vs| Array(vs).map { |v| "#{escape(k)}=#{escape(v)}" } }.join('&')
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.escape(component)
|
11
|
+
CGI.escape(component.to_s)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
private_constant :Params
|
16
|
+
end
|
data/lib/mailgunner/railtie.rb
CHANGED
@@ -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,12 +7,14 @@ 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', '
|
13
|
+
s.files = Dir.glob('lib/**/*.rb') + %w(LICENSE.txt README.md mailgunner.gemspec)
|
14
|
+
s.required_ruby_version = '>= 2.5.0'
|
15
|
+
s.add_development_dependency('rake', '~> 12')
|
16
|
+
s.add_development_dependency('yard', '~> 0.9')
|
17
|
+
s.add_development_dependency('redcarpet', '~> 3') unless RUBY_PLATFORM == 'java'
|
16
18
|
s.add_development_dependency('webmock', '~> 3')
|
17
19
|
s.add_development_dependency('mail', '~> 2')
|
18
20
|
s.add_development_dependency('actionmailer', '~> 5')
|
metadata
CHANGED
@@ -1,29 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailgunner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Craft
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '12'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '12'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: yard
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.9'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.9'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: redcarpet
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '3'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '3'
|
27
55
|
- !ruby/object:Gem::Dependency
|
28
56
|
name: webmock
|
29
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -102,14 +130,15 @@ files:
|
|
102
130
|
- lib/mailgunner/client/suppressions.rb
|
103
131
|
- lib/mailgunner/client/tags.rb
|
104
132
|
- lib/mailgunner/client/webhooks.rb
|
133
|
+
- lib/mailgunner/config.rb
|
105
134
|
- lib/mailgunner/delivery_method.rb
|
106
135
|
- lib/mailgunner/errors.rb
|
136
|
+
- lib/mailgunner/params.rb
|
107
137
|
- lib/mailgunner/railtie.rb
|
138
|
+
- lib/mailgunner/struct.rb
|
108
139
|
- lib/mailgunner/version.rb
|
109
140
|
- mailgunner.gemspec
|
110
|
-
|
111
|
-
- spec/mailgunner_spec.rb
|
112
|
-
homepage: http://github.com/readysteady/mailgunner
|
141
|
+
homepage: https://github.com/readysteady/mailgunner
|
113
142
|
licenses:
|
114
143
|
- LGPL-3.0
|
115
144
|
metadata:
|
@@ -125,15 +154,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
125
154
|
requirements:
|
126
155
|
- - ">="
|
127
156
|
- !ruby/object:Gem::Version
|
128
|
-
version:
|
157
|
+
version: 2.5.0
|
129
158
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
159
|
requirements:
|
131
160
|
- - ">="
|
132
161
|
- !ruby/object:Gem::Version
|
133
162
|
version: '0'
|
134
163
|
requirements: []
|
135
|
-
|
136
|
-
rubygems_version: 2.7.6
|
164
|
+
rubygems_version: 3.0.3
|
137
165
|
signing_key:
|
138
166
|
specification_version: 4
|
139
167
|
summary: Ruby client for the Mailgun API
|
@@ -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
|