function testGrants()
 {
     $scat = new Services_Twilio_AccessToken(self::ACCOUNT_SID, self::SIGNING_KEY_SID, 'secret');
     $scat->setIdentity('test identity');
     $scat->addGrant(new Services_Twilio_Auth_ConversationsGrant());
     $scat->addGrant(new Services_Twilio_Auth_IpMessagingGrant());
     $token = $scat->toJWT();
     $this->assertNotNull($token);
     $payload = JWT::decode($token, 'secret');
     $this->validateClaims($payload);
     $grants = json_decode(json_encode($payload->grants), true);
     $this->assertEquals(3, count($grants));
     $this->assertEquals('test identity', $payload->grants->identity);
     $this->assertEquals('{}', json_encode($payload->grants->rtc));
     $this->assertEquals('{}', json_encode($payload->grants->ip_messaging));
 }
 function testProgrammableVoiceGrant()
 {
     $scat = new Services_Twilio_AccessToken(self::ACCOUNT_SID, self::SIGNING_KEY_SID, 'secret');
     $scat->setIdentity('test identity');
     $pvg = new Services_Twilio_Auth_VoiceGrant();
     $pvg->setOutgoingApplication('AP123', array('foo' => 'bar'));
     $scat->addGrant($pvg);
     $token = $scat->toJWT();
     $this->assertNotNull($token);
     $payload = JWT::decode($token, 'secret');
     $this->validateClaims($payload);
     $grants = json_decode(json_encode($payload->grants), true);
     $this->assertEquals(2, count($grants));
     $this->assertEquals('test identity', $payload->grants->identity);
     $decodedGrant = $grants['voice'];
     $outgoing = $decodedGrant['outgoing'];
     $this->assertEquals('AP123', $outgoing['application_sid']);
     $params = $outgoing['params'];
     $this->assertEquals('bar', $params['foo']);
 }