parity-sendgrid-api 0.0.4
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/.gitignore +6 -0
- data/.rspec +3 -0
- data/.travis.yml +3 -0
- data/.yardopts +6 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +67 -0
- data/LICENSE +22 -0
- data/README.md +261 -0
- data/Rakefile +12 -0
- data/lib/sendgrid/api.rb +7 -0
- data/lib/sendgrid/api/client.rb +43 -0
- data/lib/sendgrid/api/entities/category.rb +13 -0
- data/lib/sendgrid/api/entities/email.rb +13 -0
- data/lib/sendgrid/api/entities/entity.rb +83 -0
- data/lib/sendgrid/api/entities/list.rb +30 -0
- data/lib/sendgrid/api/entities/marketing_email.rb +20 -0
- data/lib/sendgrid/api/entities/profile.rb +14 -0
- data/lib/sendgrid/api/entities/response.rb +21 -0
- data/lib/sendgrid/api/entities/response_insert.rb +23 -0
- data/lib/sendgrid/api/entities/response_remove.rb +23 -0
- data/lib/sendgrid/api/entities/schedule.rb +13 -0
- data/lib/sendgrid/api/entities/sender_address.rb +13 -0
- data/lib/sendgrid/api/entities/stats.rb +14 -0
- data/lib/sendgrid/api/newsletter/categories.rb +74 -0
- data/lib/sendgrid/api/newsletter/emails.rb +69 -0
- data/lib/sendgrid/api/newsletter/lists.rb +64 -0
- data/lib/sendgrid/api/newsletter/marketing_emails.rb +72 -0
- data/lib/sendgrid/api/newsletter/recipients.rb +55 -0
- data/lib/sendgrid/api/newsletter/schedule.rb +70 -0
- data/lib/sendgrid/api/newsletter/sender_addresses.rb +80 -0
- data/lib/sendgrid/api/newsletter/utils.rb +34 -0
- data/lib/sendgrid/api/rest/errors/error.rb +66 -0
- data/lib/sendgrid/api/rest/resource.rb +58 -0
- data/lib/sendgrid/api/rest/response/parse_error.rb +19 -0
- data/lib/sendgrid/api/rest/response/parse_json.rb +24 -0
- data/lib/sendgrid/api/service.rb +23 -0
- data/lib/sendgrid/api/version.rb +5 -0
- data/lib/sendgrid/api/web/mail.rb +44 -0
- data/lib/sendgrid/api/web/profile.rb +38 -0
- data/lib/sendgrid/api/web/stats.rb +36 -0
- data/sendgrid-api.gemspec +23 -0
- data/spec/fixtures/categories.json +11 -0
- data/spec/fixtures/emails/email.json +6 -0
- data/spec/fixtures/emails/emails.json +10 -0
- data/spec/fixtures/errors/already_exists.json +3 -0
- data/spec/fixtures/errors/bad_request.json +6 -0
- data/spec/fixtures/errors/database_error.json +3 -0
- data/spec/fixtures/errors/does_not_exist.json +3 -0
- data/spec/fixtures/errors/forbidden.json +3 -0
- data/spec/fixtures/errors/invalid_fields.json +3 -0
- data/spec/fixtures/errors/not_scheduled.json +3 -0
- data/spec/fixtures/errors/unauthorized.json +6 -0
- data/spec/fixtures/lists/list.json +5 -0
- data/spec/fixtures/lists/lists.json +11 -0
- data/spec/fixtures/marketing_emails/marketing_email.json +19 -0
- data/spec/fixtures/marketing_emails/marketing_emails.json +10 -0
- data/spec/fixtures/profile.json +18 -0
- data/spec/fixtures/recipients.json +8 -0
- data/spec/fixtures/schedule.json +3 -0
- data/spec/fixtures/sender_addresses/sender_address.json +11 -0
- data/spec/fixtures/sender_addresses/sender_addresses.json +11 -0
- data/spec/fixtures/stats.json +50 -0
- data/spec/fixtures/success.json +3 -0
- data/spec/sendgrid/api/client_spec.rb +38 -0
- data/spec/sendgrid/api/entities/category_spec.rb +14 -0
- data/spec/sendgrid/api/entities/email_spec.rb +15 -0
- data/spec/sendgrid/api/entities/entity_spec.rb +279 -0
- data/spec/sendgrid/api/entities/list_spec.rb +34 -0
- data/spec/sendgrid/api/entities/marketing_email_spec.rb +31 -0
- data/spec/sendgrid/api/entities/profile_spec.rb +26 -0
- data/spec/sendgrid/api/entities/response_insert_spec.rb +28 -0
- data/spec/sendgrid/api/entities/response_remove_spec.rb +28 -0
- data/spec/sendgrid/api/entities/response_spec.rb +28 -0
- data/spec/sendgrid/api/entities/schedule_spec.rb +14 -0
- data/spec/sendgrid/api/entities/sender_address_spec.rb +21 -0
- data/spec/sendgrid/api/entities/stats_spec.rb +25 -0
- data/spec/sendgrid/api/newsletter/categories_spec.rb +247 -0
- data/spec/sendgrid/api/newsletter/emails_spec.rb +265 -0
- data/spec/sendgrid/api/newsletter/lists_spec.rb +307 -0
- data/spec/sendgrid/api/newsletter/marketing_emails_spec.rb +306 -0
- data/spec/sendgrid/api/newsletter/recipients_spec.rb +252 -0
- data/spec/sendgrid/api/newsletter/schedule_spec.rb +263 -0
- data/spec/sendgrid/api/newsletter/sender_addresses_spec.rb +300 -0
- data/spec/sendgrid/api/rest/errors/error_spec.rb +121 -0
- data/spec/sendgrid/api/rest/resource_spec.rb +145 -0
- data/spec/sendgrid/api/rest/response/parse_error_spec.rb +39 -0
- data/spec/sendgrid/api/rest/response/parse_json_spec.rb +45 -0
- data/spec/sendgrid/api/service_spec.rb +44 -0
- data/spec/sendgrid/api/version_spec.rb +11 -0
- data/spec/sendgrid/api/web/mail_spec.rb +111 -0
- data/spec/sendgrid/api/web/profile_spec.rb +110 -0
- data/spec/sendgrid/api/web/stats_spec.rb +94 -0
- data/spec/spec_helper.rb +23 -0
- data/spec/support/helpers.rb +23 -0
- data/spec/support/mock.rb +30 -0
- data/spec/support/online.rb +114 -0
- data/spec/support/shared_examples.rb +104 -0
- metadata +225 -0
@@ -0,0 +1,265 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Sendgrid
|
4
|
+
module API
|
5
|
+
module Newsletter
|
6
|
+
module Emails
|
7
|
+
describe Services do
|
8
|
+
|
9
|
+
subject { service }
|
10
|
+
let(:service) { described_class.new(resource) }
|
11
|
+
let(:resource) { REST::Resource.new(user, key) }
|
12
|
+
let(:user) { 'my_user' }
|
13
|
+
let(:key) { 'my_key' }
|
14
|
+
let(:sg_mock) { Sendgrid::Mock.new(user, key) }
|
15
|
+
|
16
|
+
let(:listname) { 'my list' }
|
17
|
+
let(:email) { Entities::Email.new(:email => 'john@example.com', :name => 'John') }
|
18
|
+
let(:email2) { Entities::Email.new(:email => 'brian@example.com', :name => 'Brian') }
|
19
|
+
let(:emails) { [email, email2] }
|
20
|
+
|
21
|
+
describe '#add' do
|
22
|
+
let(:url) { 'newsletter/lists/email/add.json' }
|
23
|
+
|
24
|
+
context 'when add an email successfully' do
|
25
|
+
before do
|
26
|
+
sg_mock.stub_post(url, :list => listname, :data => [email.to_json]).
|
27
|
+
to_return(:body => {:inserted => 1}.to_json)
|
28
|
+
end
|
29
|
+
subject { service.add(listname, email) }
|
30
|
+
its(:inserted) { should == 1 }
|
31
|
+
its(:any?) { should be_true }
|
32
|
+
its(:none?) { should be_false }
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when add multiple emails successfully' do
|
36
|
+
before do
|
37
|
+
sg_mock.stub_post(url, :list => listname, :data => emails.map(&:to_json)).
|
38
|
+
to_return(:body => {:inserted => 2}.to_json)
|
39
|
+
end
|
40
|
+
subject { service.add(listname, emails) }
|
41
|
+
its(:inserted) { should == 2 }
|
42
|
+
its(:any?) { should be_true }
|
43
|
+
its(:none?) { should be_false }
|
44
|
+
end
|
45
|
+
|
46
|
+
context 'when add an email that already exists' do
|
47
|
+
before do
|
48
|
+
sg_mock.stub_post(url, :list => listname, :data => [email.to_json]).
|
49
|
+
to_return(:body => {:inserted => 0}.to_json)
|
50
|
+
end
|
51
|
+
subject { service.add(listname, email) }
|
52
|
+
its(:inserted) { should == 0 }
|
53
|
+
its(:any?) { should be_false }
|
54
|
+
its(:none?) { should be_true }
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'when permission failed' do
|
58
|
+
let(:stub_post) { sg_mock.stub_post(url, :list => listname, :data => [email.to_json]) }
|
59
|
+
subject { service.add(listname, email) }
|
60
|
+
it_behaves_like 'a forbidden response'
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
describe '#get' do
|
65
|
+
let(:url) { 'newsletter/lists/email/get.json' }
|
66
|
+
|
67
|
+
context 'when get all emails successfully' do
|
68
|
+
before do
|
69
|
+
sg_mock.stub_post(url, :list => listname).
|
70
|
+
to_return(:body => fixture('emails/emails.json'))
|
71
|
+
end
|
72
|
+
let(:response) { service.get(listname) }
|
73
|
+
subject { response }
|
74
|
+
it { should have(2).items }
|
75
|
+
describe 'first result' do
|
76
|
+
subject { response.first }
|
77
|
+
its(:email) { should == 'john@example.com' }
|
78
|
+
its(:name) { should == 'John' }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context 'when get an email successfully' do
|
83
|
+
before do
|
84
|
+
sg_mock.stub_post(url, :list => listname, :email => [email.email]).
|
85
|
+
to_return(:body => fixture('emails/email.json'))
|
86
|
+
end
|
87
|
+
let(:response) { service.get(listname, email) }
|
88
|
+
subject { response }
|
89
|
+
it { should have(1).item }
|
90
|
+
describe 'first result' do
|
91
|
+
subject { response.first }
|
92
|
+
its(:email) { should == 'john@example.com' }
|
93
|
+
its(:name) { should == 'John' }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'when permission failed' do
|
98
|
+
let(:stub_post) { sg_mock.stub_post(url, :list => listname) }
|
99
|
+
subject { service.get(listname) }
|
100
|
+
it_behaves_like 'a forbidden response'
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe '#delete' do
|
105
|
+
let(:url) { 'newsletter/lists/email/delete.json' }
|
106
|
+
|
107
|
+
context 'when delete an email successfully' do
|
108
|
+
before do
|
109
|
+
sg_mock.stub_post(url, :list => listname, :email => [email.email]).
|
110
|
+
to_return(:body => {:removed => 1}.to_json)
|
111
|
+
end
|
112
|
+
let(:response) { service.delete(listname, email) }
|
113
|
+
subject { response }
|
114
|
+
its(:removed) { should == 1 }
|
115
|
+
its(:any?) { should be_true }
|
116
|
+
its(:none?) { should be_false }
|
117
|
+
end
|
118
|
+
|
119
|
+
context 'when delete multiple emails successfully' do
|
120
|
+
before do
|
121
|
+
sg_mock.stub_post(url, :list => listname, :email => emails.map(&:email)).
|
122
|
+
to_return(:body => {:removed => 2}.to_json)
|
123
|
+
end
|
124
|
+
let(:response) { service.delete(listname, emails) }
|
125
|
+
subject { response }
|
126
|
+
its(:removed) { should == 2 }
|
127
|
+
its(:any?) { should be_true }
|
128
|
+
its(:none?) { should be_false }
|
129
|
+
end
|
130
|
+
|
131
|
+
context 'when no emails were deleted' do
|
132
|
+
before do
|
133
|
+
sg_mock.stub_post(url, :list => listname, :email => [email.email]).
|
134
|
+
to_return(:body => {:removed => 0}.to_json)
|
135
|
+
end
|
136
|
+
let(:response) { service.delete(listname, email) }
|
137
|
+
subject { response }
|
138
|
+
its(:removed) { should == 0 }
|
139
|
+
its(:any?) { should be_false }
|
140
|
+
its(:none?) { should be_true }
|
141
|
+
end
|
142
|
+
|
143
|
+
context 'when permission failed' do
|
144
|
+
let(:stub_post) { sg_mock.stub_post(url, :list => listname, :email => [email.email]) }
|
145
|
+
subject { service.delete(listname, email) }
|
146
|
+
it_behaves_like 'a forbidden response'
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
describe 'online tests', :online => true do
|
151
|
+
include_examples 'online tests'
|
152
|
+
let(:online) { Online.new(env_user, env_key) }
|
153
|
+
let(:list) { online.list_example }
|
154
|
+
let(:emails) { online.emails_example }
|
155
|
+
let(:email) { emails.first }
|
156
|
+
|
157
|
+
context 'when credentials are valid' do
|
158
|
+
let(:lists) { Newsletter::Lists::Services.new(resource) }
|
159
|
+
let(:resource) { REST::Resource.new(env_user, env_key) }
|
160
|
+
|
161
|
+
before do
|
162
|
+
lists.add(list).success? or raise 'could not create the list'
|
163
|
+
end
|
164
|
+
after do
|
165
|
+
lists.delete(list).success? or raise 'could not remove the created list'
|
166
|
+
end
|
167
|
+
|
168
|
+
describe '#add' do
|
169
|
+
context 'when add an email successfully' do
|
170
|
+
it 'adds the email' do
|
171
|
+
response = subject.add(list, email)
|
172
|
+
response.any?.should be_true
|
173
|
+
response.inserted.should == 1
|
174
|
+
end
|
175
|
+
end
|
176
|
+
|
177
|
+
context 'when add multiple emails successfully' do
|
178
|
+
it 'adds the emails' do
|
179
|
+
response = subject.add(list, emails)
|
180
|
+
response.any?.should be_true
|
181
|
+
response.inserted.should == 2
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
context 'when add an email that already exists' do
|
186
|
+
before do
|
187
|
+
subject.add(list, email)
|
188
|
+
end
|
189
|
+
it 'do not add the email' do
|
190
|
+
response = subject.add(list, email)
|
191
|
+
response.any?.should be_false
|
192
|
+
response.inserted.should == 0
|
193
|
+
end
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
describe '#get' do
|
198
|
+
before do
|
199
|
+
service.add(list, emails)
|
200
|
+
end
|
201
|
+
|
202
|
+
context 'when get all emails successfully' do
|
203
|
+
it 'gets the emails' do
|
204
|
+
response = subject.get(list)
|
205
|
+
response.should have(2).items
|
206
|
+
end
|
207
|
+
end
|
208
|
+
|
209
|
+
context 'when get an email successfully' do
|
210
|
+
it 'gets the email' do
|
211
|
+
response = subject.get(list, email)
|
212
|
+
response.should have(1).item
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
describe '#delete' do
|
218
|
+
before do
|
219
|
+
service.add(list, emails)
|
220
|
+
end
|
221
|
+
|
222
|
+
context 'when delete an email successfully' do
|
223
|
+
it 'deletes the email' do
|
224
|
+
response = service.delete(list, email)
|
225
|
+
response.any?.should be_true
|
226
|
+
response.removed.should == 1
|
227
|
+
end
|
228
|
+
end
|
229
|
+
|
230
|
+
context 'when delete multiple emails successfully' do
|
231
|
+
it 'deletes the emails' do
|
232
|
+
response = service.delete(list, emails)
|
233
|
+
response.any?.should be_true
|
234
|
+
response.removed.should == 2
|
235
|
+
end
|
236
|
+
end
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
context 'when credentials are invalid' do
|
241
|
+
describe '#add' do
|
242
|
+
it 'raises an error' do
|
243
|
+
expect { subject.add(list, email) }.to raise_error(REST::Errors::Forbidden)
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
247
|
+
describe '#get' do
|
248
|
+
it 'raises an error' do
|
249
|
+
expect { subject.get(list, email) }.to raise_error(REST::Errors::Forbidden)
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
describe '#delete' do
|
254
|
+
it 'raises an error' do
|
255
|
+
expect { subject.delete(list, email) }.to raise_error(REST::Errors::Forbidden)
|
256
|
+
end
|
257
|
+
end
|
258
|
+
end
|
259
|
+
end
|
260
|
+
|
261
|
+
end
|
262
|
+
end
|
263
|
+
end
|
264
|
+
end
|
265
|
+
end
|
@@ -0,0 +1,307 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module Sendgrid
|
4
|
+
module API
|
5
|
+
module Newsletter
|
6
|
+
module Lists
|
7
|
+
describe Services do
|
8
|
+
|
9
|
+
subject { service }
|
10
|
+
let(:service) { described_class.new(resource) }
|
11
|
+
let(:resource) { REST::Resource.new(user, key) }
|
12
|
+
let(:user) { 'my_user' }
|
13
|
+
let(:key) { 'my_key' }
|
14
|
+
let(:sg_mock) { Sendgrid::Mock.new(user, key) }
|
15
|
+
|
16
|
+
describe '#add' do
|
17
|
+
let(:url) { 'newsletter/lists/add.json' }
|
18
|
+
let(:listname) { 'list 1' }
|
19
|
+
let(:stub_post) { sg_mock.stub_post(url, :list => listname) }
|
20
|
+
|
21
|
+
subject { service.add(listname) }
|
22
|
+
|
23
|
+
context 'when add a list successfully' do
|
24
|
+
context 'with name' do
|
25
|
+
it_behaves_like 'a success response'
|
26
|
+
end
|
27
|
+
|
28
|
+
context 'with object' do
|
29
|
+
let(:list) { Entities::List.new(:list => listname) }
|
30
|
+
subject { service.add(list) }
|
31
|
+
it_behaves_like 'a success response'
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
context 'when permission failed' do
|
36
|
+
it_behaves_like 'a forbidden response'
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when list already exists' do
|
40
|
+
it_behaves_like 'an already exists response'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe '#edit' do
|
45
|
+
let(:url) { 'newsletter/lists/edit.json' }
|
46
|
+
let(:listname) { 'list 1' }
|
47
|
+
let(:newlistname) { 'new list 1' }
|
48
|
+
let(:stub_post) { sg_mock.stub_post(url, :list => listname, :newlist => newlistname) }
|
49
|
+
|
50
|
+
subject { service.edit(listname, newlistname) }
|
51
|
+
|
52
|
+
context 'when edit a list successfully' do
|
53
|
+
context 'with name' do
|
54
|
+
it_behaves_like 'a success response'
|
55
|
+
end
|
56
|
+
|
57
|
+
context 'with object' do
|
58
|
+
let(:list) { Entities::List.new(:list => listname) }
|
59
|
+
let(:newlist) { Entities::List.new(:list => newlistname) }
|
60
|
+
subject { service.edit(list, newlist) }
|
61
|
+
it_behaves_like 'a success response'
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
context 'when permission failed' do
|
66
|
+
it_behaves_like 'a forbidden response'
|
67
|
+
end
|
68
|
+
|
69
|
+
context 'when list already exists' do
|
70
|
+
it_behaves_like 'an already exists response'
|
71
|
+
end
|
72
|
+
|
73
|
+
context 'when list does not exist' do
|
74
|
+
it_behaves_like 'a does not exist response'
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe '#delete' do
|
79
|
+
let(:url) { 'newsletter/lists/delete.json' }
|
80
|
+
let(:listname) { 'list 1' }
|
81
|
+
let(:stub_post) { sg_mock.stub_post(url, :list => listname) }
|
82
|
+
|
83
|
+
subject { service.delete(listname) }
|
84
|
+
|
85
|
+
context 'when delete a list successfully' do
|
86
|
+
context 'with name' do
|
87
|
+
it_behaves_like 'a success response'
|
88
|
+
end
|
89
|
+
|
90
|
+
context 'with object' do
|
91
|
+
let(:list) { Entities::List.new(:list => listname) }
|
92
|
+
subject { service.delete(list) }
|
93
|
+
it_behaves_like 'a success response'
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
context 'when permission failed' do
|
98
|
+
it_behaves_like 'a forbidden response'
|
99
|
+
end
|
100
|
+
|
101
|
+
context 'when list does not exist' do
|
102
|
+
it_behaves_like 'a does not exist response'
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe '#get' do
|
107
|
+
let(:url) { 'newsletter/lists/get.json' }
|
108
|
+
let(:response) { service.get(listname) }
|
109
|
+
let(:listname) { 'list 1' }
|
110
|
+
let(:stub_post) { sg_mock.stub_post(url, :list => listname) }
|
111
|
+
subject { response }
|
112
|
+
|
113
|
+
context 'when get all lists successfully' do
|
114
|
+
let(:stub_post) { sg_mock.stub_post(url) }
|
115
|
+
let(:response) { service.get }
|
116
|
+
|
117
|
+
before do
|
118
|
+
stub_post.to_return(:body => fixture('lists/lists.json'))
|
119
|
+
end
|
120
|
+
|
121
|
+
it { should_not be_empty }
|
122
|
+
it { should have(3).items }
|
123
|
+
|
124
|
+
describe 'first list' do
|
125
|
+
subject { response.first }
|
126
|
+
it { should be_instance_of(Entities::List) }
|
127
|
+
its(:list) { should == 'list 1' }
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
context 'when get a list successfully' do
|
132
|
+
before do
|
133
|
+
stub_post.to_return(:body => fixture('lists/list.json'))
|
134
|
+
end
|
135
|
+
|
136
|
+
context 'with name' do
|
137
|
+
it { should_not be_empty }
|
138
|
+
it { should have(1).item }
|
139
|
+
end
|
140
|
+
|
141
|
+
context 'with object' do
|
142
|
+
let(:response) { service.get(list) }
|
143
|
+
let(:list) { Entities::List.new(:list => listname) }
|
144
|
+
|
145
|
+
it { should_not be_empty }
|
146
|
+
it { should have(1).item }
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
150
|
+
context 'when permission failed' do
|
151
|
+
it_behaves_like 'a forbidden response'
|
152
|
+
end
|
153
|
+
|
154
|
+
context 'when not found' do
|
155
|
+
it_behaves_like 'a does not exist response'
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
describe 'online tests', :online => true do
|
160
|
+
include_examples 'online tests'
|
161
|
+
let(:online) { Online.new(env_user, env_key) }
|
162
|
+
let(:list) { online.list_example }
|
163
|
+
let(:newlistname) { 'sendgrid-api new list test' }
|
164
|
+
|
165
|
+
context 'when credentials are valid' do
|
166
|
+
let(:resource) { REST::Resource.new(env_user, env_key) }
|
167
|
+
|
168
|
+
describe '#add' do
|
169
|
+
after do
|
170
|
+
subject.delete(list).success? or raise 'could not remove the created list'
|
171
|
+
end
|
172
|
+
|
173
|
+
context 'when add a list successfully' do
|
174
|
+
it 'adds a list' do
|
175
|
+
subject.add(list).success?.should be_true
|
176
|
+
end
|
177
|
+
end
|
178
|
+
|
179
|
+
context 'when list already exists' do
|
180
|
+
before do
|
181
|
+
subject.add(list).success? or raise 'could not create the list'
|
182
|
+
end
|
183
|
+
it 'raises an error' do
|
184
|
+
expect { subject.add(list) }.to raise_error(REST::Errors::UnprocessableEntity)
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
describe '#edit' do
|
190
|
+
context 'when edit a list successfully' do
|
191
|
+
before do
|
192
|
+
subject.add(list).success? or raise 'could not create the list'
|
193
|
+
end
|
194
|
+
after do
|
195
|
+
subject.delete(newlistname).success? or raise 'could not remove the created list'
|
196
|
+
end
|
197
|
+
it 'edits a list' do
|
198
|
+
subject.edit(list, newlistname).success?.should be_true
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
context 'when list does not exist' do
|
203
|
+
before do
|
204
|
+
subject.add(newlistname).success? or raise 'could not create the list'
|
205
|
+
end
|
206
|
+
after do
|
207
|
+
subject.delete(newlistname).success? or raise 'could not remove the created list'
|
208
|
+
end
|
209
|
+
it 'raises an error' do
|
210
|
+
expect { subject.edit(list, newlistname) }.to raise_error(REST::Errors::Unauthorized)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
|
214
|
+
context 'when list already exists' do
|
215
|
+
before do
|
216
|
+
subject.add(list).success? or raise 'could not create the list'
|
217
|
+
subject.add(newlistname).success? or raise 'could not create the list'
|
218
|
+
end
|
219
|
+
after do
|
220
|
+
subject.delete(list).success? or raise 'could not remove the created list'
|
221
|
+
subject.delete(newlistname).success? or raise 'could not remove the created list'
|
222
|
+
end
|
223
|
+
it 'raises an error' do
|
224
|
+
expect { subject.edit(list, newlistname) }.to raise_error(REST::Errors::Unauthorized)
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
|
229
|
+
describe '#delete' do
|
230
|
+
context 'when delete a list successfully' do
|
231
|
+
before do
|
232
|
+
subject.add(list).success? or raise 'could not create the list'
|
233
|
+
end
|
234
|
+
it 'deletes a list' do
|
235
|
+
subject.delete(list).success?.should be_true
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
239
|
+
context 'when list does not exist' do
|
240
|
+
it 'raises an error' do
|
241
|
+
expect { subject.delete(list) }.to raise_error(REST::Errors::UnprocessableEntity)
|
242
|
+
end
|
243
|
+
end
|
244
|
+
end
|
245
|
+
|
246
|
+
describe '#get' do
|
247
|
+
context 'when get all lists successfully' do
|
248
|
+
before do
|
249
|
+
subject.add(list).success? or raise 'could not create the list'
|
250
|
+
end
|
251
|
+
after do
|
252
|
+
subject.delete(list).success? or raise 'could not remove the created list'
|
253
|
+
end
|
254
|
+
it 'gets a list' do
|
255
|
+
subject.get.should_not be_empty
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
259
|
+
context 'when get a list successfully' do
|
260
|
+
before do
|
261
|
+
subject.add(list).success? or raise 'could not create the list'
|
262
|
+
end
|
263
|
+
after do
|
264
|
+
subject.delete(list).success? or raise 'could not remove the created list'
|
265
|
+
end
|
266
|
+
it 'gets a list' do
|
267
|
+
subject.get(list).should_not be_empty
|
268
|
+
end
|
269
|
+
end
|
270
|
+
|
271
|
+
context 'when list does not exist' do
|
272
|
+
it 'raises an error' do
|
273
|
+
expect { subject.get(list) }.to raise_error(REST::Errors::Unauthorized)
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
278
|
+
|
279
|
+
context 'when credentials are invalid' do
|
280
|
+
describe '#add' do
|
281
|
+
it 'raises an error' do
|
282
|
+
expect { subject.add(list) }.to raise_error(REST::Errors::Forbidden)
|
283
|
+
end
|
284
|
+
end
|
285
|
+
describe '#edit' do
|
286
|
+
it 'raises an error' do
|
287
|
+
expect { subject.edit(list, newlistname) }.to raise_error(REST::Errors::Forbidden)
|
288
|
+
end
|
289
|
+
end
|
290
|
+
describe '#delete' do
|
291
|
+
it 'raises an error' do
|
292
|
+
expect { subject.delete(list) }.to raise_error(REST::Errors::Forbidden)
|
293
|
+
end
|
294
|
+
end
|
295
|
+
describe '#get' do
|
296
|
+
it 'raises an error' do
|
297
|
+
expect { subject.get(list) }.to raise_error(REST::Errors::Forbidden)
|
298
|
+
end
|
299
|
+
end
|
300
|
+
end
|
301
|
+
end
|
302
|
+
|
303
|
+
end
|
304
|
+
end
|
305
|
+
end
|
306
|
+
end
|
307
|
+
end
|