postmark 1.1.2 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,538 @@
1
+ require 'spec_helper'
2
+
3
+ describe Postmark::AccountApiClient do
4
+
5
+ let(:api_key) { 'abcd-efgh' }
6
+ subject { Postmark::AccountApiClient}
7
+
8
+ it 'can be created with an API key' do
9
+ expect { subject.new(api_key) }.not_to raise_error
10
+ end
11
+
12
+ it 'can be created with an API key and options hash' do
13
+ expect { subject.new(api_key, :http_read_timeout => 5) }.not_to raise_error
14
+ end
15
+
16
+ context 'instance' do
17
+
18
+ subject { Postmark::AccountApiClient.new(api_key) }
19
+
20
+ it 'uses the auth header specific for Account API' do
21
+ auth_header = subject.http_client.auth_header_name
22
+ expect(auth_header).to eq('X-Postmark-Account-Token')
23
+ end
24
+
25
+ describe '#senders' do
26
+
27
+ let(:response) {
28
+ {
29
+ 'TotalCount' => 10, 'SenderSignatures' => [{}, {}]
30
+ }
31
+ }
32
+
33
+ it 'is aliased as #signatures' do
34
+ expect(subject).to respond_to(:signatures)
35
+ expect(subject).to respond_to(:signatures).with(1).argument
36
+ end
37
+
38
+ it 'returns an enumerator' do
39
+ expect(subject.senders).to be_kind_of(Enumerable)
40
+ end
41
+
42
+ it 'lazily loads senders' do
43
+ allow(subject.http_client).to receive(:get).
44
+ with('senders', an_instance_of(Hash)).and_return(response)
45
+ subject.senders.take(1000)
46
+ end
47
+
48
+ end
49
+
50
+ describe '#get_senders' do
51
+
52
+ let(:response) {
53
+ {
54
+ "TotalCount" => 1,
55
+ "SenderSignatures" => [{
56
+ "Domain" => "example.com",
57
+ "EmailAddress" => "someone@example.com",
58
+ "ReplyToEmailAddress" => "info@example.com",
59
+ "Name" => "Example User",
60
+ "Confirmed" => true,
61
+ "ID" => 8139
62
+ }]
63
+ }
64
+ }
65
+
66
+ it 'is aliased as #get_signatures' do
67
+ expect(subject).to respond_to(:get_signatures).with(1).argument
68
+ end
69
+
70
+ it 'performs a GET request to /senders endpoint' do
71
+ allow(subject.http_client).to receive(:get).
72
+ with('senders', :offset => 0, :count => 30).
73
+ and_return(response)
74
+ subject.get_senders
75
+ end
76
+
77
+ it 'formats the keys of returned list of senders' do
78
+ allow(subject.http_client).to receive(:get).and_return(response)
79
+ keys = subject.get_senders.map { |s| s.keys }.flatten
80
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
81
+ end
82
+
83
+ it 'accepts offset and count options' do
84
+ allow(subject.http_client).to receive(:get).
85
+ with('senders', :offset => 10, :count => 42).
86
+ and_return(response)
87
+ subject.get_senders(:offset => 10, :count => 42)
88
+ end
89
+
90
+ end
91
+
92
+ describe '#get_senders_count' do
93
+
94
+ let(:response) { {'TotalCount' => 42} }
95
+
96
+ it 'is aliased as #get_signatures_count' do
97
+ expect(subject).to respond_to(:get_signatures_count)
98
+ expect(subject).to respond_to(:get_signatures_count).with(1).argument
99
+ end
100
+
101
+ it 'returns a total number of senders' do
102
+ allow(subject.http_client).to receive(:get).
103
+ with('senders', an_instance_of(Hash)).and_return(response)
104
+ expect(subject.get_senders_count).to eq(42)
105
+ end
106
+
107
+ end
108
+
109
+ describe '#get_sender' do
110
+
111
+ let(:response) {
112
+ {
113
+ "Domain" => "example.com",
114
+ "EmailAddress" => "someone@example.com",
115
+ "ReplyToEmailAddress" => "info@example.com",
116
+ "Name" => "Example User",
117
+ "Confirmed" => true,
118
+ "ID" => 8139
119
+ }
120
+ }
121
+
122
+ it 'is aliased as #get_signature' do
123
+ expect(subject).to respond_to(:get_signature).with(1).argument
124
+ end
125
+
126
+ it 'performs a GET request to /senders/:id endpoint' do
127
+ allow(subject.http_client).to receive(:get).with("senders/42").
128
+ and_return(response)
129
+ subject.get_sender(42)
130
+ end
131
+
132
+ it 'formats the keys of returned response' do
133
+ allow(subject.http_client).to receive(:get).and_return(response)
134
+ keys = subject.get_sender(42).keys
135
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
136
+ end
137
+ end
138
+
139
+ describe '#create_sender' do
140
+
141
+ let(:response) {
142
+ {
143
+ "Domain" => "example.com",
144
+ "EmailAddress" => "someone@example.com",
145
+ "ReplyToEmailAddress" => "info@example.com",
146
+ "Name" => "Example User",
147
+ "Confirmed" => true,
148
+ "ID" => 8139
149
+ }
150
+ }
151
+
152
+ it 'is aliased as #create_signature' do
153
+ expect(subject).to respond_to(:create_signature).with(1).argument
154
+ end
155
+
156
+ it 'performs a POST request to /senders endpoint' do
157
+ allow(subject.http_client).to receive(:post).
158
+ with("senders", an_instance_of(String)).and_return(response)
159
+ subject.create_sender(:name => 'Chris Nagele')
160
+ end
161
+
162
+ it 'converts the sender attributes names to camel case' do
163
+ allow(subject.http_client).to receive(:post).
164
+ with("senders", {'FooBar' => 'bar'}.to_json).and_return(response)
165
+ subject.create_sender(:foo_bar => 'bar')
166
+ end
167
+
168
+ it 'formats the keys of returned response' do
169
+ allow(subject.http_client).to receive(:post).and_return(response)
170
+ keys = subject.create_sender(:foo => 'bar').keys
171
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
172
+ end
173
+ end
174
+
175
+ describe '#update_sender' do
176
+
177
+ let(:response) {
178
+ {
179
+ "Domain" => "example.com",
180
+ "EmailAddress" => "someone@example.com",
181
+ "ReplyToEmailAddress" => "info@example.com",
182
+ "Name" => "Example User",
183
+ "Confirmed" => true,
184
+ "ID" => 8139
185
+ }
186
+ }
187
+
188
+ it 'is aliased as #update_signature' do
189
+ expect(subject).to respond_to(:update_signature).with(1).argument
190
+ expect(subject).to respond_to(:update_signature).with(2).arguments
191
+ end
192
+
193
+ it 'performs a PUT request to /senders/:id endpoint' do
194
+ allow(subject.http_client).to receive(:put).
195
+ with('senders/42', an_instance_of(String)).and_return(response)
196
+ subject.update_sender(42, :name => 'Chris Nagele')
197
+ end
198
+
199
+ it 'converts the sender attributes names to camel case' do
200
+ allow(subject.http_client).to receive(:put).
201
+ with('senders/42', {'FooBar' => 'bar'}.to_json).and_return(response)
202
+ subject.update_sender(42, :foo_bar => 'bar')
203
+ end
204
+
205
+ it 'formats the keys of returned response' do
206
+ allow(subject.http_client).to receive(:put).and_return(response)
207
+ keys = subject.update_sender(42, :foo => 'bar').keys
208
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
209
+ end
210
+
211
+ end
212
+
213
+ describe '#resend_sender_confirmation' do
214
+
215
+ let(:response) {
216
+ {
217
+ "ErrorCode" => 0,
218
+ "Message" => "Confirmation email for Sender Signature someone@example.com was re-sent."
219
+ }
220
+ }
221
+
222
+ it 'is aliased as #resend_signature_confirmation' do
223
+ expect(subject).to respond_to(:resend_signature_confirmation).
224
+ with(1).argument
225
+ end
226
+
227
+ it 'performs a POST request to /senders/:id/resend endpoint' do
228
+ allow(subject.http_client).to receive(:post).
229
+ with('senders/42/resend').and_return(response)
230
+ subject.resend_sender_confirmation(42)
231
+ end
232
+
233
+ it 'formats the keys of returned response' do
234
+ allow(subject.http_client).to receive(:post).and_return(response)
235
+ keys = subject.resend_sender_confirmation(42).keys
236
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
237
+ end
238
+
239
+ end
240
+
241
+ describe '#verified_sender_spf?' do
242
+
243
+ let(:response) { {"SPFVerified" => true} }
244
+ let(:false_response) { {"SPFVerified" => false} }
245
+
246
+ it 'is aliased as #verified_signature_spf?' do
247
+ expect(subject).to respond_to(:verified_signature_spf?).with(1).argument
248
+ end
249
+
250
+ it 'performs a POST request to /senders/:id/verifyspf endpoint' do
251
+ allow(subject.http_client).to receive(:post).
252
+ with('senders/42/verifyspf').and_return(response)
253
+ subject.verified_sender_spf?(42)
254
+ end
255
+
256
+ it 'returns false when SPFVerified field of the response is false' do
257
+ allow(subject.http_client).to receive(:post).and_return(false_response)
258
+ expect(subject.verified_sender_spf?(42)).to be_false
259
+ end
260
+
261
+ it 'returns true when SPFVerified field of the response is true' do
262
+ allow(subject.http_client).to receive(:post).and_return(response)
263
+ expect(subject.verified_sender_spf?(42)).to be_true
264
+ end
265
+
266
+ end
267
+
268
+ describe '#request_new_sender_dkim' do
269
+
270
+ let(:response) {
271
+ {
272
+ "Domain" => "example.com",
273
+ "EmailAddress" => "someone@example.com",
274
+ "ReplyToEmailAddress" => "info@example.com",
275
+ "Name" => "Example User",
276
+ "Confirmed" => true,
277
+ "ID" => 8139
278
+ }
279
+ }
280
+
281
+ it 'is aliased as #request_new_signature_dkim' do
282
+ expect(subject).to respond_to(:request_new_signature_dkim).
283
+ with(1).argument
284
+ end
285
+
286
+ it 'performs a POST request to /senders/:id/requestnewdkim endpoint' do
287
+ allow(subject.http_client).to receive(:post).
288
+ with('senders/42/requestnewdkim').and_return(response)
289
+ subject.request_new_sender_dkim(42)
290
+ end
291
+
292
+ it 'formats the keys of returned response' do
293
+ allow(subject.http_client).to receive(:post).and_return(response)
294
+ keys = subject.request_new_sender_dkim(42).keys
295
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
296
+ end
297
+
298
+ end
299
+
300
+ describe '#delete_sender' do
301
+
302
+ let(:response) {
303
+ {
304
+ "ErrorCode" => 0,
305
+ "Message" => "Signature someone@example.com removed."
306
+ }
307
+ }
308
+
309
+ it 'is aliased as #delete_signature' do
310
+ expect(subject).to respond_to(:delete_signature).with(1).argument
311
+ end
312
+
313
+ it 'performs a DELETE request to /senders/:id endpoint' do
314
+ allow(subject.http_client).to receive(:delete).
315
+ with('senders/42').and_return(response)
316
+ subject.delete_sender(42)
317
+ end
318
+
319
+ it 'formats the keys of returned response' do
320
+ allow(subject.http_client).to receive(:delete).and_return(response)
321
+ keys = subject.delete_sender(42).keys
322
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
323
+ end
324
+
325
+ end
326
+
327
+ describe '#servers' do
328
+
329
+ let(:response) { {'TotalCount' => 10, 'Servers' => [{}, {}]} }
330
+
331
+ it 'returns an enumerator' do
332
+ expect(subject.servers).to be_kind_of(Enumerable)
333
+ end
334
+
335
+ it 'lazily loads servers' do
336
+ allow(subject.http_client).to receive(:get).
337
+ with('servers', an_instance_of(Hash)).and_return(response)
338
+ subject.servers.take(100)
339
+ end
340
+
341
+ end
342
+
343
+ describe '#get_servers' do
344
+
345
+ let(:response) {
346
+ {
347
+ 'TotalCount' => 1,
348
+ 'Servers' => [
349
+ {
350
+ "ID" => 11635,
351
+ "Name" => "Production01",
352
+ "ApiTokens" => [
353
+ "fe6ec0cf-ff06-787a-b5e9-e77a41c61ce3"
354
+ ],
355
+ "ServerLink" => "https://postmarkapp.com/servers/11635/overview",
356
+ "Color" => "red",
357
+ "SmtpApiActivated" => true,
358
+ "RawEmailEnabled" => false,
359
+ "InboundAddress" => "7373de3ebd66acea228fjkdkf88dd7d5@inbound.postmarkapp.com",
360
+ "InboundHookUrl" => "http://inboundhook.example.com/inbound",
361
+ "BounceHookUrl" => "http://bouncehook.example.com/bounce",
362
+ "InboundDomain" => "",
363
+ "InboundHash" => "7373de3ebd66acea228fjkdkf88dd7d5"
364
+ }
365
+ ]
366
+ }
367
+ }
368
+
369
+ it 'performs a GET request to /servers endpoint' do
370
+ allow(subject.http_client).to receive(:get).
371
+ with('servers', an_instance_of(Hash)).and_return(response)
372
+ subject.get_servers
373
+ end
374
+
375
+ it 'formats the keys of returned list of servers' do
376
+ allow(subject.http_client).to receive(:get).and_return(response)
377
+ keys = subject.get_servers.map { |s| s.keys }.flatten
378
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
379
+ end
380
+
381
+ it 'accepts offset and count options' do
382
+ allow(subject.http_client).to receive(:get).
383
+ with('servers', :offset => 30, :count => 50).
384
+ and_return(response)
385
+ subject.get_servers(:offset => 30, :count => 50)
386
+ end
387
+ end
388
+
389
+ describe '#get_server' do
390
+
391
+ let(:response) {
392
+ {
393
+ "ID" => 7438,
394
+ "Name" => "Staging Testing",
395
+ "ApiTokens" => [
396
+ "fe6ec0cf-ff06-44aa-jf88-e77a41c61ce3"
397
+ ],
398
+ "ServerLink" => "https://postmarkapp.com/servers/7438/overview",
399
+ "Color" => "red",
400
+ "SmtpApiActivated" => true,
401
+ "RawEmailEnabled" => false,
402
+ "InboundAddress" => "7373de3ebd66acea22812731fb1dd7d5@inbound.postmarkapp.com",
403
+ "InboundHookUrl" => "",
404
+ "BounceHookUrl" => "",
405
+ "InboundDomain" => "",
406
+ "InboundHash" => "7373de3ebd66acea22812731fb1dd7d5"
407
+ }
408
+ }
409
+
410
+ it 'performs a GET request to /servers/:id endpoint' do
411
+ allow(subject.http_client).to receive(:get).
412
+ with('servers/42').and_return(response)
413
+ subject.get_server(42)
414
+ end
415
+
416
+ it 'formats the keys of returned response' do
417
+ allow(subject.http_client).to receive(:get).and_return(response)
418
+ keys = subject.get_server(42).keys
419
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
420
+ end
421
+
422
+ end
423
+
424
+ describe '#get_servers_count' do
425
+
426
+ let(:response) { {'TotalCount' => 42} }
427
+
428
+ it 'returns a total number of servers' do
429
+ allow(subject.http_client).to receive(:get).
430
+ with('servers', an_instance_of(Hash)).and_return(response)
431
+ expect(subject.get_servers_count).to eq(42)
432
+ end
433
+
434
+ end
435
+
436
+ describe '#create_server' do
437
+
438
+ let(:response) {
439
+ {
440
+ "Name" => "Staging Testing",
441
+ "Color" => "red",
442
+ "SmtpApiActivated" => true,
443
+ "RawEmailEnabled" => false,
444
+ "InboundHookUrl" => "http://hooks.example.com/inbound",
445
+ "BounceHookUrl" => "http://hooks.example.com/bounce",
446
+ "InboundDomain" => ""
447
+ }
448
+ }
449
+
450
+ it 'performs a POST request to /servers endpoint' do
451
+ allow(subject.http_client).to receive(:post).
452
+ with('servers', an_instance_of(String)).and_return(response)
453
+ subject.create_server(:foo => 'bar')
454
+ end
455
+
456
+ it 'converts the server attribute names to camel case' do
457
+ allow(subject.http_client).to receive(:post).
458
+ with('servers', {'FooBar' => 'foo_bar'}.to_json).
459
+ and_return(response)
460
+ subject.create_server(:foo_bar => 'foo_bar')
461
+ end
462
+
463
+ it 'formats the keys of returned response' do
464
+ allow(subject.http_client).to receive(:post).and_return(response)
465
+ keys = subject.create_server(:foo => 'bar').keys
466
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
467
+ end
468
+
469
+ end
470
+
471
+ describe '#update_server' do
472
+ let(:response) {
473
+ {
474
+ "ID" => 7450,
475
+ "Name" => "Production Testing",
476
+ "ApiTokens" => [
477
+ "fe6ec0cf-ff06-44aa-jf88-e77a41c61ce3"
478
+ ],
479
+ "ServerLink" => "https://postmarkapp.com/servers/7438/overview",
480
+ "Color" => "blue",
481
+ "SmtpApiActivated" => false,
482
+ "RawEmailEnabled" => false,
483
+ "InboundAddress" => "7373de3ebd66acea22812731fb1dd7d5@inbound.postmarkapp.com",
484
+ "InboundHookUrl" => "http://hooks.example.com/inbound",
485
+ "BounceHookUrl" => "http://hooks.example.com/bounce",
486
+ "InboundDomain" => "",
487
+ "InboundHash" => "7373de3ebd66acea22812731fb1dd7d5"
488
+ }
489
+ }
490
+
491
+ it 'converts the server attribute names to camel case' do
492
+ allow(subject.http_client).to receive(:put).
493
+ with(an_instance_of(String), {'FooBar' => 'foo_bar'}.to_json).
494
+ and_return(response)
495
+ subject.update_server(42, :foo_bar => 'foo_bar')
496
+ end
497
+
498
+ it 'performs a PUT request to /servers/:id endpoint' do
499
+ allow(subject.http_client).to receive(:put).
500
+ with('servers/42', an_instance_of(String)).
501
+ and_return(response)
502
+ subject.update_server(42, :foo => 'bar')
503
+ end
504
+
505
+ it 'formats the keys of returned response' do
506
+ allow(subject.http_client).to receive(:put).and_return(response)
507
+ keys = subject.update_server(42, :foo => 'bar').keys
508
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
509
+ end
510
+
511
+ end
512
+
513
+ describe '#delete_server' do
514
+
515
+ let(:response) {
516
+ {
517
+ "ErrorCode" => "0",
518
+ "Message" => "Server Production Testing removed."
519
+ }
520
+ }
521
+
522
+ it 'performs a DELETE request to /servers/:id endpoint' do
523
+ allow(subject.http_client).to receive(:delete).
524
+ with('servers/42').and_return(response)
525
+ subject.delete_server(42)
526
+ end
527
+
528
+ it 'formats the keys of returned response' do
529
+ allow(subject.http_client).to receive(:delete).and_return(response)
530
+ keys = subject.delete_server(42).keys
531
+ expect(keys.all? { |k| k.is_a?(Symbol) }).to be_true
532
+ end
533
+
534
+ end
535
+
536
+ end
537
+
538
+ end
@@ -170,6 +170,48 @@ describe Postmark::ApiClient do
170
170
  end
171
171
  end
172
172
 
173
+ describe '#messages' do
174
+
175
+ context 'given outbound' do
176
+
177
+ let(:response) {
178
+ {'TotalCount' => 5,
179
+ 'Messages' => [{}].cycle(5).to_a}
180
+ }
181
+
182
+ it 'returns an enumerator' do
183
+ expect(subject.messages).to be_kind_of(Enumerable)
184
+ end
185
+
186
+ it 'loads outbound messages' do
187
+ allow(subject.http_client).to receive(:get).
188
+ with('messages/outbound', an_instance_of(Hash)).and_return(response)
189
+ expect(subject.messages.count).to eq(5)
190
+ end
191
+
192
+ end
193
+
194
+ context 'given inbound' do
195
+
196
+ let(:response) {
197
+ {'TotalCount' => 5,
198
+ 'InboundMessages' => [{}].cycle(5).to_a}
199
+ }
200
+
201
+ it 'returns an enumerator' do
202
+ expect(subject.messages(:inbound => true)).to be_kind_of(Enumerable)
203
+ end
204
+
205
+ it 'loads inbound messages' do
206
+ allow(subject.http_client).to receive(:get).
207
+ with('messages/inbound', an_instance_of(Hash)).and_return(response)
208
+ expect(subject.messages(:inbound => true).count).to eq(5)
209
+ end
210
+
211
+ end
212
+
213
+ end
214
+
173
215
  describe '#get_messages' do
174
216
  let(:http_client) { subject.http_client }
175
217
 
@@ -199,6 +241,33 @@ describe Postmark::ApiClient do
199
241
  end
200
242
  end
201
243
 
244
+ describe '#get_messages_count' do
245
+
246
+ let(:response) { {'TotalCount' => 42} }
247
+
248
+ context 'given outbound' do
249
+
250
+ it 'requests and returns outbound messages count' do
251
+ allow(subject.http_client).to receive(:get).
252
+ with('messages/outbound', an_instance_of(Hash)).and_return(response)
253
+ expect(subject.get_messages_count).to eq(42)
254
+ expect(subject.get_messages_count(:inbound => false)).to eq(42)
255
+ end
256
+
257
+ end
258
+
259
+ context 'given inbound' do
260
+
261
+ it 'requests and returns inbound messages count' do
262
+ allow(subject.http_client).to receive(:get).
263
+ with('messages/inbound', an_instance_of(Hash)).and_return(response)
264
+ expect(subject.get_messages_count(:inbound => true)).to eq(42)
265
+ end
266
+
267
+ end
268
+
269
+ end
270
+
202
271
  describe '#get_message' do
203
272
  let(:id) { '8ad0e8b0-xxxx-xxxx-951d-223c581bb467' }
204
273
  let(:http_client) { subject.http_client }
@@ -255,6 +324,21 @@ describe Postmark::ApiClient do
255
324
  end
256
325
  end
257
326
 
327
+ describe '#bounces' do
328
+
329
+ it 'returns an Enumerator' do
330
+ expect(subject.bounces).to be_kind_of(Enumerable)
331
+ end
332
+
333
+ it 'requests data at /bounces' do
334
+ allow(subject.http_client).to receive(:get).
335
+ with('bounces', an_instance_of(Hash)).
336
+ and_return('TotalCount' => 1, 'Bounces' => [{}])
337
+ expect(subject.bounces.first(5).count).to eq(1)
338
+ end
339
+
340
+ end
341
+
258
342
  describe "#get_bounces" do
259
343
  let(:http_client) { subject.http_client }
260
344
  let(:options) { {:foo => :bar} }
@@ -85,7 +85,7 @@ describe Postmark::Bounce do
85
85
 
86
86
  describe "#dump" do
87
87
 
88
- let(:bounce_body) { mock }
88
+ let(:bounce_body) { double }
89
89
  let(:response) { {:body => bounce_body} }
90
90
  let(:api_client) { Postmark.api_client }
91
91
 
@@ -0,0 +1,52 @@
1
+ require 'spec_helper'
2
+
3
+ describe Postmark::Client do
4
+
5
+ subject { Postmark::Client.new('abcd-efgh') }
6
+
7
+ describe 'instance' do
8
+
9
+ describe '#find_each' do
10
+
11
+ let(:path) { 'resources' }
12
+ let(:name) { 'Resources' }
13
+ let(:response) {
14
+ {
15
+ 'TotalCount' => 10,
16
+ name => [{'Foo' => 'bar'}, {'Bar' => 'foo'}]
17
+ }
18
+ }
19
+
20
+ it 'returns an enumerator' do
21
+ expect(subject.find_each(path, name)).to be_kind_of(Enumerable)
22
+ end
23
+
24
+ it 'can be iterated' do
25
+ collection = [{:foo => 'bar'}, {:bar => 'foo'}].cycle(5)
26
+ allow(subject.http_client).
27
+ to receive(:get).with(path, an_instance_of(Hash)).
28
+ exactly(5).times.and_return(response)
29
+ expect { |b| subject.find_each(path, name, :count => 2).each(&b) }.
30
+ to yield_successive_args(*collection)
31
+ end
32
+
33
+ # Only Ruby >= 2.0.0 supports Enumerator#size
34
+ it 'lazily calculates the collection size',
35
+ :skip_ruby_version => ['1.8.7', '1.9'] do
36
+ allow(subject.http_client).
37
+ to receive(:get).exactly(1).times.and_return(response)
38
+ collection = subject.find_each(path, name, :count => 2)
39
+ expect(collection.size).to eq(10)
40
+ end
41
+
42
+ it 'iterates over the collection to count it' do
43
+ allow(subject.http_client).
44
+ to receive(:get).exactly(5).times.and_return(response)
45
+ expect(subject.find_each(path, name, :count => 2).count).to eq(10)
46
+ end
47
+
48
+ end
49
+
50
+ end
51
+
52
+ end