aws-ses-v4 0.8.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,26 @@
1
+ module AWS
2
+ module SES
3
+ class FakeResponse
4
+ attr_reader :code, :body, :headers
5
+ def initialize(options = {})
6
+ @code = options.delete(:code) || 200
7
+ @body = options.delete(:body) || ''
8
+ @headers = {'content-type' => 'application/xml'}.merge(options.delete(:headers) || {})
9
+ end
10
+
11
+ # For ErrorResponse
12
+ def response
13
+ body
14
+ end
15
+
16
+ def [](header)
17
+ headers[header]
18
+ end
19
+
20
+ def each(&block)
21
+ headers.each(&block)
22
+ end
23
+ alias_method :each_header, :each
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,26 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class BaseResponseTest < Test::Unit::TestCase
4
+ def setup
5
+ @headers = {'content-type' => 'text/plain', 'date' => Time.now}
6
+ @response = FakeResponse.new()
7
+ @base_response = Response.new('ResponseAction', @response)
8
+ end
9
+
10
+ def test_status_predicates
11
+ response = Proc.new {|code| Response.new('ResponseAction', FakeResponse.new(:code => code))}
12
+ assert response[200].success?
13
+ assert response[300].redirect?
14
+ assert response[400].client_error?
15
+ assert response[500].server_error?
16
+ end
17
+
18
+ def test_headers_passed_along_from_original_response
19
+ assert_equal @response.headers, @base_response.headers
20
+ assert_equal @response['date'], @base_response['date']
21
+ original_headers, new_headers = {}, {}
22
+ @response.headers.each {|k,v| original_headers[k] = v}
23
+ @base_response.each {|k,v| new_headers[k] = v}
24
+ assert_equal original_headers, new_headers
25
+ end
26
+ end
@@ -0,0 +1,144 @@
1
+ require File.expand_path('../helper', __FILE__)
2
+
3
+ class SendEmailTest < Test::Unit::TestCase
4
+ context 'when sending email' do
5
+ setup do
6
+ @base = generate_base
7
+ @basic_email = { :from => 'jon@example.com',
8
+ :to => 'dave@example.com',
9
+ :subject => 'Subject1',
10
+ :text_body => 'Body1' }
11
+ end
12
+
13
+ context 'adding to a hash' do
14
+ should 'add array elements to the hash' do
15
+ hash = {}
16
+ ary = ['x', 'y']
17
+ @base.send(:add_array_to_hash!, hash, 'SomeKey', ary)
18
+ expected = {'SomeKey.member.1' => 'x', 'SomeKey.member.2' => 'y'}
19
+ assert_equal expected, hash
20
+ end
21
+
22
+ should 'add singular elements to the hash' do
23
+ hash = {}
24
+ ary = 'z'
25
+ @base.send(:add_array_to_hash!, hash, 'SomeKey', ary)
26
+ expected = {'SomeKey.member.1' => 'z'}
27
+ assert_equal expected, hash
28
+ end
29
+ end
30
+
31
+ should 'send an e-mail' do
32
+ mock_connection(@base, :body => %{
33
+ <SendEmailResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
34
+ <SendEmailResult>
35
+ <MessageId>abc-123</MessageId>
36
+ </SendEmailResult>
37
+ <ResponseMetadata>
38
+ <RequestId>xyz-123</RequestId>
39
+ </ResponseMetadata>
40
+ </SendEmailResponse>
41
+ })
42
+
43
+ result = @base.send_email @basic_email
44
+ assert result.success?
45
+ assert_equal 'abc-123', result.message_id
46
+ assert_equal 'xyz-123', result.request_id
47
+ end
48
+
49
+ should 'throw ArgumentException when attachment supplied without a body' do
50
+ #mock_connection(@base, :body => %{
51
+ # <SendRawEmailResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
52
+ # <SendRawEmailResult>
53
+ # <MessageId>abc-123</MessageId>
54
+ # </SendRawEmailResult>
55
+ # <ResponseMetadata>
56
+ # <RequestId>xyz-123</RequestId>
57
+ # </ResponseMetadata>
58
+ # </SendRawEmailResponse>
59
+ #})
60
+ message = Mail.new({:from => 'jon@example.com', :to => 'dave@example.com', :subject => 'Subject1'})
61
+ message.attachments['foo'] = { :mime_type => 'application/csv', :content => '1,2,3' }
62
+ assert_raise ArgumentError do
63
+ result = @base.send_raw_email message
64
+ end
65
+ end
66
+
67
+ should 'send a raw e-mail with a hash object' do
68
+ mock_connection(@base, :body => %{
69
+ <SendRawEmailResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
70
+ <SendRawEmailResult>
71
+ <MessageId>abc-123</MessageId>
72
+ </SendRawEmailResult>
73
+ <ResponseMetadata>
74
+ <RequestId>xyz-123</RequestId>
75
+ </ResponseMetadata>
76
+ </SendRawEmailResponse>
77
+ })
78
+
79
+ result = @base.send_raw_email(@basic_email)
80
+ assert result.success?
81
+ assert_equal 'abc-123', result.message_id
82
+ assert_equal 'xyz-123', result.request_id
83
+ end
84
+
85
+ should 'send a raw e-mail with a mail object' do
86
+ mock_connection(@base, :body => %{
87
+ <SendRawEmailResponse xmlns="http://ses.amazonaws.com/doc/2010-12-01/">
88
+ <SendRawEmailResult>
89
+ <MessageId>abc-123</MessageId>
90
+ </SendRawEmailResult>
91
+ <ResponseMetadata>
92
+ <RequestId>xyz-123</RequestId>
93
+ </ResponseMetadata>
94
+ </SendRawEmailResponse>
95
+ })
96
+
97
+ message = Mail.new(@basic_email)
98
+ result = @base.send_raw_email(message)
99
+ assert result.success?
100
+ assert_equal 'abc-123', result.message_id
101
+ assert_equal 'xyz-123', result.request_id
102
+ assert message.errors.empty?
103
+ assert_equal 'abc-123@email.amazonses.com', message.message_id
104
+ end
105
+
106
+ context "with a standard email" do
107
+ setup do
108
+ @message = Mail.new({:from => 'jon@example.com', :to => 'dave@example.com', :cc => 'sally@example.com', :subject => 'Subject1', :body => "test body"})
109
+ end
110
+
111
+ should "add the 2 addresses to the Destinations" do
112
+ package = @base.send("build_raw_email", @message)
113
+ assert_equal 'dave@example.com', package['Destinations.member.1']
114
+ assert_equal 'sally@example.com', package['Destinations.member.2']
115
+ end
116
+
117
+ should "be able to override the e-mail destinations" do
118
+ dest_options = {:to => "another@example.com", :cc => "bob@example.com" }
119
+ package = @base.send("build_raw_email", @message, dest_options)
120
+ assert_equal 'another@example.com', package['Destinations.member.1']
121
+ assert_equal 'bob@example.com', package['Destinations.member.2']
122
+ end
123
+ end
124
+
125
+ should "add the bcc address to the email destinations" do
126
+ message = Mail.new({:from => 'jon@example.com', :bcc => "robin@example.com", :to => 'dave@example.com', :subject => 'Subject1', :body => "test body"})
127
+ package = @base.send("build_raw_email", message)
128
+ assert_equal 'dave@example.com', package['Destinations.member.1']
129
+ assert_equal 'robin@example.com', package['Destinations.member.2']
130
+ end
131
+
132
+ should "when only bcc address in the email" do
133
+ message = Mail.new({:from => 'jon@example.com', :bcc => ["robin@example.com", 'dave@example.com'], :subject => 'Subject1', :body => "test body"})
134
+ package = @base.send("build_raw_email", message)
135
+ assert_equal 'robin@example.com', package['Destinations.member.1']
136
+ assert_equal 'dave@example.com', package['Destinations.member.2']
137
+ end
138
+
139
+ should "add the mail addresses to the email destination" do
140
+ message = Mail.new({:from => 'jon@example.com', :to => ["robin@example.com", 'dave@example.com'], :subject => 'Subject1', :body => "test body"})
141
+
142
+ end
143
+ end
144
+ end
metadata ADDED
@@ -0,0 +1,231 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aws-ses-v4
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.8.1
5
+ platform: ruby
6
+ authors:
7
+ - Drew Blas
8
+ - Marcel Molina Jr.
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2021-04-10 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: builder
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: '0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: mail
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">"
33
+ - !ruby/object:Gem::Version
34
+ version: 2.2.5
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">"
40
+ - !ruby/object:Gem::Version
41
+ version: 2.2.5
42
+ - !ruby/object:Gem::Dependency
43
+ name: mime-types
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ">="
47
+ - !ruby/object:Gem::Version
48
+ version: '0'
49
+ type: :runtime
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ">="
54
+ - !ruby/object:Gem::Version
55
+ version: '0'
56
+ - !ruby/object:Gem::Dependency
57
+ name: xml-simple
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - ">="
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :runtime
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ - !ruby/object:Gem::Dependency
71
+ name: bundler
72
+ requirement: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '1.17'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: !ruby/object:Gem::Requirement
80
+ requirements:
81
+ - - ">="
82
+ - !ruby/object:Gem::Version
83
+ version: '1.17'
84
+ - !ruby/object:Gem::Dependency
85
+ name: flexmock
86
+ requirement: !ruby/object:Gem::Requirement
87
+ requirements:
88
+ - - "~>"
89
+ - !ruby/object:Gem::Version
90
+ version: 0.8.11
91
+ type: :development
92
+ prerelease: false
93
+ version_requirements: !ruby/object:Gem::Requirement
94
+ requirements:
95
+ - - "~>"
96
+ - !ruby/object:Gem::Version
97
+ version: 0.8.11
98
+ - !ruby/object:Gem::Dependency
99
+ name: jeweler
100
+ requirement: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ type: :development
106
+ prerelease: false
107
+ version_requirements: !ruby/object:Gem::Requirement
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ - !ruby/object:Gem::Dependency
113
+ name: rake
114
+ requirement: !ruby/object:Gem::Requirement
115
+ requirements:
116
+ - - ">="
117
+ - !ruby/object:Gem::Version
118
+ version: '0'
119
+ type: :development
120
+ prerelease: false
121
+ version_requirements: !ruby/object:Gem::Requirement
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: shoulda-context
128
+ requirement: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ type: :development
134
+ prerelease: false
135
+ version_requirements: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ - !ruby/object:Gem::Dependency
141
+ name: test-unit
142
+ requirement: !ruby/object:Gem::Requirement
143
+ requirements:
144
+ - - ">="
145
+ - !ruby/object:Gem::Version
146
+ version: '0'
147
+ type: :development
148
+ prerelease: false
149
+ version_requirements: !ruby/object:Gem::Requirement
150
+ requirements:
151
+ - - ">="
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ - !ruby/object:Gem::Dependency
155
+ name: timecop
156
+ requirement: !ruby/object:Gem::Requirement
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :development
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ requirements:
165
+ - - ">="
166
+ - !ruby/object:Gem::Version
167
+ version: '0'
168
+ description: Client library for Amazon's Simple Email Service's REST API
169
+ email: drew.blas@gmail.com
170
+ executables: []
171
+ extensions: []
172
+ extra_rdoc_files:
173
+ - CHANGELOG
174
+ - LICENSE
175
+ - README.erb
176
+ - README.rdoc
177
+ - TODO
178
+ files:
179
+ - ".document"
180
+ - CHANGELOG
181
+ - Gemfile
182
+ - Gemfile.lock
183
+ - LICENSE
184
+ - README.erb
185
+ - README.rdoc
186
+ - Rakefile
187
+ - TODO
188
+ - VERSION
189
+ - aws-ses.gemspec
190
+ - lib/aws/actionmailer/ses_extension.rb
191
+ - lib/aws/ses.rb
192
+ - lib/aws/ses/addresses.rb
193
+ - lib/aws/ses/base.rb
194
+ - lib/aws/ses/extensions.rb
195
+ - lib/aws/ses/info.rb
196
+ - lib/aws/ses/response.rb
197
+ - lib/aws/ses/send_email.rb
198
+ - lib/aws/ses/version.rb
199
+ - test/address_test.rb
200
+ - test/base_test.rb
201
+ - test/extensions_test.rb
202
+ - test/fixtures.rb
203
+ - test/helper.rb
204
+ - test/info_test.rb
205
+ - test/mocks/fake_response.rb
206
+ - test/response_test.rb
207
+ - test/send_email_test.rb
208
+ homepage: http://github.com/sertangulveren/aws-ses
209
+ licenses:
210
+ - MIT
211
+ metadata: {}
212
+ post_install_message:
213
+ rdoc_options: []
214
+ require_paths:
215
+ - lib
216
+ required_ruby_version: !ruby/object:Gem::Requirement
217
+ requirements:
218
+ - - ">="
219
+ - !ruby/object:Gem::Version
220
+ version: '0'
221
+ required_rubygems_version: !ruby/object:Gem::Requirement
222
+ requirements:
223
+ - - ">="
224
+ - !ruby/object:Gem::Version
225
+ version: '0'
226
+ requirements: []
227
+ rubygems_version: 3.0.8
228
+ signing_key:
229
+ specification_version: 4
230
+ summary: Client library for Amazon's Simple Email Service's REST API
231
+ test_files: []