mirror of
https://we.phorge.it/source/phorge.git
synced 2024-11-23 07:12:41 +01:00
e96c363eef
Summary: Provides a working SMS implementation with support for Twilio. This version doesn't really retry if we get any gruff at all. Future versions should retry. Test Plan: used bin/sms to send messages and look at them. Reviewers: chad, epriestley Reviewed By: epriestley Subscribers: aurelijus, epriestley, Korvin Maniphest Tasks: T920 Differential Revision: https://secure.phabricator.com/D8930
377 lines
14 KiB
PHP
Executable file
377 lines
14 KiB
PHP
Executable file
<?php
|
|
|
|
use \Mockery as m;
|
|
|
|
require_once 'Twilio/Twiml.php';
|
|
|
|
class TwimlTest extends PHPUnit_Framework_TestCase {
|
|
|
|
function tearDown() {
|
|
m::close();
|
|
}
|
|
|
|
function testEmptyResponse() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$expected = '<Response></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r,
|
|
"Should be an empty response");
|
|
}
|
|
|
|
public function testSayBasic() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->say("Hello Monkey");
|
|
$expected = '<Response><Say>Hello Monkey</Say></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testSayLoopThree() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->say("Hello Monkey", array("loop" => 3));
|
|
$expected = '<Response><Say loop="3">Hello Monkey</Say></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testSayLoopThreeWoman() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->say("Hello Monkey", array("loop" => 3, "voice"=>"woman"));
|
|
$expected = '<Response><Say loop="3" voice="woman">'
|
|
. 'Hello Monkey</Say></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testSayConvienceMethod() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->say("Hello Monkey", array("language" => "fr"));
|
|
$expected = '<Response><Say language="fr">'
|
|
. 'Hello Monkey</Say></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testSayUTF8() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->say("é tü & må");
|
|
$expected = '<Response><Say>'
|
|
. 'é tü & må</Say></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testSayNamedEntities() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->say("é tü & må");
|
|
$expected = '<Response><Say>'
|
|
. 'é tü & må</Say></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testSayNumericEntities() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->say("é tü & må");
|
|
$expected = '<Response><Say>'
|
|
. 'é tü & må</Say></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testPlayBasic() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->play("hello-monkey.mp3");
|
|
$expected = '<Response><Play>hello-monkey.mp3</Play></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testPlayLoopThree() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->play("hello-monkey.mp3", array("loop" => 3));
|
|
$expected = '<Response><Play loop="3">'
|
|
. 'hello-monkey.mp3</Play></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testPlayConvienceMethod() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->play("hello-monkey.mp3", array("loop" => 3));
|
|
$expected = '<Response><Play loop="3">'
|
|
. 'hello-monkey.mp3</Play></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
//Test Record Verb
|
|
public function testRecord() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->record();
|
|
$expected = '<Response><Record></Record></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testRecordActionMethod() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->record(array("action" => "example.com", "method" => "GET"));
|
|
$expected = '<Response><Record action="example.com" '
|
|
. 'method="GET"></Record></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testBooleanBecomesString() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->record(array("transcribe" => true));
|
|
$expected = '<Response><Record transcribe="true" '
|
|
. '></Record></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testRecordMaxLengthKeyTimeout(){
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->record(array("timeout" => 4, "finishOnKey" => "#",
|
|
"maxLength" => 30));
|
|
$expected = '<Response><Record timeout="4" finishOnKey="#" '
|
|
. 'maxLength="30"></Record></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testRecordConvienceMethod(){
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->record(array("transcribeCallback" => "example.com"));
|
|
$expected = '<Response><Record '
|
|
. 'transcribeCallback="example.com"></Record></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testRecordAddAttribute(){
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->record(array("foo" => "bar"));
|
|
$expected = '<Response><Record foo="bar"></Record></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
//Test Redirect Verb
|
|
public function testRedirect() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->redirect();
|
|
$expected = '<Response><Redirect></Redirect></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testAmpersandEscaping() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$test_amp = "test&two&three";
|
|
$r->redirect($test_amp);
|
|
$expected = '<Response><Redirect>' .
|
|
'test&two&three</Redirect></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testRedirectConvience() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->redirect();
|
|
$expected = '<Response><Redirect></Redirect></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
public function testRedirectAddAttribute(){
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->redirect(array("foo" => "bar"));
|
|
$expected = '<Response><Redirect foo="bar"></Redirect></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
//Test Hangup Verb
|
|
public function testHangup() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->hangup();
|
|
$expected = '<Response><Hangup></Hangup></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testHangupConvience() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->hangup();
|
|
$expected = '<Response><Hangup></Hangup></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testHangupAddAttribute(){
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->hangup(array("foo" => "bar"));
|
|
$expected = '<Response><Hangup foo="bar"></Hangup></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
//Test Pause Verb
|
|
public function testPause() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->pause();
|
|
$expected = '<Response><Pause></Pause></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testPauseConvience() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->pause();
|
|
$expected = '<Response><Pause></Pause></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testPauseAddAttribute(){
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->pause(array("foo" => "bar"));
|
|
$expected = '<Response><Pause foo="bar"></Pause></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
//Test Dial Verb
|
|
public function testDial() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->dial("1231231234");
|
|
$expected = '<Response><Dial>1231231234</Dial></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testDialConvience() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->dial();
|
|
$expected = '<Response><Dial></Dial></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testDialAddNumber() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$d = $r->dial();
|
|
$d->number("1231231234");
|
|
$expected = '<Response><Dial><Number>'
|
|
. '1231231234</Number></Dial></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testDialAddConference() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$d = $r->dial();
|
|
$d->conference("MyRoom");
|
|
$expected = '<Response><Dial><Conference>'
|
|
. 'MyRoom</Conference></Dial></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testDialAddConferenceConvience() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$d = $r->dial();
|
|
$d->conference("MyRoom", array("startConferenceOnEnter" => "false"));
|
|
$expected = '<Response><Dial><Conference startConferenceOnEnter='
|
|
. '"false">MyRoom</Conference></Dial></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testDialAddAttribute() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->dial(array("foo" => "bar"));
|
|
$expected = '<Response><Dial foo="bar"></Dial></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
//Test Gather Verb
|
|
public function testGather() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->gather();
|
|
$expected = '<Response><Gather></Gather></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testGatherMethodAction(){
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->gather(array("action"=>"example.com", "method"=>"GET"));
|
|
$expected = '<Response><Gather action="example.com" '
|
|
. 'method="GET"></Gather></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testGatherActionWithParams(){
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->gather(array("action" => "record.php?action=recordPageNow"
|
|
. "&id=4&page=3"));
|
|
$expected = '<Response><Gather action="record.php?action='
|
|
. 'recordPageNow&id=4&page=3"></Gather></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testGatherNestedVerbs(){
|
|
$r = new Services_Twilio_Twiml();
|
|
$g = $r->gather(array("action"=>"example.com", "method"=>"GET"));
|
|
$g->say("Hello World");
|
|
$g->play("helloworld.mp3");
|
|
$g->pause();
|
|
$expected = '
|
|
<Response>
|
|
<Gather action="example.com" method="GET">
|
|
<Say>Hello World</Say>
|
|
<Play>helloworld.mp3</Play>
|
|
<Pause></Pause>
|
|
</Gather>
|
|
</Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testGatherNestedVerbsConvienceMethods(){
|
|
$r = new Services_Twilio_Twiml();
|
|
$g = $r->gather(array("action"=>"example.com", "method"=>"GET"));
|
|
$g->say("Hello World");
|
|
$g->play("helloworld.mp3");
|
|
$g->pause();
|
|
$expected = '
|
|
<Response>
|
|
<Gather action="example.com" method="GET">
|
|
<Say>Hello World</Say>
|
|
<Play>helloworld.mp3</Play>
|
|
<Pause></Pause>
|
|
</Gather>
|
|
</Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testGatherAddAttribute(){
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->gather(array("foo" => "bar"));
|
|
$expected = '<Response><Gather foo="bar"></Gather></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testSms() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->sms("Hello World");
|
|
$expected = '<Response><Sms>Hello World</Sms></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testSmsConvience() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->sms("Hello World");
|
|
$expected = '<Response><Sms>Hello World</Sms></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testSmsAddAttribute() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->sms(array("foo" => "bar"));
|
|
$expected = '<Response><Sms foo="bar"></Sms></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
public function testReject() {
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->reject();
|
|
$expected = '<Response><Reject></Reject></Response>';
|
|
$this->assertXmlStringEqualsXmlString($expected, $r);
|
|
}
|
|
|
|
function testGeneration() {
|
|
|
|
$r = new Services_Twilio_Twiml();
|
|
$r->say('hello');
|
|
$r->dial()->number('123', array('sendDigits' => '456'));
|
|
$r->gather(array('timeout' => 15));
|
|
|
|
$doc = simplexml_load_string($r);
|
|
$this->assertEquals('Response', $doc->getName());
|
|
$this->assertEquals('hello', (string) $doc->Say);
|
|
$this->assertEquals('456', (string) $doc->Dial->Number['sendDigits']);
|
|
$this->assertEquals('123', (string) $doc->Dial->Number);
|
|
$this->assertEquals('15', (string) $doc->Gather['timeout']);
|
|
}
|
|
|
|
}
|