<?php require_once 'Twilio/Capability.php'; class CapabilityTest extends PHPUnit_Framework_TestCase { public function testNoPermissions() { $token = new Services_Twilio_Capability('AC123', 'foo'); $payload = JWT::decode($token->generateToken(), 'foo'); $this->assertEquals($payload->iss, "AC123"); $this->assertEquals($payload->scope, ''); } public function testInboundPermissions() { $token = new Services_Twilio_Capability('AC123', 'foo'); $token->allowClientIncoming("andy"); $payload = JWT::decode($token->generateToken(), 'foo'); $eurl = "scope:client:incoming?clientName=andy"; $this->assertEquals($payload->scope, $eurl); } public function testOutboundPermissions() { $token = new Services_Twilio_Capability('AC123', 'foo'); $token->allowClientOutgoing("AP123"); $payload = JWT::decode($token->generateToken(), 'foo');; $eurl = "scope:client:outgoing?appSid=AP123"; $this->assertContains($eurl, $payload->scope); } public function testOutboundPermissionsParams() { $token = new Services_Twilio_Capability('AC123', 'foo'); $token->allowClientOutgoing("AP123", array("foobar" => 3)); $payload = JWT::decode($token->generateToken(), 'foo'); $eurl = "scope:client:outgoing?appSid=AP123&appParams=foobar%3D3"; $this->assertEquals($payload->scope, $eurl); } public function testEvents() { $token = new Services_Twilio_Capability('AC123', 'foo'); $token->allowEventStream(); $payload = JWT::decode($token->generateToken(), 'foo'); $event_uri = "scope:stream:subscribe?path=%2F2010" . "-04-01%2FEvents¶ms="; $this->assertEquals($payload->scope, $event_uri); } public function testEventsWithFilters() { $token = new Services_Twilio_Capability('AC123', 'foo'); $token->allowEventStream(array("foobar" => "hey")); $payload = JWT::decode($token->generateToken(), 'foo'); $event_uri = "scope:stream:subscribe?path=%2F2010-" . "04-01%2FEvents¶ms=foobar%3Dhey"; $this->assertEquals($payload->scope, $event_uri); } public function testDecode() { $token = new Services_Twilio_Capability('AC123', 'foo'); $token->allowClientOutgoing("AP123", array("foobar"=> 3)); $token->allowClientIncoming("andy"); $token->allowEventStream(); $outgoing_uri = "scope:client:outgoing?appSid=" . "AP123&appParams=foobar%3D3&clientName=andy"; $incoming_uri = "scope:client:incoming?clientName=andy"; $event_uri = "scope:stream:subscribe?path=%2F2010-04-01%2FEvents"; $payload = JWT::decode($token->generateToken(), 'foo'); $scope = $payload->scope; $this->assertContains($outgoing_uri, $scope); $this->assertContains($incoming_uri, $scope); $this->assertContains($event_uri, $scope); } function testDecodeWithAuthToken() { try { $token = new Services_Twilio_Capability('AC123', 'foo'); $payload = JWT::decode($token->generateToken(), 'foo'); $this->assertSame($payload->iss, 'AC123'); } catch (UnexpectedValueException $e) { $this->assertTrue(false, "Could not decode with 'foo'"); } } function testClientNameValidation() { $this->setExpectedException('InvalidArgumentException'); $token = new Services_Twilio_Capability('AC123', 'foo'); $token->allowClientIncoming('@'); $this->fail('exception should have been raised'); } function zeroLengthNameInvalid() { $this->setExpectedException('InvalidArgumentException'); $token = new Services_Twilio_Capability('AC123', 'foo'); $token->allowClientIncoming(""); $this->fail('exception should have been raised'); } }