<?php
namespace Resources;
use Plivo\Http\PlivoRequest;
use Plivo\Http\PlivoResponse;
use Plivo\Tests\BaseTestCase;
/**
* Class CallTest
* @package Resources
*/
class CallTest extends BaseTestCase
{
function testExceptionCallCreate()
{
$this->expectPlivoException('Plivo\Exceptions\PlivoValidationException');
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/',
[
'from' => '919999999999',
'to' => '919999999999',
'answer_url' => '919999999999'
]);
$body = file_get_contents(__DIR__ . '/../Mocks/callCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->create(
'919999999999', ['919999999999'], '919999999999');
$this->assertRequest($request);
self::assertNotNull($actual);
foreach ($actual as $actualCall) {
self::assertEquals(substr($actualCall->resourceUri, 0, 33), "/v1/Account/MAXXXXXXXXXXXXXXXXXX/");
}
}
function testCallCreate()
{
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/',
[
'from' => '919999999999',
'to' => '919999999998',
'answer_url' => 'http://answer.url'
]);
$body = file_get_contents(__DIR__ . '/../Mocks/callCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->create(
'919999999999', ['919999999998'], 'http://answer.url');
$this->assertRequest($request);
self::assertNotNull($actual);
// $actual = json_decode($actual);
self::assertEquals($actual->message, "call fired");
self::assertEquals($actual->requestUuid, "9834029e-58b6-11e1-b8b7-a5bd0e4e126f");
self::assertEquals($actual->apiId, "97ceeb52-58b6-11e1-86da-77300b68f8bb");
}
function testCallList()
{
$request = new PlivoRequest(
'GET',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/',
['subaccount' => 'subacc']);
$body = file_get_contents(__DIR__ . '/../Mocks/callListResponse.json');
$this->mock(new PlivoResponse($request,200, $body));
$actual = $this->client->calls->list(['subaccount' => 'subacc']);
$this->assertRequest($request);
self::assertNotNull($actual);
foreach($actual->resources as $actualCall) {
self::assertEquals(substr($actualCall->resourceUri, 0, 33), "/v1/Account/MAXXXXXXXXXXXXXXXXXX/");
}
}
function testCallDetails()
{
$request = new PlivoRequest(
'GET',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/4d04c52e-cea3-4458-bbdb-0bfc314ee7cd/',
[]);
$body = file_get_contents(__DIR__ . '/../Mocks/callGetResponse.json');
$this->mock(new PlivoResponse($request,200, $body));
$actual = $this->client->calls->get("4d04c52e-cea3-4458-bbdb-0bfc314ee7cd");
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->getId(), "4d04c52e-cea3-4458-bbdb-0bfc314ee7cd");
}
function testLiveCallList()
{
$request = new PlivoRequest(
'GET',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/',
['status'=>'live']);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallListGetResponse.json');
$this->mock(new PlivoResponse($request,200, $body));
$actual = $this->client->calls->listLive;
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertGreaterThan(0, count($actual));
foreach ($actual as $actualCall) {
self::assertEquals(36, strlen($actualCall));
}
}
function testLiveCallDetails()
{
$request = new PlivoRequest(
'GET',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/d0a87a1a-b0e9-4ab2-ac07-c22ee87cd04a/',
['status'=>'live']);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallGetResponse.json');
$this->mock(new PlivoResponse($request,200, $body));
$actual = $this->client->calls->getLive("d0a87a1a-b0e9-4ab2-ac07-c22ee87cd04a");
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->id, "d0a87a1a-b0e9-4ab2-ac07-c22ee87cd04a");
}
function testLiveCallTransfer()
{
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/',
[
'legs'=>'both',
'aleg_url' => 'http://a.leg',
'bleg_url' => 'http://b.leg'
]);
$body = file_get_contents(__DIR__ . '/../Mocks/callUpdateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->transfer("dfshjkasfhjkasfhjkashf",
['legs'=>'both',
'aleg_url' => 'http://a.leg',
'bleg_url' => 'http://b.leg']);
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->message, "call transfered");
}
function testException1LiveCallTransfer()
{
$this->expectPlivoException('Plivo\Exceptions\PlivoValidationException');
$request = new PlivoRequest();
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallPlayCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$this->client->calls->transfer("dfshjkasfhjkasfhjkashf",
['legs'=>'both',
'bleg_url' => 'http://b.leg']);
}
function testException2LiveCallTransfer()
{
$this->expectPlivoException('Plivo\Exceptions\PlivoValidationException');
$request = new PlivoRequest();
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallPlayCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$this->client->calls->transfer("dfshjkasfhjkasfhjkashf",
['legs'=>'aleg',
'bleg_url' => 'http://b.leg']);
}
function testException3LiveCallTransfer()
{
$this->expectPlivoException('Plivo\Exceptions\PlivoValidationException');
$request = new PlivoRequest();
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallPlayCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$this->client->calls->transfer("dfshjkasfhjkasfhjkashf",
['legs'=>'bleg']);
}
function testException4LiveCallTransfer()
{
$this->expectPlivoException('Plivo\Exceptions\PlivoValidationException');
$request = new PlivoRequest();
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallPlayCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$this->client->calls->transfer("dfshjkasfhjkasfhjkashf",
['legs'=>'some other leg']);
}
function testException5LiveCallTransfer()
{
$this->expectPlivoException('Plivo\Exceptions\PlivoValidationException');
$request = new PlivoRequest();
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallPlayCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$this->client->calls->transfer("dfshjkasfhjkasfhjkashf",
['bleg_url' => 'http://b.leg']);
}
function testLiveCallPlay()
{
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Play/',
['urls'=>'']);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallPlayCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->play("dfshjkasfhjkasfhjkashf", [""]);
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->message, "play started");
}
function testExceptionLiveCallPlay()
{
$this->expectPlivoException('Plivo\Exceptions\PlivoValidationException');
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Play/',
['urls'=> '']);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallPlayCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$this->client->calls->play(null, [""]);
}
function testLiveCallStartPlay()
{
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Play/',
['urls'=>'']);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallPlayCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->startPlaying("dfshjkasfhjkasfhjkashf", [""]);
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->message, "play started");
}
function testLiveCallStopPlay()
{
$request = new PlivoRequest(
'DELETE',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Play/',
[]);
$body = '{}';
$this->mock(new PlivoResponse($request,204, $body));
$actual = $this->client->calls->stopPlaying("dfshjkasfhjkasfhjkashf");
$this->assertRequest($request);
self::assertNull($actual);
}
function testLiveCallSpeak()
{
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Speak/',
['text'=>'Speak this']);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallSpeakCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->speak("dfshjkasfhjkasfhjkashf", "Speak this");
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->message, "speak started");
}
function testExceptionLiveCallSpeak()
{
$this->expectPlivoException('Plivo\Exceptions\PlivoValidationException');
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Speak/',
['text'=>'Speak this']);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallSpeakCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$this->client->calls->speak(null, "Speak this");
}
function testLiveCallStartSpeak()
{
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Speak/',
['text'=>'Speak this']);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallSpeakCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->startSpeaking("dfshjkasfhjkasfhjkashf", "Speak this");
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->message, "speak started");
}
function testLiveCallStopSpeak()
{
$request = new PlivoRequest(
'DELETE',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Speak/',
[]);
$body = '{}';
$this->mock(new PlivoResponse($request,204, $body));
$actual = $this->client->calls->stopSpeaking("dfshjkasfhjkasfhjkashf");
$this->assertRequest($request);
self::assertNull($actual);
}
function testLiveCallRecord()
{
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Record/',
[]);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallRecordCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->record("dfshjkasfhjkasfhjkashf");
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->url, "http://s3.amazonaws.com/recordings_2013/48dfaf60-3b2a-11e3.mp3");
self::assertEquals($actual->message, "call recording started");
self::assertEquals($actual->recordingId, "48dfaf60-3b2a-11e3");
self::assertEquals($actual->apiId, "c7b69074-58be-11e1-86da-adf28403fe48");
}
function testLiveCallStartRecord()
{
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Record/',
[]);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallRecordCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->startRecording("dfshjkasfhjkasfhjkashf");
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->url, "http://s3.amazonaws.com/recordings_2013/48dfaf60-3b2a-11e3.mp3");
self::assertEquals($actual->message, "call recording started");
self::assertEquals($actual->recordingId, "48dfaf60-3b2a-11e3");
self::assertEquals($actual->apiId, "c7b69074-58be-11e1-86da-adf28403fe48");
}
function testLiveCallStopRecord()
{
$request = new PlivoRequest(
'DELETE',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Record/',
[]);
$body = '{}';
$this->mock(new PlivoResponse($request,204, $body));
$actual = $this->client->calls->stopRecording("dfshjkasfhjkasfhjkashf");
$this->assertRequest($request);
self::assertNull($actual);
}
function testExceptionLiveCallStartRecord()
{
$this->expectPlivoException('Plivo\Exceptions\PlivoValidationException');
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Record/',
[]);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallRecordCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->startRecording("");
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->message, "call recording started");
}
function testLiveCallStartStream()
{
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Stream/',
[]);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallStreamCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->startStream("dfshjkasfhjkasfhjkashf");
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->message, "audio streaming started");
self::assertEquals($actual->streamId, "30852c23-ee79-4eb4-b7b9-cd360545965b");
self::assertEquals($actual->apiId, "ff09383e-246f-11ed-a1fe-0242ac110004");
}
function testLiveCallStopStream()
{
$request = new PlivoRequest(
'DELETE',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/Stream/',
[]);
$body = '{}';
$this->mock(new PlivoResponse($request,204, $body));
$actual = $this->client->calls->stopStream("dfshjkasfhjkasfhjkashf");
$this->assertRequest($request);
self::assertNull($actual);
}
function testGetAllStreams()
{
$request = new PlivoRequest(
'GET',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/4d04c52e-cea3-4458-bbdb-0bfc314ee7cd/Stream',
[]);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallStreamGetAllResponse.json');
$this->mock(new PlivoResponse($request,200, $body));
$actual = $this->client->calls->getAllStreams("4d04c52e-cea3-4458-bbdb-0bfc314ee7cd");
self::assertNotNull($actual);
self::assertEquals($actual->meta, array('count'=>1, 'limit'=>20, 'next'=>null, 'offset'=>0, 'previous'=>null));
self::assertEquals($actual->objects, array(array('call_uuid'=>"4f045f7a-b04a-4364-8523-74e6072f4f72", 'end_time'=>null, 'service_url'=>"ws://3ee3-106-51-87-58.ngrok.io", 'start_time'=>null, 'status'=>"initiated", 'status_callback_url'=>"", 'stream_id'=>"c436abf8-e8a1-4d96-9aa8-b9143f7f3517")));
}
function testLiveCallDtmf()
{
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/DTMF/',
['digits'=>"123"]);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallDtmfCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->dtmf("dfshjkasfhjkasfhjkashf", "123");
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->message, "digits sent");
}
function testExceptionLiveCallDtmf()
{
$this->expectPlivoException('Plivo\Exceptions\PlivoValidationException');
$request = new PlivoRequest(
'POST',
'Account/MAXXXXXXXXXXXXXXXXXX/Call/dfshjkasfhjkasfhjkashf/DTMF/',
['digits'=>"123"]);
$body = file_get_contents(__DIR__ . '/../Mocks/liveCallDtmfCreateResponse.json');
$this->mock(new PlivoResponse($request,201, $body));
$actual = $this->client->calls->dtmf("", "123");
$this->assertRequest($request);
self::assertNotNull($actual);
self::assertEquals($actual->message, "digits sent");
}
function testLiveCallCancel()
{
$request = new PlivoRequest(
'DELETE',
'Account/MAXXXXXXXXXXXXXXXXXX/Request/dfshjkasfhjkasfhjkashf/',
[]);
$body = '{}';
$this->mock(new PlivoResponse($request,204, $body));
$actual = $this->client->calls->cancel("dfshjkasfhjkasfhjkashf");
$this->assertRequest($request);
self::assertNull($actual);
}
function testExceptionLiveCallCancel()
{
$this->expectPlivoException('Plivo\Exceptions\PlivoValidationException');
$request = new PlivoRequest(
'DELETE',
'Account/MAXXXXXXXXXXXXXXXXXX/Request/dfshjkasfhjkasfhjkashf/',
[]);
$body = '{}';
$this->mock(new PlivoResponse($request,204, $body));
$actual = $this->client->calls->cancel(null);
$this->assertRequest($request);
self::assertNull($actual);
}
}