sparkpost_rails_eu 1.5.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.
- checksums.yaml +7 -0
- data/LICENSE +22 -0
- data/README.md +230 -0
- data/lib/sparkpost_rails.rb +64 -0
- data/lib/sparkpost_rails/data_options.rb +25 -0
- data/lib/sparkpost_rails/delivery_method.rb +402 -0
- data/lib/sparkpost_rails/exceptions.rb +17 -0
- data/lib/sparkpost_rails/railtie.rb +15 -0
- data/lib/sparkpost_rails/version.rb +4 -0
- data/spec/attachments_spec.rb +56 -0
- data/spec/bcc_recipients_spec.rb +102 -0
- data/spec/campaign_id_spec.rb +64 -0
- data/spec/cc_recipients_spec.rb +119 -0
- data/spec/click_tracking_spec.rb +54 -0
- data/spec/configuration_spec.rb +12 -0
- data/spec/delivery_schedule_spec.rb +46 -0
- data/spec/description_spec.rb +39 -0
- data/spec/exceptions_spec.rb +65 -0
- data/spec/from_spec.rb +24 -0
- data/spec/headers_spec.rb +33 -0
- data/spec/inline_content_spec.rb +63 -0
- data/spec/inline_css_spec.rb +49 -0
- data/spec/ip_pool_spec.rb +50 -0
- data/spec/metadata_spec.rb +44 -0
- data/spec/open_tracking_spec.rb +54 -0
- data/spec/recipient_specific_data_spec.rb +30 -0
- data/spec/recipients_list_spec.rb +34 -0
- data/spec/recipients_spec.rb +62 -0
- data/spec/reply_to_spec.rb +25 -0
- data/spec/response_spec.rb +26 -0
- data/spec/return_path_spec.rb +50 -0
- data/spec/sandbox_mode_spec.rb +53 -0
- data/spec/skip_suppression_spec.rb +27 -0
- data/spec/spec_helper.rb +91 -0
- data/spec/subaccount_api_spec.rb +75 -0
- data/spec/substitution_data_spec.rb +40 -0
- data/spec/template_spec.rb +36 -0
- data/spec/transactional_spec.rb +50 -0
- metadata +161 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SparkPostRails::DeliveryMethod do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@delivery_method = SparkPostRails::DeliveryMethod.new
|
7
|
+
end
|
8
|
+
|
9
|
+
context "Recipient Data" do
|
10
|
+
|
11
|
+
it "accepts data matching all recipients" do
|
12
|
+
recipients = ['recipient1@email.com', 'recipient2@email.com']
|
13
|
+
recipients_data = [
|
14
|
+
{substitution_data: {name: "Recipient1"}},
|
15
|
+
{substitution_data: {name: "Recipient2"}}
|
16
|
+
]
|
17
|
+
|
18
|
+
test_email = Mailer.test_email to: recipients, sparkpost_data: {recipients: recipients_data}
|
19
|
+
|
20
|
+
@delivery_method.deliver!(test_email)
|
21
|
+
|
22
|
+
actual_recipients = @delivery_method.data[:recipients]
|
23
|
+
expect(actual_recipients.length).to eq(recipients.length)
|
24
|
+
expect(actual_recipients).to match(recipients.each_with_index.map { |recipient, index| recipients_data[index].merge(address: {email: recipient, header_to: anything}) })
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SparkPostRails::DeliveryMethod do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@delivery_method = SparkPostRails::DeliveryMethod.new
|
7
|
+
end
|
8
|
+
|
9
|
+
context "Recipients List" do
|
10
|
+
|
11
|
+
it "handles a list_id" do
|
12
|
+
test_email = Mailer.test_email sparkpost_data: {recipient_list_id: "List1"}
|
13
|
+
@delivery_method.deliver!(test_email)
|
14
|
+
|
15
|
+
expect(@delivery_method.data[:recipients]).to eq({list_id: "List1"})
|
16
|
+
end
|
17
|
+
|
18
|
+
it "ignores any CC addresses" do
|
19
|
+
test_email = Mailer.test_email cc: "cc@example.com", sparkpost_data: {recipient_list_id: "List1"}
|
20
|
+
@delivery_method.deliver!(test_email)
|
21
|
+
|
22
|
+
expect(@delivery_method.data[:recipients]).to eq({list_id: "List1"})
|
23
|
+
expect(@delivery_method.data[:content].has_key?(:headers)).to eq(false)
|
24
|
+
end
|
25
|
+
|
26
|
+
it "ignores any BCC addresses" do
|
27
|
+
test_email = Mailer.test_email bcc: "cc@example.com", sparkpost_data: {recipient_list_id: "List1"}
|
28
|
+
@delivery_method.deliver!(test_email)
|
29
|
+
|
30
|
+
expect(@delivery_method.data[:recipients]).to eq({list_id: "List1"})
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SparkPostRails::DeliveryMethod do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@delivery_method = SparkPostRails::DeliveryMethod.new
|
7
|
+
end
|
8
|
+
|
9
|
+
context "Recipients" do
|
10
|
+
|
11
|
+
context "single recipient" do
|
12
|
+
it "handles email only" do
|
13
|
+
test_email = Mailer.test_email
|
14
|
+
@delivery_method.deliver!(test_email)
|
15
|
+
|
16
|
+
expect(@delivery_method.data[:recipients]).to match([a_hash_including({address: {email: "to@example.com", header_to: anything}})])
|
17
|
+
end
|
18
|
+
|
19
|
+
it "handles name and email" do
|
20
|
+
test_email = Mailer.test_email to: "Joe Test <to@example.com>"
|
21
|
+
@delivery_method.deliver!(test_email)
|
22
|
+
|
23
|
+
expect(@delivery_method.data[:recipients]).to match([a_hash_including({address: {email: "to@example.com", name: "Joe Test", header_to: anything}})])
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "multiple recipients" do
|
28
|
+
it "handles email only" do
|
29
|
+
test_email = Mailer.test_email to: "to1@example.com, to2@example.com"
|
30
|
+
@delivery_method.deliver!(test_email)
|
31
|
+
|
32
|
+
expect(@delivery_method.data[:recipients]).to match([a_hash_including({address: {email: "to1@example.com", header_to: anything}}),
|
33
|
+
a_hash_including({address: {email: "to2@example.com", header_to: anything}})])
|
34
|
+
end
|
35
|
+
|
36
|
+
it "handles name and email" do
|
37
|
+
test_email = Mailer.test_email to: "Sam Test <to1@example.com>, Joe Test <to2@example.com>"
|
38
|
+
@delivery_method.deliver!(test_email)
|
39
|
+
|
40
|
+
expect(@delivery_method.data[:recipients]).to match([a_hash_including({:address=>{:email=>"to1@example.com", :name=>"Sam Test", header_to: anything}}),
|
41
|
+
a_hash_including({:address=>{:email=>"to2@example.com", :name=>"Joe Test", header_to: anything}})])
|
42
|
+
end
|
43
|
+
|
44
|
+
it "handles mix of email only and name/email" do
|
45
|
+
test_email = Mailer.test_email to: "Sam Test <to1@example.com>, to2@example.com"
|
46
|
+
@delivery_method.deliver!(test_email)
|
47
|
+
|
48
|
+
expect(@delivery_method.data[:recipients]).to match_array([a_hash_including({:address=>{:email=>"to1@example.com", :name=>"Sam Test", header_to: anything}}),
|
49
|
+
a_hash_including({:address=>{:email=>"to2@example.com", header_to: anything}})])
|
50
|
+
end
|
51
|
+
|
52
|
+
it "compiles list of email addresses to populate :header_to for each recipient" do
|
53
|
+
expected_header_to = "a@a.com,b@b.com"
|
54
|
+
test_email = Mailer.test_email to: "a <a@a.com>, b@b.com"
|
55
|
+
@delivery_method.deliver!(test_email)
|
56
|
+
|
57
|
+
expect(@delivery_method.data[:recipients].first[:address][:header_to]).to eql(expected_header_to)
|
58
|
+
expect(@delivery_method.data[:recipients].second[:address][:header_to]).to eql(expected_header_to)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SparkPostRails::DeliveryMethod do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@delivery_method = SparkPostRails::DeliveryMethod.new
|
7
|
+
end
|
8
|
+
|
9
|
+
context "Reply To" do
|
10
|
+
it "handles supplied value" do
|
11
|
+
test_email = Mailer.test_email reply_to: "reply_to@example.com"
|
12
|
+
@delivery_method.deliver!(test_email)
|
13
|
+
|
14
|
+
expect(@delivery_method.data[:content][:reply_to]).to eq("reply_to@example.com")
|
15
|
+
end
|
16
|
+
|
17
|
+
it "handles no value supplied" do
|
18
|
+
test_email = Mailer.test_email
|
19
|
+
@delivery_method.deliver!(test_email)
|
20
|
+
|
21
|
+
expect(@delivery_method.data[:content].has_key?(:reply_to)).to eq(false)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SparkPostRails::DeliveryMethod do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@delivery_method = SparkPostRails::DeliveryMethod.new
|
7
|
+
end
|
8
|
+
|
9
|
+
context "API Response Handling" do
|
10
|
+
it "returns result data on success" do
|
11
|
+
test_email = Mailer.test_email
|
12
|
+
response = @delivery_method.deliver!(test_email)
|
13
|
+
|
14
|
+
expect(response).to eq({"total_rejected_recipients"=>0, "total_accepted_recipients"=>1, "id"=>"00000000000000000"})
|
15
|
+
end
|
16
|
+
|
17
|
+
it "raises exception on error" do
|
18
|
+
stub_request(:any, "https://api.sparkpost.com/api/v1/transmissions").
|
19
|
+
to_return(body: "{\"errors\":[{\"message\":\"required field is missing\",\"description\":\"recipients or list_id required\",\"code\":\"1400\"}]}", status: 403)
|
20
|
+
|
21
|
+
test_email = Mailer.test_email
|
22
|
+
|
23
|
+
expect {@delivery_method.deliver!(test_email)}.to raise_exception(SparkPostRails::DeliveryException)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SparkPostRails::DeliveryMethod do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
SparkPostRails.configuration.set_defaults
|
7
|
+
@delivery_method = SparkPostRails::DeliveryMethod.new
|
8
|
+
end
|
9
|
+
|
10
|
+
context "Return Path" do
|
11
|
+
it "handles return path set in the configuration" do
|
12
|
+
SparkPostRails.configure do |c|
|
13
|
+
c.return_path = "BOUNCE-EMAIL@EXAMPLE.COM"
|
14
|
+
end
|
15
|
+
|
16
|
+
test_email = Mailer.test_email
|
17
|
+
@delivery_method.deliver!(test_email)
|
18
|
+
|
19
|
+
expect(@delivery_method.data[:return_path]).to eq('BOUNCE-EMAIL@EXAMPLE.COM')
|
20
|
+
end
|
21
|
+
|
22
|
+
it "handles return path on an individual message" do
|
23
|
+
test_email = Mailer.test_email return_path: "bounce@example.com"
|
24
|
+
|
25
|
+
@delivery_method.deliver!(test_email)
|
26
|
+
|
27
|
+
expect(@delivery_method.data[:return_path]).to eq('bounce@example.com')
|
28
|
+
end
|
29
|
+
|
30
|
+
it "handles the value on an individual message overriding configuration" do
|
31
|
+
SparkPostRails.configure do |c|
|
32
|
+
c.return_path = "BOUNCE-EMAIL@EXAMPLE.COM"
|
33
|
+
end
|
34
|
+
|
35
|
+
test_email = Mailer.test_email return_path: "bounce@example.com"
|
36
|
+
|
37
|
+
@delivery_method.deliver!(test_email)
|
38
|
+
|
39
|
+
expect(@delivery_method.data[:return_path]).to eq('bounce@example.com')
|
40
|
+
end
|
41
|
+
|
42
|
+
it "handles a default setting of none" do
|
43
|
+
test_email = Mailer.test_email
|
44
|
+
@delivery_method.deliver!(test_email)
|
45
|
+
|
46
|
+
expect(@delivery_method.data.has_key?(:return_path)).to eq(false)
|
47
|
+
end
|
48
|
+
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SparkPostRails::DeliveryMethod do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
SparkPostRails.configuration.set_defaults
|
7
|
+
@delivery_method = SparkPostRails::DeliveryMethod.new
|
8
|
+
end
|
9
|
+
|
10
|
+
context "Sandbox Mode" do
|
11
|
+
it "handles sandbox mode enabled in the configuration" do
|
12
|
+
SparkPostRails.configure do |c|
|
13
|
+
c.sandbox = true
|
14
|
+
end
|
15
|
+
|
16
|
+
test_email = Mailer.test_email
|
17
|
+
|
18
|
+
@delivery_method.deliver!(test_email)
|
19
|
+
|
20
|
+
expect(@delivery_method.data[:options][:sandbox]).to eq(true)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "handles sandbox mode enabled on an individual message" do
|
24
|
+
test_email = Mailer.test_email sparkpost_data: {sandbox: true}
|
25
|
+
|
26
|
+
@delivery_method.deliver!(test_email)
|
27
|
+
|
28
|
+
expect(@delivery_method.data[:options][:sandbox]).to eq(true)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "handles the value on an individual message overriding configuration" do
|
32
|
+
SparkPostRails.configure do |c|
|
33
|
+
c.sandbox = true
|
34
|
+
end
|
35
|
+
|
36
|
+
test_email = Mailer.test_email sparkpost_data: {sandbox: false}
|
37
|
+
|
38
|
+
@delivery_method.deliver!(test_email)
|
39
|
+
|
40
|
+
expect(@delivery_method.data[:options].has_key?(:sandbox)).to eq(false)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "handles a default setting of 'false'" do
|
44
|
+
test_email = Mailer.test_email
|
45
|
+
|
46
|
+
@delivery_method.deliver!(test_email)
|
47
|
+
|
48
|
+
expect(@delivery_method.data[:options].has_key?(:sandbox)).to eq(false)
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SparkPostRails::DeliveryMethod do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
@delivery_method = SparkPostRails::DeliveryMethod.new
|
7
|
+
end
|
8
|
+
|
9
|
+
context "Skip Suppression" do
|
10
|
+
it "handles value from message" do
|
11
|
+
test_email = Mailer.test_email sparkpost_data: {skip_suppression: true}
|
12
|
+
|
13
|
+
@delivery_method.deliver!(test_email)
|
14
|
+
|
15
|
+
expect(@delivery_method.data[:options][:skip_suppression]).to eq(true)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "does not include skip_suppression element if not supplied" do
|
19
|
+
test_email = Mailer.test_email
|
20
|
+
@delivery_method.deliver!(test_email)
|
21
|
+
|
22
|
+
expect(@delivery_method.data[:options].has_key?(:skip_suppression)).to eq(false)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'webmock/rspec'
|
2
|
+
require 'rails'
|
3
|
+
require 'action_mailer'
|
4
|
+
require "sparkpost_rails"
|
5
|
+
|
6
|
+
RSpec.configure do |config|
|
7
|
+
|
8
|
+
config.before(:all) do
|
9
|
+
ActionMailer::Base.send :include, SparkPostRails::DataOptions
|
10
|
+
end
|
11
|
+
|
12
|
+
config.before(:each) do |example|
|
13
|
+
if example.metadata[:skip_configure]
|
14
|
+
SparkPostRails.configuration = nil # Reset configuration
|
15
|
+
else
|
16
|
+
SparkPostRails.configure do |c|
|
17
|
+
c.api_key = "TESTKEY1234"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
stub_request(:any, "https://api.sparkpost.com/api/v1/transmissions").
|
22
|
+
to_return(body: "{\"results\":{\"total_rejected_recipients\":0,\"total_accepted_recipients\":1,\"id\":\"00000000000000000\"}}", status: 200)
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
#A default mailer to generate the mail object
|
28
|
+
class Mailer < ActionMailer::Base
|
29
|
+
def test_email options = {}
|
30
|
+
data = {
|
31
|
+
from: "from@example.com",
|
32
|
+
to: options[:to] || "to@example.com",
|
33
|
+
subject: "Test Email",
|
34
|
+
text_part: "Hello, Testing!"
|
35
|
+
}
|
36
|
+
|
37
|
+
if options.has_key?(:attachments)
|
38
|
+
options[:attachments].times do |i|
|
39
|
+
attachments["file_#{i}.txt"] = "This is file #{i}"
|
40
|
+
end
|
41
|
+
|
42
|
+
options.delete(:attachments)
|
43
|
+
end
|
44
|
+
|
45
|
+
if options.has_key?(:images)
|
46
|
+
options[:images].times do |i|
|
47
|
+
attachments["image_#{i}.png"] = sparkpost_logo_contents
|
48
|
+
end
|
49
|
+
|
50
|
+
options.delete(:images)
|
51
|
+
end
|
52
|
+
|
53
|
+
if options.has_key?(:inline_attachments)
|
54
|
+
options[:inline_attachments].times do |i|
|
55
|
+
attachments.inline["image_#{i}.png"] = sparkpost_logo_contents
|
56
|
+
end
|
57
|
+
|
58
|
+
options.delete(:inline_attachments)
|
59
|
+
end
|
60
|
+
|
61
|
+
if options.has_key?(:headers)
|
62
|
+
if options[:headers].class == Hash
|
63
|
+
headers options[:headers]
|
64
|
+
end
|
65
|
+
|
66
|
+
options.delete(:headers)
|
67
|
+
end
|
68
|
+
|
69
|
+
data.merge! options
|
70
|
+
|
71
|
+
if data.has_key?(:html_part)
|
72
|
+
|
73
|
+
mail(data) do |format|
|
74
|
+
format.text {render text: data[:text_part]}
|
75
|
+
format.html {render text: data[:html_part]}
|
76
|
+
end
|
77
|
+
|
78
|
+
else
|
79
|
+
|
80
|
+
mail(data) do |format|
|
81
|
+
format.text {render text: data[:text_part]}
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def sparkpost_logo_contents
|
88
|
+
encoded_contents = "iVBORw0KGgoAAAANSUhEUgAAAfIAAACCCAMAAACKGrqXAAAAY1BMVEX////6\nZCNVVVr6ZCP6ZCNVVVr6ZCNVVVr6ZCP6ZCNVVVpVVVr6ZCNVVVpVVVr6ZCNV\nVVpVVVr6ZCNVVVpVVVpVVVpVVVr6ZCP6ZCNVVVr6ZCP6ZCP6ZCP6ZCNVVVpV\nVVr6ZCO+CfRXAAAAH3RSTlMAgMBAEPBgoDAg4NBwkIDAUBDwQLBgMOCgIFCQ\n0LBwPgQxPgAADDFJREFUeF7s2kGLnEAYhOFqbERhSROHZFzXWer//8rAJo17\n2jklhK73OXsrKItP9Q/hmBQGZ1EWLD6roqB4W5QEdbNnJUFxWOaoTssce1rm\nOGznbTia3VtVDJy27aYYePjDi1KgOLPaidy7whC5V4Uh8l1hiNxVEdDcvSgC\nTnenIsCXVQEw+TIrBOstarPjtKNe5lj9mbLQ6/ak4eEeFjkOf+ai0aGFRY7J\nYZGjhUWOyWGRo4VFjsNhkeMeFjmKsyLHurnLuL7h4dTI2W4Zv8Wg3t1drHHh\nzV3iLxLc3bqmLNS6i6JQ6/asKNS6vSgKtW5raNQ6641a95uGRa2z3qj1rPXG\nbb3TiFA3+9l6WzQQPOwn662ehyJQ6z7+JO6qBNR6/1jefNc4sNtP1luJuMhw\nhLnW2+qIyDnCXOutBUTOEaYrvQY2DQKLvzT1d72rxoD2NPLqD4eGgNlfux7Z\nNTQurd11mts0NLZbJ2nz/9Hs328/vv32fnvV3/N6u/zUaH61d4bLjatIFLZJ\nCL4owsKScEgm8n3/p9zazexi6yC6Wz2pqbo752diLBUfNN3QtP/6m9LdZ85t\nHkv40jB+B4fUd7cHmVB/Tm+2FQJnrPjbnYjPz6apPsyJ17RGx61fn/FcF5Yx\nynw3RP5OX1QanX/A4d0Q18iMSI8dFRd/q8i6CnVza8u7oU1xeGgQ2sjDjda0\nZLppjfjtUV3kPrfrk2DfDRMkjlQx17nKY4VjvIn00Hi22wDnCMhJ+VAaUWPG\nKpAXTaMc+bwe4EnyXL9E7iTHNKi39n3EwW/hMOMvQR7bEO0CxGjZ7cmbVw1m\nDfIik4TI0xpiEj7XLsJJXmb2uXVvJbryCPMfPUDPeuTJkgN6BOS0uoKAMKc6\n5EVBhDxbGHrQ2IW1jDEWuh8mOaHLc0GOv5oWu5+47xbvOPYdLoU5VOTKi6+U\n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\nYII=\n"
|
89
|
+
Base64.decode64(encoded_contents)
|
90
|
+
end
|
91
|
+
end
|
@@ -0,0 +1,75 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe SparkPostRails::DeliveryMethod do
|
4
|
+
|
5
|
+
before(:each) do
|
6
|
+
SparkPostRails.configuration.set_defaults
|
7
|
+
@delivery_method = SparkPostRails::DeliveryMethod.new
|
8
|
+
end
|
9
|
+
|
10
|
+
context "Message-Specific API Key" do
|
11
|
+
it "uses supplied API key instead of default" do
|
12
|
+
SparkPostRails.configure do |c|
|
13
|
+
c.api_key = 'NEW_DEFAULT_API_KEY'
|
14
|
+
end
|
15
|
+
|
16
|
+
test_email = Mailer.test_email sparkpost_data: {api_key: 'SUBACCOUNT_API_KEY'}
|
17
|
+
@delivery_method.deliver!(test_email)
|
18
|
+
|
19
|
+
expect(@delivery_method.headers).to include("Authorization" => "SUBACCOUNT_API_KEY")
|
20
|
+
end
|
21
|
+
|
22
|
+
it "uses default API if no message-specific API key applied" do
|
23
|
+
SparkPostRails.configure do |c|
|
24
|
+
c.api_key = 'NEW_DEFAULT_API_KEY'
|
25
|
+
end
|
26
|
+
|
27
|
+
test_email = Mailer.test_email
|
28
|
+
@delivery_method.deliver!(test_email)
|
29
|
+
|
30
|
+
expect(@delivery_method.headers).to include("Authorization" => "NEW_DEFAULT_API_KEY")
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "Subaccount ID" do
|
35
|
+
it "accepts a subaccount ID in the configuration" do
|
36
|
+
SparkPostRails.configure do |c|
|
37
|
+
c.subaccount = 123
|
38
|
+
end
|
39
|
+
|
40
|
+
test_email = Mailer.test_email
|
41
|
+
@delivery_method.deliver!(test_email)
|
42
|
+
|
43
|
+
expect(@delivery_method.headers).to include("X-MSYS-SUBACCOUNT" => "123")
|
44
|
+
end
|
45
|
+
|
46
|
+
it "defaults to no subaccount ID in the configuration" do
|
47
|
+
expect(SparkPostRails.configuration.subaccount).to eq(nil)
|
48
|
+
end
|
49
|
+
|
50
|
+
it "accepts subaccount ID for an individual message" do
|
51
|
+
test_email = Mailer.test_email sparkpost_data: {subaccount: 456}
|
52
|
+
@delivery_method.deliver!(test_email)
|
53
|
+
|
54
|
+
expect(@delivery_method.headers).to include("X-MSYS-SUBACCOUNT" => "456")
|
55
|
+
end
|
56
|
+
|
57
|
+
it "uses subaccount ID on message instead of value in configuration" do
|
58
|
+
SparkPostRails.configure do |c|
|
59
|
+
c.subaccount = 123
|
60
|
+
end
|
61
|
+
|
62
|
+
test_email = Mailer.test_email sparkpost_data: {subaccount: 456}
|
63
|
+
@delivery_method.deliver!(test_email)
|
64
|
+
|
65
|
+
expect(@delivery_method.headers).to include("X-MSYS-SUBACCOUNT" => "456")
|
66
|
+
end
|
67
|
+
|
68
|
+
it "does not include the subaccount header when none is specified" do
|
69
|
+
test_email = Mailer.test_email
|
70
|
+
@delivery_method.deliver!(test_email)
|
71
|
+
|
72
|
+
expect(@delivery_method.headers.has_key?("X-MSYS-SUBACCOUNT")).to eq(false)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|