107 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?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');
 | 
						|
    }
 | 
						|
 | 
						|
 | 
						|
}
 |