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.
@@ -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
+
@@ -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