aws-ses-v4 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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: []