Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F90383970
TwilioTest.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Fri, Nov 1, 04:13
Size
28 KB
Mime Type
text/x-php
Expires
Sun, Nov 3, 04:13 (2 d)
Engine
blob
Format
Raw Data
Handle
22065727
Attached To
rPH Phabricator
TwilioTest.php
View Options
<?php
use
\Mockery
as
m
;
class
TwilioTest
extends
PHPUnit_Framework_TestCase
{
protected
$formHeaders
=
array
(
'Content-Type'
=>
'application/x-www-form-urlencoded'
);
protected
$callParams
=
array
(
'To'
=>
'123'
,
'From'
=>
'123'
,
'Url'
=>
'http://example.com'
);
protected
$nginxError
=
array
(
500
,
array
(
'Content-Type'
=>
'text/html'
),
'<html>Nginx 500 error</html>'
);
protected
$pagingParams
=
array
(
'Page'
=>
'0'
,
'PageSize'
=>
'10'
);
function
tearDown
()
{
m
::
close
();
}
function
getClient
(
$http
)
{
return
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
}
function
createMockHttp
(
$url
,
$method
,
$response
,
$params
=
null
,
$status
=
200
)
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
if
(
$method
===
'post'
)
{
$http
->
shouldReceive
(
'post'
)->
once
()->
with
(
"/2010-04-01/Accounts/AC123$url.json"
,
$this
->
formHeaders
,
http_build_query
(
$params
)
)->
andReturn
(
array
(
$status
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
$response
)
)
);
}
else
{
$query
=
empty
(
$params
)
?
''
:
'?'
.
http_build_query
(
$params
);
$http
->
shouldReceive
(
$method
)->
once
()->
with
(
"/2010-04-01/Accounts/AC123$url.json$query"
)->
andReturn
(
array
(
$status
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
$response
)
)
);
}
return
$http
;
}
/**
* @dataProvider uriTestProvider
*/
function
testRequestUriConstructedProperly
(
$path
,
$params
,
$full_uri
,
$end_string
)
{
$this
->
assertSame
(
$end_string
,
Services_Twilio
::
getRequestUri
(
$path
,
$params
,
$full_uri
));
}
function
uriTestProvider
()
{
return
array
(
array
(
'/2010-04-01/Accounts'
,
array
(
'FriendlyName'
=>
'hi'
),
false
,
'/2010-04-01/Accounts.json?FriendlyName=hi'
),
array
(
'/2010-04-01/Accounts'
,
array
(),
false
,
'/2010-04-01/Accounts.json'
),
array
(
'/2010-04-01/Accounts.json'
,
array
(),
true
,
'/2010-04-01/Accounts.json'
),
array
(
'/2010-04-01/Accounts.json'
,
array
(
'FriendlyName'
=>
'hi'
),
true
,
'/2010-04-01/Accounts.json'
),
array
(
'/2010-04-01/Accounts'
,
array
(
'FriendlyName'
=>
'hi'
,
'foo'
=>
'bar'
),
false
,
'/2010-04-01/Accounts.json?FriendlyName=hi&foo=bar'
),
);
}
function
testNeedsRefining
()
{
$http
=
$this
->
createMockHttp
(
''
,
'get'
,
array
(
'sid'
=>
'AC123'
,
'friendly_name'
=>
'Robert Paulson'
,
)
);
$client
=
$this
->
getClient
(
$http
);
$this
->
assertEquals
(
'AC123'
,
$client
->
account
->
sid
);
$this
->
assertEquals
(
'Robert Paulson'
,
$client
->
account
->
friendly_name
);
}
function
testAccessSidAvoidsNetworkCall
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'get'
)->
never
();
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$client
->
account
->
sid
;
}
function
testOnlyOneClientCreated
()
{
$client
=
new
Services_Twilio
(
'AC123'
,
'456'
);
$client
->
account
->
client
->
sid
=
'CL456'
;
$this
->
assertSame
(
'CL456'
,
$client
->
account
->
sandbox
->
client
->
sid
);
}
function
testNullVersionReturnsNewest
()
{
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
null
);
$this
->
assertEquals
(
'2010-04-01'
,
$client
->
getVersion
());
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'v1'
);
$this
->
assertEquals
(
'2010-04-01'
,
$client
->
getVersion
());
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
);
$this
->
assertEquals
(
'2010-04-01'
,
$client
->
getVersion
());
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2008-08-01'
);
$this
->
assertEquals
(
'2008-08-01'
,
$client
->
getVersion
());
}
function
testObjectLoadsOnlyOnce
()
{
$http
=
$this
->
createMockHttp
(
''
,
'get'
,
array
(
'sid'
=>
'AC123'
,
'friendly_name'
=>
'Robert Paulson'
,
'status'
=>
'active'
,
));
$client
=
$this
->
getClient
(
$http
);
$client
->
account
->
friendly_name
;
$client
->
account
->
friendly_name
;
$client
->
account
->
status
;
}
function
testSubresourceLoad
()
{
$http
=
$this
->
createMockHttp
(
'/Calls/CA123'
,
'get'
,
array
(
'status'
=>
'Completed'
)
);
$client
=
$this
->
getClient
(
$http
);
$this
->
assertEquals
(
'Completed'
,
$client
->
account
->
calls
->
get
(
'CA123'
)->
status
);
}
function
testSubresourceSubresource
()
{
$http
=
$this
->
createMockHttp
(
'/Calls/CA123/Notifications/NO123'
,
'get'
,
array
(
'message_text'
=>
'Foo'
)
);
$client
=
$this
->
getClient
(
$http
);
$notifs
=
$client
->
account
->
calls
->
get
(
'CA123'
)->
notifications
;
$this
->
assertEquals
(
'Foo'
,
$notifs
->
get
(
'NO123'
)->
message_text
);
}
function
testGetIteratorUsesFilters
()
{
$params
=
array_merge
(
$this
->
pagingParams
,
array
(
'StartTime>'
=>
'2012-07-06'
,
));
$response
=
array
(
'total'
=>
1
,
'calls'
=>
array
(
array
(
'status'
=>
'Completed'
,
'sid'
=>
'CA123'
))
);
$http
=
$this
->
createMockHttp
(
'/Calls'
,
'get'
,
$response
,
$params
);
$client
=
$this
->
getClient
(
$http
);
$iterator
=
$client
->
account
->
calls
->
getIterator
(
0
,
10
,
array
(
'StartTime>'
=>
'2012-07-06'
));
foreach
(
$iterator
as
$call
)
{
$this
->
assertEquals
(
'Completed'
,
$call
->
status
);
break
;
}
}
function
testListResource
()
{
$response
=
array
(
'total'
=>
1
,
'calls'
=>
array
(
array
(
'status'
=>
'completed'
,
'sid'
=>
'CA123'
))
);
$http
=
$this
->
createMockHttp
(
'/Calls'
,
'get'
,
$response
,
$this
->
pagingParams
);
$client
=
$this
->
getClient
(
$http
);
$page
=
$client
->
account
->
calls
->
getPage
(
0
,
10
);
$call
=
current
(
$page
->
getItems
());
$this
->
assertEquals
(
'completed'
,
$call
->
status
);
$this
->
assertEquals
(
1
,
$page
->
total
);
}
function
testInstanceResourceUriConstructionFromList
()
{
$response
=
array
(
'total'
=>
1
,
'calls'
=>
array
(
array
(
'status'
=>
'in-progress'
,
'sid'
=>
'CA123'
,
'uri'
=>
'junk_uri'
))
);
$http
=
$this
->
createMockHttp
(
'/Calls'
,
'get'
,
$response
,
$this
->
pagingParams
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/Calls/CA123.json'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'status'
=>
'completed'
))
));
$client
=
$this
->
getClient
(
$http
);
$page
=
$client
->
account
->
calls
->
getPage
(
0
,
10
);
$call
=
current
(
$page
->
getItems
());
/* trigger api fetch by trying to retrieve nonexistent var */
try
{
$call
->
nonexistent
;
}
catch
(
Exception
$e
)
{
// pass
}
$this
->
assertSame
(
$call
->
status
,
'completed'
);
}
function
testInstanceResourceUriConstructionFromGet
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/IncomingPhoneNumbers/PN123.json'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'sms_method'
=>
'POST'
,
'sid'
=>
'PN123'
,
'uri'
=>
'junk_uri'
,
))
));
$http
->
shouldReceive
(
'post'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/IncomingPhoneNumbers/PN123.json'
,
$this
->
formHeaders
,
'SmsMethod=GET'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'sms_method'
=>
'GET'
,
'sid'
=>
'PN123'
,
'uri'
=>
'junk_uri'
))
));
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$number
=
$client
->
account
->
incoming_phone_numbers
->
get
(
'PN123'
);
$this
->
assertSame
(
$number
->
sms_method
,
'POST'
);
$number
->
update
(
array
(
'SmsMethod'
=>
'GET'
));
$this
->
assertSame
(
$number
->
sms_method
,
'GET'
);
}
function
testIterateOverPage
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/Calls.json?Page=0&PageSize=10'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'total'
=>
1
,
'calls'
=>
array
(
array
(
'status'
=>
'Completed'
,
'sid'
=>
'CA123'
))
))
));
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$page
=
$client
->
account
->
calls
->
getPage
(
0
,
10
);
foreach
(
$page
->
getIterator
()
as
$pageitems
)
{
$this
->
assertSame
(
'CA123'
,
$pageitems
->
sid
);
}
}
function
testAsymmetricallyNamedResources
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages.json?Page=0&PageSize=10'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'sms_messages'
=>
array
(
array
(
'status'
=>
'sent'
,
'sid'
=>
'SM123'
)
)))
));
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$sms
=
current
(
$client
->
account
->
sms_messages
->
getPage
(
0
,
10
)->
getItems
());
$this
->
assertEquals
(
'sent'
,
$sms
->
status
);
}
function
testParams
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$qs
=
'Page=0&PageSize=10&FriendlyName=foo&Status=active'
;
$http
->
shouldReceive
(
'get'
)
->
with
(
'/2010-04-01/Accounts.json?'
.
$qs
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
'{"accounts":[]}'
));
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$client
->
accounts
->
getPage
(
0
,
10
,
array
(
'FriendlyName'
=>
'foo'
,
'Status'
=>
'active'
,
));
}
function
testUpdate
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'post'
)->
once
()->
with
(
'/2010-04-01/Accounts/AC123/Calls.json'
,
$this
->
formHeaders
,
http_build_query
(
$this
->
callParams
)
)->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
'{"sid":"CA123"}'
)
);
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$client
->
account
->
calls
->
create
(
'123'
,
'123'
,
'http://example.com'
);
}
function
testModifyLiveCall
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'post'
)->
once
()->
with
(
'/2010-04-01/Accounts/AC123/Calls.json'
,
$this
->
formHeaders
,
http_build_query
(
$this
->
callParams
)
)->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
'{"sid":"CA123"}'
)
);
$http
->
shouldReceive
(
'post'
)->
once
()->
with
(
'/2010-04-01/Accounts/AC123/Calls/CA123.json'
,
$this
->
formHeaders
,
'Status=completed'
)->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
'{"sid":"CA123"}'
)
);
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$calls
=
$client
->
account
->
calls
;
$call
=
$calls
->
create
(
'123'
,
'123'
,
'http://example.com'
);
$call
->
hangup
();
}
function
testUnmute
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/Conferences/CF123/Participants.json?Page=0&PageSize=10'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'participants'
=>
array
(
array
(
'call_sid'
=>
'CA123'
))
))
));
$http
->
shouldReceive
(
'post'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/Conferences/CF123/Participants/CA123.json'
,
$this
->
formHeaders
,
'Muted=true'
)->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
())
));
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$conf
=
$client
->
account
->
conferences
->
get
(
'CF123'
);
$page
=
$conf
->
participants
->
getPage
(
0
,
10
);
foreach
(
$page
->
getItems
()
as
$participant
)
{
$participant
->
mute
();
}
}
function
testResourcePropertiesReflectUpdates
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123.json'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'friendly_name'
=>
'foo'
))
));
$http
->
shouldReceive
(
'post'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123.json'
,
$this
->
formHeaders
,
'FriendlyName=bar'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'friendly_name'
=>
'bar'
))
));
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$this
->
assertEquals
(
'foo'
,
$client
->
account
->
friendly_name
);
$client
->
account
->
update
(
'FriendlyName'
,
'bar'
);
$this
->
assertEquals
(
'bar'
,
$client
->
account
->
friendly_name
);
}
//function testAccessingNonExistentPropertiesErrorsOut
function
testArrayAccessForListResources
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/Calls.json?Page=0&PageSize=50'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'calls'
=>
array
(
array
(
'sid'
=>
'CA123'
))
))
));
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/Calls.json?Page=1&PageSize=50'
)
->
andReturn
(
array
(
400
,
array
(
'Content-Type'
=>
'application/json'
),
'{"status":400,"message":"foo", "code": "20006"}'
));
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
foreach
(
$client
->
account
->
calls
as
$call
)
{
$this
->
assertEquals
(
'CA123'
,
$call
->
sid
);
}
$this
->
assertInstanceOf
(
'Traversable'
,
$client
->
account
->
calls
);
}
function
testDeepPagingUsesAfterSid
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$callsBase
=
'/2010-04-01/Accounts/AC123/Calls.json'
;
$firstPageUri
=
$callsBase
.
'?Page=0&PageSize=1'
;
$afterSidUri
=
$callsBase
.
'?Page=1&PageSize=1&AfterSid=CA123'
;
$secondAfterSidUri
=
$callsBase
.
'?Page=2&PageSize=1&AfterSid=CA456'
;
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
$firstPageUri
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'next_page_uri'
=>
$afterSidUri
,
'calls'
=>
array
(
array
(
'sid'
=>
'CA123'
,
'price'
=>
'-0.02000'
,
))
))
));
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
$afterSidUri
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'next_page_uri'
=>
$secondAfterSidUri
,
'calls'
=>
array
(
array
(
'sid'
=>
'CA456'
,
'price'
=>
'-0.02000'
,
))
))
));
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
$secondAfterSidUri
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'next_page_uri'
=>
null
,
'calls'
=>
array
(
array
(
'sid'
=>
'CA789'
,
'price'
=>
'-0.02000'
,
))
))
));
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/Calls.json?Page=3&PageSize=1'
)
->
andReturn
(
array
(
400
,
array
(
'Content-Type'
=>
'application/json'
),
'{"status":400,"message":"foo", "code": "20006"}'
));
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
foreach
(
$client
->
account
->
calls
->
getIterator
(
0
,
1
)
as
$call
)
{
$this
->
assertSame
(
$call
->
price
,
'-0.02000'
);
}
}
function
testIteratorWithFiltersPagesCorrectly
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$recordingsBase
=
'/2010-04-01/Accounts/AC123/Recordings.json'
;
$firstPageUri
=
$recordingsBase
.
'?Page=0&PageSize=1&DateCreated%3E=2011-01-01'
;
$secondPageUri
=
$recordingsBase
.
'?DateCreated%3E=2011-01-01&Page=1&PageSize=1'
;
$thirdPageUri
=
$recordingsBase
.
'?DateCreated%3E=2011-01-01&Page=2&PageSize=1'
;
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
$firstPageUri
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'next_page_uri'
=>
$secondPageUri
,
'recordings'
=>
array
(
array
(
'sid'
=>
'RE123'
,
'duration'
=>
7
,
))
))
));
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
$secondPageUri
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'next_page_uri'
=>
$thirdPageUri
,
'recordings'
=>
array
(
array
(
'sid'
=>
'RE123'
,
'duration'
=>
7
,
))
))
));
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
$thirdPageUri
)
->
andReturn
(
array
(
400
,
array
(
'Content-Type'
=>
'application/json'
),
'{"status":400,"message":"foo", "code": "20006"}'
));
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
foreach
(
$client
->
account
->
recordings
->
getIterator
(
0
,
1
,
array
(
'DateCreated>'
=>
'2011-01-01'
))
as
$recording
)
{
$this
->
assertSame
(
$recording
->
duration
,
7
);
}
}
function
testRetryOn500
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages/SM123.json'
)
->
andReturn
(
$this
->
nginxError
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages/SM123.json'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'price'
=>
0.5
))
)
);
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$message
=
$client
->
account
->
sms_messages
->
get
(
'SM123'
);
$this
->
assertSame
(
$message
->
price
,
0.5
);
}
function
testDeleteOn500
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'delete'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages/SM123.json'
)
->
andReturn
(
$this
->
nginxError
);
$http
->
shouldReceive
(
'delete'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages/SM123.json'
)
->
andReturn
(
array
(
204
,
array
(
'Content-Type'
=>
'application/json'
),
''
)
);
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$client
->
account
->
sms_messages
->
delete
(
'SM123'
);
}
function
testSetExplicitRetryLimit
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages/SM123.json'
)
->
andReturn
(
$this
->
nginxError
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages/SM123.json'
)
->
andReturn
(
$this
->
nginxError
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages/SM123.json'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'price'
=>
0.5
))
)
);
// retry twice
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
,
2
);
$message
=
$client
->
account
->
sms_messages
->
get
(
'SM123'
);
$this
->
assertSame
(
$message
->
price
,
0.5
);
}
function
testRetryLimitIsHonored
()
{
$this
->
setExpectedException
(
'Services_Twilio_RestException'
);
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages/SM123.json'
)
->
andReturn
(
$this
->
nginxError
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages/SM123.json'
)
->
andReturn
(
$this
->
nginxError
);
$http
->
shouldReceive
(
'get'
)->
never
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages/SM123.json'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'price'
=>
0.5
))
)
);
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$message
=
$client
->
account
->
sms_messages
->
get
(
'SM123'
);
$this
->
assertSame
(
$message
->
price
,
0.5
);
}
function
testRetryIdempotentFunctionsOnly
()
{
$this
->
setExpectedException
(
'Services_Twilio_RestException'
);
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'post'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages.json'
,
$this
->
formHeaders
,
'From=%2B14105551234&To=%2B14102221234&Body=bar'
)
->
andReturn
(
$this
->
nginxError
);
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$message
=
$client
->
account
->
sms_messages
->
create
(
'+14105551234'
,
'+14102221234'
,
'bar'
);
}
function
testExceptionUsesHttpStatus
()
{
$http
=
$this
->
createMockHttp
(
'/Queues/QU123/Members/Front'
,
'post'
,
array
(),
array
(
'Url'
=>
'http://google.com'
),
400
);
$client
=
$this
->
getClient
(
$http
);
try
{
$front
=
$client
->
account
->
queues
->
get
(
'QU123'
)->
members
->
front
();
$front
->
update
(
array
(
'Url'
=>
'http://google.com'
));
$this
->
fail
(
'should throw rest exception before reaching this line.'
);
}
catch
(
Services_Twilio_RestException
$e
)
{
$this
->
assertSame
(
$e
->
getStatus
(),
400
);
$this
->
assertSame
(
$e
->
getMessage
(),
''
);
}
}
function
testUnicode
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'post'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/SMS/Messages.json'
,
$this
->
formHeaders
,
'From=123&To=123&Body=Hello+%E2%98%BA'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'sid'
=>
'SM123'
))
)
);
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$message
=
$client
->
account
->
sms_messages
->
create
(
'123'
,
'123'
,
'Hello ☺'
);
$this
->
assertSame
(
$message
->
sid
,
'SM123'
);
}
function
testCount
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/Calls.json?Page=0&PageSize=1'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'total'
=>
'1474'
,
'calls'
=>
array
(),
))
));
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$this
->
assertSame
(
count
(
$client
->
account
->
calls
),
1474
);
}
function
testCountNoTotal
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'get'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/Calls.json?Page=0&PageSize=1'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'calls'
=>
array
(),
))
));
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$this
->
assertSame
(
count
(
$client
->
account
->
calls
),
0
);
}
function
testPostMultivaluedForm
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$http
->
shouldReceive
(
'post'
)->
once
()
->
with
(
'/2010-04-01/Accounts/AC123/Messages.json'
,
$this
->
formHeaders
,
'From=123&To=123&MediaUrl=http%3A%2F%2Fexample.com%2Fimage1&MediaUrl=http%3A%2F%2Fexample.com%2Fimage2'
)
->
andReturn
(
array
(
200
,
array
(
'Content-Type'
=>
'application/json'
),
json_encode
(
array
(
'sid'
=>
'SM123'
))
)
);
$client
=
new
Services_Twilio
(
'AC123'
,
'123'
,
'2010-04-01'
,
$http
);
$message
=
$client
->
account
->
messages
->
sendMessage
(
'123'
,
'123'
,
null
,
array
(
'http://example.com/image1'
,
'http://example.com/image2'
)
);
$this
->
assertSame
(
$message
->
sid
,
'SM123'
);
}
function
testToString
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$resp
=
<<<JSON
{
"account_sid": "AC123",
"api_version": "2010-04-01",
"body": "Hello world!",
"date_created": "Mon, 06 Jan 2014 04:54:34 +0000",
"date_sent": "Mon, 06 Jan 2014 04:54:34 +0000",
"date_updated": "Mon, 06 Jan 2014 04:54:34 +0000",
"direction": "outbound-api",
"from": "+19255556789",
"num_media": null,
"num_segments": "1",
"price": "-0.00750",
"price_unit": "USD",
"sid": "SM77d5ccc71419444fb730541daaaaaaaa",
"status": "sent",
"subresource_uris": {
"media": "/2010-04-01/Accounts/AC123/Messages/SM77d5ccc71419444fb730541daaaaaaaa/Media.json"
},
"to": "+19255551234",
"uri": "/2010-04-01/Accounts/AC123/Messages/SM77d5ccc71419444fb730541daaaaaaaa.json"
}
JSON;
$sampleMessage
=
new
Services_Twilio_Rest_Message
(
$http
,
'/foo'
,
json_decode
(
$resp
)
);
$expected
=
'{"account_sid":"AC123","api_version":"2010-04-01","body":"Hello world!","date_created":"Mon, 06 Jan 2014 04:54:34 +0000","date_sent":"Mon, 06 Jan 2014 04:54:34 +0000","date_updated":"Mon, 06 Jan 2014 04:54:34 +0000","direction":"outbound-api","from":"+19255556789","num_media":null,"num_segments":"1","price":"-0.00750","price_unit":"USD","sid":"SM77d5ccc71419444fb730541daaaaaaaa","status":"sent","subresource_uris":{"media":"
\/
2010-04-01
\/
Accounts
\/
AC123
\/
Messages
\/
SM77d5ccc71419444fb730541daaaaaaaa
\/
Media.json"},"to":"+19255551234","uri":"
\/
foo"}'
;
$this
->
assertSame
((
string
)
$sampleMessage
,
$expected
);
}
function
testSubresourceUris
()
{
$http
=
m
::
mock
(
new
Services_Twilio_TinyHttp
);
$call
=
new
Services_Twilio_Rest_Call
(
$http
,
'/foo'
);
$recordings
=
$call
->
subresources
[
'recordings'
];
$this
->
assertSame
(
$recordings
->
uri
,
'/foo/Recordings'
);
}
}
Event Timeline
Log In to Comment