em-smsified 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,15 @@
1
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
2
+ %w(
3
+ cgi
4
+ time
5
+ eventmachine
6
+ em-http-request
7
+ yajl
8
+ em-smsified/helpers
9
+ em-smsified/response
10
+ em-smsified/base
11
+ em-smsified/subscriptions
12
+ em-smsified/reporting
13
+ em-smsified/oneapi
14
+ em-smsified/incoming_message
15
+ ).each { |lib| require lib }
@@ -0,0 +1,559 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+
3
+ # These tests are all local unit tests
4
+ WebMock.disable_net_connect!
5
+
6
+ def wrap_and_run(obj, message, *args)
7
+ EventMachine.run_block do
8
+ obj.send(message, *args) do |response|
9
+ return response
10
+ end
11
+ end
12
+ end
13
+
14
+
15
+ describe "Smsified" do
16
+ def failed
17
+ EventMachine.stop
18
+ fail
19
+ end
20
+
21
+ before(:all) do
22
+ @username = 'user'
23
+ @password = 'pass'
24
+ @address = '14155551212'
25
+ @sender_address = '13035551212'
26
+ @request_uri = "https://api.smsified.com/v1/smsmessaging/outbound/#{@sender_address}/requests"
27
+ end
28
+
29
+ describe "Helpers" do
30
+ before(:all) do
31
+ class Foo
32
+ include EventMachine::Smsified::Helpers
33
+
34
+ attr_reader :keys, :query_string
35
+
36
+ def initialize(hash)
37
+ @keys = camelcase_keys(hash)
38
+ @query_string = build_query_string(hash)
39
+ end
40
+ end
41
+
42
+ @foo = Foo.new({ :destination_address => 'foo',
43
+ :notify_url => 'bar',
44
+ :client_correlator => 'baz',
45
+ :callback_data => 'donkey' })
46
+ end
47
+
48
+ it 'Should camelcase the appropriate keys' do
49
+ camelcased_keys = @foo.keys
50
+
51
+ camelcased_keys[:destinationAddress].should eql 'foo'
52
+ camelcased_keys[:notifyURL].should eql 'bar'
53
+ camelcased_keys[:clientCorrelator].should eql 'baz'
54
+ camelcased_keys[:callbackData].should eql 'donkey'
55
+ end
56
+
57
+ it 'Should build a proper query string' do
58
+ @foo.query_string.should eql "destinationAddress=foo&notifyURL=bar&clientCorrelator=baz&callbackData=donkey"
59
+ end
60
+ end
61
+
62
+ describe "OneAPI" do
63
+ before(:all) do
64
+ @one_api = EventMachine::Smsified::OneAPI.new :username => @username, :password => @password, :debug => true
65
+
66
+ @message_sent = { "resourceReference" => { "resourceURL" => "https://api.smsified.com/v1/smsmessaging/outbound/tel%3A%2B#{@sender_address}/requests/795bd02c8e343b2dfd673b67dd0ee55a" } }
67
+ end
68
+
69
+ before(:each) do
70
+ #Because WebMock configures a global RSpect WebMock.reset!, we need to set up the stub before each spec instead of on :all
71
+ stub_request(:post, @request_uri).
72
+ to_return(:status => 200, :body => @message_sent.to_json, :headers => {})
73
+ end
74
+
75
+ it "Should get errors if instantiating without all of the right parameters" do
76
+ begin
77
+ EventMachine::Smsified::OneAPI.new 'foobar'
78
+ rescue => e
79
+ e.to_s.should eql 'an options Hash is required'
80
+ end
81
+
82
+ begin
83
+ EventMachine::Smsified::OneAPI.new(:password => nil)
84
+ rescue => e
85
+ e.to_s.should eql ':username required'
86
+ end
87
+
88
+ begin
89
+ EventMachine::Smsified::OneAPI.new(:username => @username)
90
+ rescue => e
91
+ e.to_s.should eql ':password required'
92
+ end
93
+ end
94
+
95
+ it "Should raise an error if no :sender_address specified" do
96
+ begin
97
+ @one_api.send_sms('foobar')
98
+ rescue => e
99
+ e.to_s.should eql 'an options Hash is required'
100
+ end
101
+
102
+ begin
103
+ @one_api.send_sms({})
104
+ rescue => e
105
+ e.to_s.should eql ':sender_address is required'
106
+ end
107
+ end
108
+
109
+ it "Should not raise an error if a :sender_address was specified at instantiation" do
110
+ one_api = EventMachine::Smsified::OneAPI.new :username => @username, :password => @password, :debug => true, :sender_address => @sender_address
111
+
112
+ response = wrap_and_run(one_api, :send_sms, :address => @address, :message => 'Hola from RSpec!')
113
+
114
+ response.data.should eql @message_sent
115
+ end
116
+
117
+ it "Should raise an error if all required params are not passed when sending an SMS" do
118
+ begin
119
+ @one_api.send_sms(:message => 'Hola from RSpec!', :sender_address => @sender_address)
120
+ rescue => e
121
+ e.to_s.should eql ':address is required'
122
+ end
123
+
124
+ begin
125
+ @one_api.send_sms(:address => @address, :sender_address => @sender_address)
126
+ rescue => e
127
+ e.to_s.should eql ':message is required'
128
+ end
129
+ end
130
+
131
+ it "Should instantiate a OneAPI object" do
132
+ oneapi = EventMachine::Smsified::OneAPI.new :username => @username, :password => @password, :debug => true
133
+ oneapi.instance_of?(EventMachine::Smsified::OneAPI).should eql true
134
+ end
135
+
136
+ it "Should send an SMS" do
137
+ response = wrap_and_run(@one_api, :send_sms, :address => @address, :message => 'Hola from RSpec!', :sender_address => @sender_address)
138
+
139
+ response.data.should eql @message_sent
140
+
141
+ a_request(:post, @request_uri).
142
+ with{ |req| req.body == "address=14155551212&message=Hola+from+RSpec%21"}.should have_been_made
143
+ end
144
+
145
+ it "Should send an SMS to multiple destinations" do
146
+ response = wrap_and_run(@one_api, :send_sms, :address => ['14155551212', '13035551212'],
147
+ :message => 'Hola from RSpec!',
148
+ :sender_address => @sender_address)
149
+ response.data.should eql @message_sent
150
+
151
+ a_request(:post, @request_uri).
152
+ with{ |req| req.body == "address=14155551212&address=13035551212&message=Hola+from+RSpec%21"}.should have_been_made
153
+ end
154
+ end
155
+
156
+ describe 'Subscriptions' do
157
+ before(:all) do
158
+ @subscriptions = EventMachine::Smsified::Subscriptions.new :username => @username, :password => @password, :debug => true
159
+ end
160
+
161
+ it "Should instantiate a Subscriptions object" do
162
+ smsified = EventMachine::Smsified::Subscriptions.new(:username => @username, :password => @password)
163
+ smsified.instance_of?(EventMachine::Smsified::Subscriptions).should eql true
164
+ end
165
+
166
+ it "Should get errors if instantiating without all of the right parameters" do
167
+ begin
168
+ EventMachine::Smsified::Subscriptions.new 'foobar'
169
+ rescue => e
170
+ e.to_s.should eql 'an options Hash is required'
171
+ end
172
+
173
+ begin
174
+ EventMachine::Smsified::Subscriptions.new({})
175
+ rescue => e
176
+ e.to_s.should eql ':username required'
177
+ end
178
+
179
+ begin
180
+ EventMachine::Smsified::Subscriptions.new(:username => @username)
181
+ rescue => e
182
+ e.to_s.should eql ':password required'
183
+ end
184
+ end
185
+
186
+ describe 'Listing subscriptions' do
187
+ before(:all) do
188
+ @no_subscription = { "inboundSubscriptionList" => { "numberOfSubscriptions" => "0" } }
189
+
190
+ @inbound_subscriptions = {
191
+ "inboundSubscriptionList" => {
192
+ "inboundSubscription" => [
193
+ {
194
+ "resourceURL" => "https://api.smsified.com/v1/smsmessaging/inbound/subscriptions/3cf88f9cfd0dae96cbfdf16f18c07411",
195
+ "subscriptionId" => "3cf88f9cfd0dae96cbfdf16f18c07411",
196
+ "notificationFormat" => "JSON",
197
+ "destinationAddress" => "tel:+17177455076",
198
+ "notifyURL" => "http://98.207.5.162:8080"
199
+ },
200
+ {
201
+ "resourceURL" => "https://api.smsified.com/v1/smsmessaging/inbound/subscriptions/75bb5bef239aed425c2966cbb95f33c9",
202
+ "subscriptionId" => "75bb5bef239aed425c2966cbb95f33c9",
203
+ "notificationFormat" => "JSON",
204
+ "destinationAddress" => "tel:+17177455076",
205
+ "notifyURL" => "http://98.207.5.162:8080"
206
+ }
207
+ ],
208
+ "numberOfSubscriptions" => "2",
209
+ "resourceURL" => "https://api.smsified.com/v1/smsmessaging/inbound/subscriptions"
210
+ }
211
+ }
212
+
213
+ @outbound_subscriptions = {
214
+ "outboundSubscriptionList" => {
215
+ "numberOfSubscriptions" => "2",
216
+ "resourceURL" => "https://api.smsified.com/v1/smsmessaging/outbound/subscriptions",
217
+ "outboundSubscription" => [
218
+ {
219
+ "senderAddress" => "tel:+17177455076",
220
+ "resourceURL" => "https://api.smsified.com/v1/smsmessaging/outbound/subscriptions/68faa512b1c81ee0d33a6b97004d1212",
221
+ "subscriptionId" => "68faa512b1c81ee0d33a6b97004d1212",
222
+ "notificationFormat" => "JSON",
223
+ "notifyURL" => "http://98.207.5.162:8080"
224
+ },
225
+ {
226
+ "senderAddress" => "tel:+17177455076",
227
+ "resourceURL" => "https://api.smsified.com/v1/smsmessaging/outbound/subscriptions/6e64fb72cd2a27b8a9460caccbd4dc53",
228
+ "subscriptionId" => "6e64fb72cd2a27b8a9460caccbd4dc53",
229
+ "notificationFormat" => "JSON",
230
+ "notifyURL" => "http://98.207.5.162:8080"
231
+ }
232
+ ]
233
+ }
234
+ }
235
+ end
236
+ before(:each) do
237
+ stub_request(:get,
238
+ "https://api.smsified.com/v1/smsmessaging/inbound/subscriptions?destinationAddress=#{@address}").
239
+ with(:headers => {'Authorization' => [@username, @password]}).
240
+ to_return(:status => ["200", "OK"],
241
+ :body => @no_subscription.to_json)
242
+
243
+ stub_request(:get,
244
+ "https://api.smsified.com/v1/smsmessaging/inbound/subscriptions?destinationAddress=#{@sender_address}").
245
+ with(:headers => {'Authorization' => [@username, @password]}).
246
+ to_return(:status => ["200", "OK"],
247
+ :body => @inbound_subscriptions.to_json)
248
+
249
+ stub_request(:get,
250
+ "https://api.smsified.com/v1/smsmessaging/outbound/subscriptions?senderAddress=#{@sender_address}").
251
+ with(:headers => {'Authorization' => [@username, @password]}).
252
+ to_return(
253
+ :status => ["200", "OK"],
254
+ :body => @outbound_subscriptions.to_json)
255
+ end
256
+
257
+ it "Should let me instantiate a OneAPI object and call subscription methods" do
258
+ one_api = EventMachine::Smsified::OneAPI.new :username => @username, :password => @password, :debug => true
259
+ inbound_subscriptions = wrap_and_run(one_api, :inbound_subscriptions, @address)
260
+ inbound_subscriptions.data.should eql @no_subscription
261
+ end
262
+
263
+ it "Should find no subscriptions" do
264
+ inbound_subscriptions = wrap_and_run(@subscriptions, :inbound_subscriptions, @address)
265
+ inbound_subscriptions.data.should eql @no_subscription
266
+ end
267
+
268
+ it "Should get a list of inbound subscriptions" do
269
+ inbound_subscriptions = wrap_and_run(@subscriptions, :inbound_subscriptions, @sender_address)
270
+ inbound_subscriptions.http.response_header.status.should eql 200
271
+ inbound_subscriptions.data.should eql @inbound_subscriptions
272
+ end
273
+
274
+ it "Should get a list of outbound subscriptions" do
275
+ outbound_subscriptions = wrap_and_run(@subscriptions, :outbound_subscriptions, @sender_address)
276
+ outbound_subscriptions.http.response_header.status.should eql 200
277
+ outbound_subscriptions.data.should eql @outbound_subscriptions
278
+ end
279
+ end
280
+
281
+ describe 'Create subscriptions' do
282
+ before(:all) do
283
+ @inbound_subscription = { "resourceReference" => { "resourceURL" => "https://api.smsified.com/v1/smsmessaging/inbound/subscriptions/e636368b7fddac0e93e34ae03bad33dd" } }
284
+ @outbound_subscription = { "resourceReference" => { "resourceURL" => "https://api.smsified.com/v1/smsmessaging/outbound/subscriptions/4bc465cd394c9f5e78802af5ad6bb442" } }
285
+ @inbound_uri = %r|https://api.smsified.com/v1/smsmessaging/inbound/subscriptions?|
286
+ @outbound_uri = %r|https://api.smsified.com/v1/smsmessaging/outbound/17177455076/subscriptions?|
287
+ end
288
+
289
+ it 'Should create an inbound subscription' do
290
+ stub_request(:post, @inbound_uri).
291
+ with(:headers => {'Authorization' => [@username, @password]}).
292
+ to_return(:status => ["200", "OK"],
293
+ :body => @inbound_subscription.to_json)
294
+
295
+ result = wrap_and_run(@subscriptions, :create_inbound_subscription, '17177455076', :notify_url => 'http://foobar.com')
296
+ result.http.response_header.status.should eql 200
297
+ result.data.should eql @inbound_subscription
298
+ a_request(:post, @inbound_uri).
299
+ with{ |req| req.body == "destinationAddress=17177455076&notifyURL=http%3A%2F%2Ffoobar.com"}.should have_been_made
300
+ end
301
+
302
+ it 'Should create an outbound subscription' do
303
+ stub_request(:post, @outbound_uri).
304
+ with(:headers => {'Authorization' => [@username, @password]}).
305
+ to_return(:status => ["200", "OK"],
306
+ :body => @outbound_subscription.to_json)
307
+
308
+ result = wrap_and_run(@subscriptions, :create_outbound_subscription, '17177455076', :notify_url => 'http://foobar.com')
309
+ result.http.response_header.status.should eql 200
310
+ result.data.should eql @outbound_subscription
311
+ a_request(:post, @outbound_uri).
312
+ with{ |req| req.body == "notifyURL=http%3A%2F%2Ffoobar.com"}.should have_been_made
313
+ end
314
+ end
315
+
316
+ describe 'Updated subscriptions' do
317
+ before(:all) do
318
+ @inbound_subscription = { "resourceReference" => { "resourceURL" => "https://api.smsified.com/v1/smsmessaging/inbound/subscriptions/e636368b7fddac0e93e34ae03bad33dd" } }
319
+ @outbound_subscription = { "resourceReference" => { "resourceURL" => "https://api.smsified.com/v1/smsmessaging/outbound/subscriptions/4bc465cd394c9f5e78802af5ad6bb442" } }
320
+
321
+ @inbound_uri = %r|https://api.smsified.com/v1/smsmessaging/inbound/subscriptions?|
322
+
323
+ @outbound_uri = "https://api.smsified.com/v1/smsmessaging/outbound/#{@sender_address}/subscriptions"
324
+ end
325
+
326
+ it 'Should update an inbound subscription' do
327
+ stub_request(:post, @inbound_uri).
328
+ with(:headers => {'Authorization' => [@username, @password]}).
329
+ to_return(:status => ["200", "OK"],
330
+ :body => @inbound_subscription.to_json)
331
+
332
+ result = wrap_and_run(@subscriptions, :update_inbound_subscription, 'c880c96f161f6220d4977b29b4bfc111', :notify_url => 'http://foobar1.com')
333
+
334
+ result.http.response_header.status.should eql 200
335
+ result.data.should eql @inbound_subscription
336
+ a_request(:post, @inbound_uri).
337
+ with{ |req| req.body == "notifyURL=http%3A%2F%2Ffoobar1.com"}.should have_been_made
338
+ end
339
+
340
+ it 'Should update an outbound subscription' do
341
+ stub_request(:post, @outbound_uri).
342
+ with(:headers => {'Authorization' => [@username, @password]}).
343
+ to_return(:status => ["200", "OK"],
344
+ :body => @outbound_subscription.to_json)
345
+
346
+ result = wrap_and_run(@subscriptions, :update_outbound_subscription, @sender_address, :notify_url => 'http://foobar.com')
347
+ result.http.response_header.status.should eql 200
348
+ result.data.should eql @outbound_subscription
349
+ a_request(:post, @outbound_uri).
350
+ with{ |req| req.body == "notifyURL=http%3A%2F%2Ffoobar.com" }.should have_been_made
351
+ end
352
+ end
353
+
354
+ describe 'Deleting subscriptions' do
355
+ before(:each) do
356
+ stub_request(:delete, %r|https://api.smsified.com/v1/smsmessaging/?|).
357
+ with(:headers => {'Authorization' => [@username, @password]}).
358
+ to_return(:status => ["204", "OK"])
359
+ end
360
+
361
+ it "Should delete an inbound subscription" do
362
+ result = wrap_and_run(@subscriptions, :delete_inbound_subscription, '3cf88f9cfd0dae96cbfdf16f18c07411')
363
+ result.http.response_header.status.should eql 204
364
+ end
365
+
366
+ it "Should delete an outbound subscription" do
367
+
368
+ result = wrap_and_run(@subscriptions, :delete_outbound_subscription, '342b61efc3ba9fd2fd992e58903ef050')
369
+ result.http.response_header.status.should eql 204
370
+ end
371
+ end
372
+ end
373
+
374
+ describe "Reporting" do
375
+ before(:all) do
376
+ @reporting = EventMachine::Smsified::Reporting.new :username => @username, :password => @password, :debug => true
377
+
378
+ @delivery_status = {
379
+ "deliveryInfoList" => {
380
+ "deliveryInfo" => [
381
+ {
382
+ "address" => "tel:+14153675082",
383
+ "parts" => "1",
384
+ "senderAddress" => "tel:+17177455076",
385
+ "messageId" => "74ae6147f915eabf87b35b9ea30c5916",
386
+ "code" => "0",
387
+ "createdDateTime" => 'Fri May 13 16:14:50 UTC 2011',
388
+ "sentDateTime" => 'Fri May 13 16:14:53 UTC 2011',
389
+ "deliveryStatus" => "DeliveredToNetwork",
390
+ "message" => "Hola from RSpec!",
391
+ "direction" => "outbound"
392
+ }
393
+ ],
394
+ "resourceURL" => "https://api.smsified.com/v1/smsmessaging/outbound/tel%3A%2B17177455076/requests/795bd02c8e343b2dfd673b67dd0ee55a/deliveryInfos"
395
+ }
396
+ }
397
+
398
+ @message = { "parts" => 1,
399
+ "sent" => "2011-05-13T16:14:50.480+0000",
400
+ "code" => "0",
401
+ "body" => "Hola from RSpec!",
402
+ "messageId" => "74ae6147f915eabf87b35b9ea30c5916",
403
+ "from" => "17177455076",
404
+ "to" => "14153675082",
405
+ "direction" => "out",
406
+ "status" => "success",
407
+ "created" => "2011-05-13T16:14:50.480+0000"}
408
+
409
+ @message_range = [
410
+ {
411
+ "parts" => 1,
412
+ "sent" => "2011-05-13T20:27:56.690+0000",
413
+ "code" => "-1",
414
+ "body" => "foobar9446",
415
+ "messageId" => "d194e91c32de943ae942ad4043b7905b",
416
+ "from" => "17177455076",
417
+ "to" => "14155551",
418
+ "direction" => "out",
419
+ "status" => "fail",
420
+ "created" => "2011-05-13T20:27:56.690+0000"
421
+ },
422
+ {
423
+ "parts" => 1,
424
+ "sent" => "2011-05-13T20:27:53.660+0000",
425
+ "code" => "-1",
426
+ "body" => "foobar4374",
427
+ "messageId" => "4d9237b323618ab164fb6d646882da99",
428
+ "from" => "17177455076",
429
+ "to" => "14155551212",
430
+ "direction" => "out",
431
+ "status" => "fail",
432
+ "created" => "2011-05-13T20:27:53.660+0000"
433
+ }
434
+ ]
435
+ end
436
+ before(:each) do
437
+ stub_request(:get, "https://api.smsified.com/v1/messages/74ae6147f915eabf87b35b9ea30c5916").
438
+ with(:headers => {'Authorization' => [@username, @password]}).
439
+ to_return(:status => ["200", "OK"],
440
+ :body => @message.to_json)
441
+
442
+ stub_request(:get, "https://api.smsified.com/v1/messages?start=2011-05-12&end=2011-05-12").
443
+ with(:headers => {'Authorization' => [@username, @password]}).
444
+ to_return(:status => ["200", "OK"],
445
+ :headers => {"Content-Type" => "application/json"},
446
+ :body => @message_range.to_json)
447
+
448
+ stub_request(:get, "https://api.smsified.com/v1/smsmessaging/outbound/#{@sender_address}/requests/795bd02c8e343b2dfd673b67dd0ee55a/deliveryInfos").
449
+ with(:headers => {'Authorization' => [@username, @password]}).
450
+ to_return(:status => ["200", "OK"],
451
+ :body => @delivery_status.to_json)
452
+ end
453
+
454
+ it "Should instantiate a Reporting object" do
455
+ reporting = EventMachine::Smsified::Reporting.new :username => 'smsified_tester_smsified', :password => 'bug.fungus52', :debug => true
456
+ reporting.instance_of?(EventMachine::Smsified::Reporting).should eql true
457
+ end
458
+
459
+ it "Should get errors if instantiating without all of the right parameters" do
460
+ begin
461
+ EventMachine::Smsified::Reporting.new 'foobar'
462
+ rescue => e
463
+ e.to_s.should eql 'an options Hash is required'
464
+ end
465
+
466
+ begin
467
+ EventMachine::Smsified::Reporting.new({})
468
+ rescue => e
469
+ e.to_s.should eql ':username required'
470
+ end
471
+
472
+ begin
473
+ EventMachine::Smsified::Reporting.new(:username => @username)
474
+ rescue => e
475
+ e.to_s.should eql ':password required'
476
+ end
477
+ end
478
+
479
+ it "should get json by default" do
480
+ response = wrap_and_run(@reporting, :search_sms, 'start=2011-05-12&end=2011-05-12')
481
+ response.http.response_header["CONTENT_TYPE"].should eql "application/json"
482
+ end
483
+
484
+ it "Should raise an error if no :sender_address specified" do
485
+ begin
486
+ wrap_and_run(@reporting, :delivery_status, 'foobar')
487
+ rescue => e
488
+ e.to_s.should eql 'an options Hash is required'
489
+ end
490
+
491
+ begin
492
+ @reporting.delivery_status({})
493
+ rescue => e
494
+ e.to_s.should eql ':sender_address is required'
495
+ end
496
+ end
497
+
498
+ it "Should not raise an error if a :sender_address was specified at instantiation" do
499
+ reporting = EventMachine::Smsified::Reporting.new :username => @username, :password => @password, :debug => true, :sender_address => @sender_address
500
+ delivery_response = wrap_and_run(reporting, :delivery_status, :request_id => '795bd02c8e343b2dfd673b67dd0ee55a')
501
+ delivery_response.data.should == @delivery_status
502
+ end
503
+
504
+ it "Should retrieve an SMS message" do
505
+ response = wrap_and_run(@reporting, :retrieve_sms, '74ae6147f915eabf87b35b9ea30c5916')
506
+ response.data.should eql @message
507
+ end
508
+
509
+ it "Should retrieve SMS messages based on a query string" do
510
+ response = wrap_and_run(@reporting, :search_sms, 'start=2011-05-12&end=2011-05-12')
511
+ response.data.should eql @message_range
512
+ end
513
+
514
+ it "Should send an SMS and get the Delivery status" do
515
+ delivery_response = wrap_and_run(@reporting, :delivery_status, :request_id => '795bd02c8e343b2dfd673b67dd0ee55a', :sender_address => @sender_address)
516
+ delivery_response.data.should == @delivery_status
517
+ end
518
+
519
+ it "Should let me instantiate a OneAPI object and call reporting methods" do
520
+ one_api = EventMachine::Smsified::OneAPI.new :username => @username, :password => @password, :debug => true
521
+ delivery_response = wrap_and_run(one_api, :delivery_status, :request_id => '795bd02c8e343b2dfd673b67dd0ee55a', :sender_address => @sender_address)
522
+ delivery_response.data.should eql @delivery_status
523
+
524
+ sms_message = wrap_and_run(one_api, :retrieve_sms, '74ae6147f915eabf87b35b9ea30c5916')
525
+ sms_message.data.should eql @message
526
+ end
527
+ end
528
+
529
+ describe 'IncomingMessage' do
530
+ it 'Should parse an incoming message from SMSified' do
531
+ json = '{
532
+ "inboundSMSMessageNotification": {
533
+ "inboundSMSMessage": {
534
+ "dateTime": "2011-05-11T18:05:54.546Z",
535
+ "destinationAddress": "16575550100",
536
+ "message": "Inbound test",
537
+ "messageId": "ef795d3dac56a62fef3ff1852b0c123a",
538
+ "senderAddress": "14075550100"
539
+ }
540
+ }
541
+ }'
542
+
543
+ incoming_message = EventMachine::Smsified::IncomingMessage.new json
544
+ incoming_message.date_time.should eql Time.parse '2011-05-11T18:05:54.546Z'
545
+ incoming_message.destination_address.should eql '16575550100'
546
+ incoming_message.message.should eql 'Inbound test'
547
+ incoming_message.message_id.should eql 'ef795d3dac56a62fef3ff1852b0c123a'
548
+ incoming_message.sender_address.should eql '14075550100'
549
+ end
550
+
551
+ it "Should raise an error if JSON not passed" do
552
+ lambda { EventMachine::Smsified::IncomingMessage.new 'foobar' }.should raise_error(EventMachine::Smsified::IncomingMessage::MessageError)
553
+ end
554
+
555
+ it "Should raise an error if a different type than an IncomingMessage is passed" do
556
+ lambda { EventMachine::Smsified::IncomingMessage.new "{ 'foo': 'bar'}" }.should raise_error(EventMachine::Smsified::IncomingMessage::MessageError)
557
+ end
558
+ end
559
+ end
@@ -0,0 +1,16 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'em-smsified'
5
+ require 'awesome_print'
6
+ require 'json'
7
+ require 'webmock/rspec'
8
+
9
+
10
+ # Requires supporting files with custom matchers and macros, etc,
11
+ # in ./support/ and its subdirectories.
12
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
13
+
14
+ RSpec.configure do |config|
15
+
16
+ end