mailjet 0.0.1

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.
@@ -0,0 +1,13 @@
1
+ require 'mailjet/api'
2
+
3
+ module Mailjet
4
+ class TemplateModel < OpenStruct
5
+ class << self
6
+ def all(options = {})
7
+ (options.delete(:api) || Mailjet::Api.singleton).messageTplmodels(options)["templates"].map do |result_hash|
8
+ self.new(result_hash)
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ module Mailjet
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,72 @@
1
+ # encoding: utf-8
2
+
3
+ require 'minitest_helper'
4
+
5
+ describe Mailjet::ApiRequest do
6
+
7
+ describe "#request_path" do
8
+ it "should return the path of the method" do
9
+ Mailjet::ApiRequest.new('method_name').send(:request_path).must_equal '/0.1/methodName?output=json'
10
+ end
11
+
12
+ it "should respect api_version" do
13
+ Mailjet.config.expects(:api_version).returns(0.2)
14
+ Mailjet::ApiRequest.new('method_name').send(:request_path).must_equal '/0.2/methodName?output=json'
15
+ end
16
+ end
17
+
18
+ describe "#request_port" do
19
+ it "should return 80 if use_https is false" do
20
+ Mailjet.config.use_https = false
21
+ Mailjet::ApiRequest.new('method_name').send(:request_port).must_equal 80
22
+ end
23
+
24
+ it "should return 443 if use_https is true" do
25
+ Mailjet.config.use_https = true
26
+ Mailjet::ApiRequest.new('method_name').send(:request_port).must_equal 443
27
+ end
28
+ end
29
+
30
+ describe "#request" do
31
+ it "should return an Http request" do
32
+ request = Mailjet::ApiRequest.new('method_name', {}, 'Post')
33
+ request.send(:request).must_be_kind_of(Net::HTTP::Post)
34
+
35
+ request = Mailjet::ApiRequest.new('method_name', {}, 'Get')
36
+ request.send(:request).must_be_kind_of(Net::HTTP::Get)
37
+ end
38
+ end
39
+
40
+ describe "#response" do
41
+ it "should raise an ApiError if authentication fails" do
42
+ request = Mailjet::ApiRequest.new('method_name', {}, 'Get')
43
+ lambda {
44
+ request.response
45
+ }.must_raise(Mailjet::ApiError)
46
+ end
47
+
48
+ it "should return a Hash with response values if request is ok" do
49
+ request = Mailjet::ApiRequest.new('user_infos', {}, 'Get')
50
+ response = request.response
51
+ response.must_be_kind_of(Hash)
52
+ response['infos']['username'].must_equal 'benoit.benezech@gmail.com'
53
+ end
54
+ end
55
+
56
+ describe "#guess_request_type" do
57
+ it "should return 'Post' if method_name contains a special verb" do
58
+ Mailjet::ApiRequest.new('lists_add_contact').send(:guess_request_type).must_equal 'Post'
59
+ Mailjet::ApiRequest.new('lists_create').send(:guess_request_type).must_equal 'Post'
60
+ Mailjet::ApiRequest.new('lists_delete').send(:guess_request_type).must_equal 'Post'
61
+ Mailjet::ApiRequest.new('lists_remove_contact').send(:guess_request_type).must_equal 'Post'
62
+ Mailjet::ApiRequest.new('lists_update').send(:guess_request_type).must_equal 'Post'
63
+ end
64
+
65
+ it "should return 'Get' if method_name does not contain a verb" do
66
+ Mailjet::ApiRequest.new('key_list').send(:guess_request_type).must_equal 'Get'
67
+ Mailjet::ApiRequest.new('contact_list').send(:guess_request_type).must_equal 'Get'
68
+ Mailjet::ApiRequest.new('lists_all').send(:guess_request_type).must_equal 'Get'
69
+ Mailjet::ApiRequest.new('lists_email').send(:guess_request_type).must_equal 'Get'
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,13 @@
1
+ # encoding: utf-8
2
+ require 'minitest_helper'
3
+
4
+ describe Mailjet::Api do
5
+ describe "#method_missing" do
6
+ it "should create an ApiRequest" do
7
+
8
+ request = mock(:response => true)
9
+ Mailjet::ApiRequest.expects(:new).with(:user_infos ,{:param1 => 1}, 'Post', Mailjet.config.api_key, Mailjet.config.secret_key).returns(request)
10
+ Mailjet::Api.new.user_infos({:param1 => 1}, 'Post')
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,62 @@
1
+ require 'minitest_helper'
2
+
3
+ describe Mailjet::Campaign do
4
+ it 'has an integration suite, tested directly against Mailjet service' do
5
+
6
+ # init
7
+ Mailjet::List.all.each do |list|
8
+ list.delete
9
+ end
10
+ list = Mailjet::List.create(:label => 'My Mailjet list', :name => "mymailjetlist")
11
+ list.add_contacts("c1@contacts.com", "c2@contacts.com")
12
+
13
+ # Mailjet::Campaign.create
14
+ campaign = Mailjet::Campaign.create(
15
+ :title => "My Mailjet Campaign",
16
+ :list_id => list.id,
17
+ :from => Mailjet.config.default_from, # must be valid
18
+ :from_name => "Sender Name",
19
+ :subject => "Our new product",
20
+ :template_id => Mailjet::TemplateModel.all.first.id,
21
+ :lang => "en",
22
+ :footer => "default"
23
+ )
24
+ campaign.url.must_match /^https\:\/\/www\.mailjet\.com\/campaigns\/template\/[0-9]+$/
25
+
26
+ # Mailjet::Campaign.all
27
+ campaigns = Mailjet::Campaign.all
28
+ campaigns.wont_be_empty # we can't empty the whole campaign list...
29
+ campaigns.first.must_be_instance_of Mailjet::Campaign
30
+
31
+ # Mailjet::Campaign.find
32
+ Mailjet::Campaign.find(campaign.id).must_be_instance_of Mailjet::Campaign
33
+ Mailjet::Campaign.find(0).must_be_nil
34
+
35
+ # Mailjet::Campaign#update
36
+ campaign.update(:title => "My *new* Mailjet Campaign")
37
+
38
+ # Mailjet::Campaign#duplicate
39
+ dup = campaign.duplicate(:title => "My *new* Mailjet Campaign")
40
+ dup.must_be_instance_of Mailjet::Campaign
41
+ dup.id.wont_be_same_as campaign.id
42
+
43
+ # Mailjet::Campaign#send!
44
+ campaign.send!.must_equal 'OK'
45
+ # TODO does not work, 500 server side.
46
+
47
+ # Mailjet::Campaign#test
48
+ campaign.test('benoit.benezech@gmail.com').must_equal 'OK'
49
+
50
+ # Mailjet::Campaign#html
51
+ campaign.html.must_be_nil
52
+ # TODO how to get content in the campaign template?
53
+
54
+ campaign = Mailjet::Campaign.find(campaign.id)
55
+
56
+ # Mailjet::Campaign#contacts
57
+ campaign.contacts.wont_be_empty
58
+
59
+ # Mailjet::Campaign#statistics
60
+ campaign.statistics.keys.must_include "blocked"
61
+ end
62
+ end
@@ -0,0 +1,16 @@
1
+ require 'minitest_helper'
2
+
3
+ describe Mailjet::Configuration do
4
+ describe "accessors" do
5
+ it "should memorize values" do
6
+ Mailjet::Configuration.api_key = '1234'
7
+ Mailjet::Configuration.api_key.must_equal '1234'
8
+ end
9
+ end
10
+
11
+ describe "#use_https" do
12
+ it "should be true by default" do
13
+ Mailjet::Configuration.use_https.must_equal true
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,24 @@
1
+ require 'minitest_helper'
2
+
3
+ describe Mailjet::Contact do
4
+ it 'has an integration suite, tested directly against Mailjet service' do
5
+ # init
6
+ Mailjet::List.all.each do |list|
7
+ list.delete
8
+ end
9
+ list = Mailjet::List.create(:label => 'My Mailjet list', :name => "mymailjetlist")
10
+ list.add_contacts("c1@contacts.com")
11
+
12
+ # Mailjet::Contact.all
13
+ contacts = Mailjet::Contact.all
14
+ contacts.wont_be_empty # we can't empty the whole contact list...
15
+ contacts.first.must_be_instance_of Mailjet::Contact
16
+
17
+ # Mailjet::Contact.all(:openers => true)
18
+ # Mailjet::Contact.all(:openers => true).must_be_empty
19
+ # TODO :openers does not work, times out
20
+
21
+ # Mailjet::Contact#infos
22
+ contacts.first.infos["click"].wont_be_nil
23
+ end
24
+ end
@@ -0,0 +1,62 @@
1
+ require 'minitest_helper'
2
+
3
+ describe Mailjet::List do
4
+ it 'has an integration suite, tested directly against Mailjet service' do
5
+ # clean-up all existing lists:
6
+ Mailjet::List.all.each do |list|
7
+ list.delete
8
+ end
9
+
10
+ # Mailjet::List.all for no lists
11
+ Mailjet::List.all.must_be_empty
12
+
13
+ # Mailjet::List#create
14
+ list = Mailjet::List.create(:label => 'My Mailjet list', :name => "mymailjetlist")
15
+ list.must_be_instance_of Mailjet::List
16
+ list.label.must_equal 'My Mailjet list'
17
+ list.name.must_equal 'mymailjetlist'
18
+
19
+ # Mailjet::List#update.
20
+ list.update(:label => 'My updated Mailjet list', :name => "myupdatedmailjetlist").must_equal "OK"
21
+ updated_list = Mailjet::List.all.first
22
+ updated_list.label.must_equal 'My updated Mailjet list'
23
+ updated_list.name.must_equal 'myupdatedmailjetlist'
24
+ updated_list.id.must_equal list.id
25
+
26
+ # Mailjet::List.all
27
+ lists = Mailjet::List.all
28
+ lists.count.must_equal 1
29
+ lists.first.must_be_instance_of Mailjet::List
30
+ lists.first.id.must_equal updated_list.id
31
+
32
+ # Mailjet::List#add_contacts
33
+ list.add_contacts.must_equal "NotModified"
34
+ list.add_contacts("c1@contacts.com").must_equal "OK"
35
+ list.add_contacts("c1@contacts.com").must_equal "NotModified"
36
+ list.add_contacts("c2@contacts.com", "c3@contacts.com").must_equal "OK"
37
+ list.add_contacts("c4@contacts.com", "c5@contacts.com").must_equal "OK"
38
+
39
+ # Mailjet::List#contacts and validate results of add_contacts
40
+ contacts = list.contacts
41
+ contacts.first.must_be_instance_of Mailjet::Contact
42
+ contacts.map(&:email).sort.must_equal ["c1@contacts.com", "c2@contacts.com", "c3@contacts.com", "c4@contacts.com", "c5@contacts.com"]
43
+
44
+ # Mailjet::List#remove_contacts
45
+ list.remove_contacts.must_equal "NotModified"
46
+ list.remove_contacts("does-not-exist@nowhere.com").must_equal "NotModified"
47
+ list.remove_contacts("c1@contacts.com", "c2@contacts.com").must_equal "OK"
48
+ list.contacts.count.must_equal 3
49
+
50
+ # Mailjet::List#email
51
+ list.email.must_match /\@lists\.mailjet\.com$/
52
+
53
+ # Mailjet::List#statistics
54
+ list.statistics["sent"].must_equal "0"
55
+
56
+ # Mailjet::List#delete
57
+ list.delete.must_equal 'OK'
58
+ Mailjet::List.all.must_be_empty
59
+ exception = proc { list.delete }.must_raise(Mailjet::ApiError)
60
+ exception.to_s.must_match /This ID not appears to be an active list on your account/
61
+ end
62
+ end
@@ -0,0 +1,30 @@
1
+ require 'minitest_helper'
2
+ require 'rack/mock'
3
+
4
+ SAMPLE_MAILJET_PAYLOAD = "{\"event\":\"open\",\"time\":1331581827,\"email\":\"benoit.benezech+1634@gmail.com\",\"mj_campaign_id\":\"105881975\",\"mj_contact_id\":\"116408391\",\"customcampaign\":null,\"ip\":\"88.164.20.58\",\"geo\":\"FR\",\"agent\":\"Mozilla\\/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit\\/535.11 (KHTML, like Gecko) Chrome\\/17.0.963.79 Safari\\/535.11\"}"
5
+ SAMPLE_MAILJET_PARAMS = {"event"=>"open", "time"=>1331581827, "email"=>"benoit.benezech+1634@gmail.com", "mj_campaign_id"=>"105881975", "mj_contact_id"=>"116408391", "customcampaign"=>nil, "ip"=>"88.164.20.58", "geo"=>"FR", "agent"=>"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_2) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11"}
6
+
7
+
8
+ describe Mailjet::Rack::Endpoint do
9
+ it "should decipher Mailjet's posted events and pass them to the block" do
10
+ # mock should receive :find with "benoit.benezech+1634@gmail.com" and will return true
11
+ $user_class_mock = MiniTest::Mock.new.expect(:find, true, ["benoit.benezech+1634@gmail.com"])
12
+
13
+ app = Rack::Builder.new do
14
+ use Rack::Lint
15
+ use Mailjet::Rack::Endpoint, '/callback' do |params|
16
+ $user_class_mock.find(params['email'])#.do_smtg_with_the_user....
17
+ end
18
+ run lambda { |env|
19
+ [200, {'Content-Type' => 'text/plain'}, ['passed through your endpoint, haha']]
20
+ }
21
+ end
22
+
23
+ response = Rack::MockRequest.new(app).get('/not_callback')
24
+ response.body.must_equal('passed through your endpoint, haha')
25
+
26
+ response = Rack::MockRequest.new(app).post('/callback', :input => SAMPLE_MAILJET_PAYLOAD)
27
+ response.body.must_equal('')
28
+ $user_class_mock.verify
29
+ end
30
+ end
@@ -0,0 +1,26 @@
1
+ require 'minitest_helper'
2
+
3
+ describe Mailjet::Reporting do
4
+ it 'has an integration suite, tested directly against Mailjet service' do
5
+ # Mailjet::Reporting.clicks
6
+ Mailjet::Reporting.clicks.must_be_instance_of Array
7
+
8
+ # Mailjet::Reporting.domains
9
+ Mailjet::Reporting.domains.must_be_instance_of Array
10
+
11
+ # Mailjet::Reporting.clients
12
+ Mailjet::Reporting.clients.must_be_instance_of Array
13
+
14
+ # Mailjet::Reporting.emails
15
+ Mailjet::Reporting.emails.must_be_instance_of Array
16
+
17
+ # Mailjet::Reporting.statistics
18
+ Mailjet::Reporting.statistics["cnt_messages"].wont_be_nil
19
+
20
+ # Mailjet::Reporting.geolocation
21
+ Mailjet::Reporting.geolocation.must_be_instance_of Hash
22
+
23
+ # Mailjet::Reporting.agents
24
+ Mailjet::Reporting.agents.must_be_instance_of Array
25
+ end
26
+ end
@@ -0,0 +1,13 @@
1
+ require 'minitest_helper'
2
+
3
+ describe Mailjet::TemplateCategory do
4
+ it 'has an integration suite, tested directly against Mailjet service' do
5
+
6
+ # Mailjet::TemplateCategory.all
7
+ models = Mailjet::TemplateCategory.all
8
+ models.wont_be_empty
9
+ model = models.find{|m| m.id == "2"} # from default Mailjet templates
10
+ model.must_be_instance_of Mailjet::TemplateCategory
11
+ model.label.must_equal "basic"
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ require 'minitest_helper'
2
+
3
+ describe Mailjet::TemplateModel do
4
+ it 'has an integration suite, tested directly against Mailjet service' do
5
+
6
+ # Mailjet::TemplateModel.all
7
+ models = Mailjet::TemplateModel.all
8
+ models.wont_be_empty
9
+ model = models.find{|t| t.id == '4'} # from default Mailjet templates
10
+ model.must_be_instance_of Mailjet::TemplateModel
11
+ model.name == "Text"
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ require 'minitest_helper'
2
+
3
+ describe Mailjet do
4
+ describe "#configure" do
5
+ it "should permit to set api keys and remember them" do
6
+ Mailjet.configure do |config|
7
+ config.api_key = "1234"
8
+ config.secret_key = "5678"
9
+ config.domain = "domain_test"
10
+ config.default_from = "default from test"
11
+ end
12
+
13
+ Mailjet.config.api_key.must_equal "1234"
14
+ Mailjet.config.secret_key.must_equal "5678"
15
+ Mailjet.config.domain.must_equal "domain_test"
16
+ Mailjet.config.default_from = "default from test"
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,23 @@
1
+ require 'minitest/autorun'
2
+ require 'minitest/matchers'
3
+ require "mocha"
4
+ require 'mailjet'
5
+ require 'turn'
6
+
7
+ test_account = YAML::load(File.new(File.expand_path("../../config.yml", __FILE__)))['mailjet']
8
+
9
+ MiniTest::Spec.before do
10
+ Mailjet.configure do |config|
11
+ config.api_key = test_account['api_key']
12
+ config.secret_key = test_account['secret_key']
13
+ config.domain = test_account['domain']
14
+ config.default_from = test_account['default_from']
15
+ end
16
+ end
17
+
18
+ MiniTest::Spec.after do
19
+ Object.send(:remove_const, 'Mailjet')
20
+ Dir["#{File.dirname(__FILE__)}/../lib/**/*.rb"].each {|f| load f}
21
+ end
22
+
23
+ Turn.config.format = :outline
metadata ADDED
@@ -0,0 +1,198 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mailjet
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.1
6
+ platform: ruby
7
+ authors:
8
+ - "Aur\xC3\xA9lien AMILIN"
9
+ - "Benoit B\xC3\xA9n\xC3\xA9zech"
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+
14
+ date: 2012-03-26 00:00:00 +02:00
15
+ default_executable:
16
+ dependencies:
17
+ - !ruby/object:Gem::Dependency
18
+ name: activesupport
19
+ prerelease: false
20
+ requirement: &id001 !ruby/object:Gem::Requirement
21
+ none: false
22
+ requirements:
23
+ - - ">="
24
+ - !ruby/object:Gem::Version
25
+ version: 3.0.9
26
+ type: :runtime
27
+ version_requirements: *id001
28
+ - !ruby/object:Gem::Dependency
29
+ name: actionmailer
30
+ prerelease: false
31
+ requirement: &id002 !ruby/object:Gem::Requirement
32
+ none: false
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: 3.0.9
37
+ type: :development
38
+ version_requirements: *id002
39
+ - !ruby/object:Gem::Dependency
40
+ name: minitest
41
+ prerelease: false
42
+ requirement: &id003 !ruby/object:Gem::Requirement
43
+ none: false
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: "0"
48
+ type: :development
49
+ version_requirements: *id003
50
+ - !ruby/object:Gem::Dependency
51
+ name: minitest-matchers
52
+ prerelease: false
53
+ requirement: &id004 !ruby/object:Gem::Requirement
54
+ none: false
55
+ requirements:
56
+ - - ">="
57
+ - !ruby/object:Gem::Version
58
+ version: "0"
59
+ type: :development
60
+ version_requirements: *id004
61
+ - !ruby/object:Gem::Dependency
62
+ name: turn
63
+ prerelease: false
64
+ requirement: &id005 !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: "0"
70
+ type: :development
71
+ version_requirements: *id005
72
+ - !ruby/object:Gem::Dependency
73
+ name: rake
74
+ prerelease: false
75
+ requirement: &id006 !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: "0"
81
+ type: :development
82
+ version_requirements: *id006
83
+ - !ruby/object:Gem::Dependency
84
+ name: json
85
+ prerelease: false
86
+ requirement: &id007 !ruby/object:Gem::Requirement
87
+ none: false
88
+ requirements:
89
+ - - ">="
90
+ - !ruby/object:Gem::Version
91
+ version: "0"
92
+ type: :development
93
+ version_requirements: *id007
94
+ - !ruby/object:Gem::Dependency
95
+ name: rack
96
+ prerelease: false
97
+ requirement: &id008 !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: "0"
103
+ type: :development
104
+ version_requirements: *id008
105
+ - !ruby/object:Gem::Dependency
106
+ name: mocha
107
+ prerelease: false
108
+ requirement: &id009 !ruby/object:Gem::Requirement
109
+ none: false
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: "0"
114
+ type: :development
115
+ version_requirements: *id009
116
+ description: Cloud Emailing for easy delivery.
117
+ email:
118
+ - benoit.benezech@gmail.com
119
+ executables: []
120
+
121
+ extensions: []
122
+
123
+ extra_rdoc_files: []
124
+
125
+ files:
126
+ - lib/mailjet/api.rb
127
+ - lib/mailjet/api_error.rb
128
+ - lib/mailjet/api_request.rb
129
+ - lib/mailjet/campaign.rb
130
+ - lib/mailjet/click.rb
131
+ - lib/mailjet/configuration.rb
132
+ - lib/mailjet/contact.rb
133
+ - lib/mailjet/core_extensions/ostruct.rb
134
+ - lib/mailjet/email.rb
135
+ - lib/mailjet/list.rb
136
+ - lib/mailjet/mailer.rb
137
+ - lib/mailjet/rack/endpoint.rb
138
+ - lib/mailjet/reporting.rb
139
+ - lib/mailjet/template_category.rb
140
+ - lib/mailjet/template_model.rb
141
+ - lib/mailjet/version.rb
142
+ - lib/mailjet.rb
143
+ - MIT-LICENSE
144
+ - Rakefile
145
+ - README.md
146
+ - test/mailjet/api_request_test.rb
147
+ - test/mailjet/api_test.rb
148
+ - test/mailjet/campaign_test.rb
149
+ - test/mailjet/configuration_test.rb
150
+ - test/mailjet/contact_test.rb
151
+ - test/mailjet/list_test.rb
152
+ - test/mailjet/rack/endpoint_test.rb
153
+ - test/mailjet/reporting_test.rb
154
+ - test/mailjet/template_category_test.rb
155
+ - test/mailjet/template_model_test.rb
156
+ - test/mailjet_test.rb
157
+ - test/minitest_helper.rb
158
+ has_rdoc: true
159
+ homepage: http://www.mailjet.com
160
+ licenses: []
161
+
162
+ post_install_message:
163
+ rdoc_options: []
164
+
165
+ require_paths:
166
+ - lib
167
+ required_ruby_version: !ruby/object:Gem::Requirement
168
+ none: false
169
+ requirements:
170
+ - - ">="
171
+ - !ruby/object:Gem::Version
172
+ version: "0"
173
+ required_rubygems_version: !ruby/object:Gem::Requirement
174
+ none: false
175
+ requirements:
176
+ - - ">="
177
+ - !ruby/object:Gem::Version
178
+ version: "0"
179
+ requirements: []
180
+
181
+ rubyforge_project:
182
+ rubygems_version: 1.6.2
183
+ signing_key:
184
+ specification_version: 3
185
+ summary: Cloud Emailing for easy delivery.
186
+ test_files:
187
+ - test/mailjet/api_request_test.rb
188
+ - test/mailjet/api_test.rb
189
+ - test/mailjet/campaign_test.rb
190
+ - test/mailjet/configuration_test.rb
191
+ - test/mailjet/contact_test.rb
192
+ - test/mailjet/list_test.rb
193
+ - test/mailjet/rack/endpoint_test.rb
194
+ - test/mailjet/reporting_test.rb
195
+ - test/mailjet/template_category_test.rb
196
+ - test/mailjet/template_model_test.rb
197
+ - test/mailjet_test.rb
198
+ - test/minitest_helper.rb