spec/jwt/access_token_spec.rb in twilio-ruby-5.0.0.rc21 vs spec/jwt/access_token_spec.rb in twilio-ruby-5.0.0.rc22

- old
+ new

@@ -1,192 +1,136 @@ require 'spec_helper' describe Twilio::JWT::AccessToken do + describe 'access_token functionality ' do + it 'should generate a token for no grants' do + scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123', 'secret' + payload, _ = JWT.decode scat.to_s, 'secret' + expect(payload['sub']).to eq('AC123') + expect(payload['iss']).to eq('SK123') + expect(payload['exp']).to be > Time.now.to_i + expect(payload['jti']).to start_with payload['iss'] + expect(payload['nbf']).to be <= Time.now.to_i + expect(payload['grants']).not_to be_nil + expect(payload['grants'].count).to eq(0) + end - it 'should generate a token for no grants' do - scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret' - token = scat.to_s - expect(token).not_to be_nil - payload, header = JWT.decode token, 'secret' + it 'should add the proper headers' do + scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123', 'secret' + _, headers = JWT.decode scat.to_s, 'secret' + expect(headers['cty']).to eq('twilio-fpa;v=1') + end - expect(payload['iss']).to eq('SK123') - expect(payload['sub']).to eq('AC123') - expect(payload['exp']).not_to be_nil - expect(payload['exp']).to be >= Time.now.to_i - expect(payload['jti']).not_to be_nil - expect(payload['jti']).to start_with payload['iss'] - expect(payload['nbf']).to be_nil - expect(payload['grants']).not_to be_nil - expect(payload['grants'].count).to eq(0) - end + it 'identity should exist in the grants' do + scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123', 'secret', identity: 'test-identity' + payload, _ = JWT.decode scat.to_s, 'secret' + expect(payload['grants']).to eq({'identity' => 'test-identity'}) + end - it 'should generate a nbf' do - now = Time.now.to_i - 1 - scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret' - scat.identity = 'abc' - scat.nbf = now + it 'grants during initialization' do + room_grant = Twilio::JWT::VideoGrant.new + room_grant.room = 'RM123' + grants = [room_grant] + scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123', 'secret', grants + payload, _ = JWT.decode scat.to_s, 'secret' + expect(payload['grants'].count).to eq(1) + expect(payload['grants']['video']['room']).to eq('RM123') + end - token = scat.to_s - expect(token).not_to be_nil - payload, header = JWT.decode token, 'secret' + describe 'all the grants' do + before :each do + @scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123', 'secret' + end - expect(payload['iss']).to eq('SK123') - expect(payload['sub']).to eq('AC123') - expect(payload['nbf']).not_to be_nil - expect(payload['nbf']).to eq(now) - expect(payload['exp']).not_to be_nil - expect(payload['exp']).to be >= Time.now.to_i - expect(payload['jti']).not_to be_nil - expect(payload['jti']).to start_with payload['iss'] - expect(payload['grants']).not_to be_nil - expect(payload['grants'].count).to eq(1) - expect(payload['grants']['identity']).to eq('abc') - end + it 'IpMessaging grant' do + ip_messaging_grant = Twilio::JWT::IpMessagingGrant.new + ip_messaging_grant.service_sid = 'SS123' + ip_messaging_grant.endpoint_id = 'EP123' + ip_messaging_grant.deployment_role_sid = 'DR123' + ip_messaging_grant.push_credential_sid = 'PC123' + @scat.add_grant(ip_messaging_grant) + payload, _ = JWT.decode @scat.to_s, 'secret' + expect(payload['grants'].count).to eq(1) + expect(payload['grants']['ip_messaging']['service_sid']).to eq('SS123') + expect(payload['grants']['ip_messaging']['endpoint_id']).to eq('EP123') + expect(payload['grants']['ip_messaging']['push_credential_sid']).to eq('PC123') + expect(payload['grants']['ip_messaging']['deployment_role_sid']).to eq('DR123') + end - it 'should be able to add endpoint grants' do - scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret' + it 'Voice grant' do + voice_grant = Twilio::JWT::VoiceGrant.new + voice_grant.outgoing_application_sid = 'AP123' + voice_grant.outgoing_application_params = {:foo => 'bar'} + voice_grant.push_credential_sid = 'PC123' + voice_grant.endpoint_id = 'EP123' + @scat.add_grant(voice_grant) + payload, _ = JWT.decode @scat.to_s, 'secret' + expect(payload['grants'].count).to eq(1) + expect(payload['grants']['voice']['outgoing']['application_sid']).to eq('AP123') + expect(payload['grants']['voice']['outgoing']['params']['foo']).to eq('bar') + expect(payload['grants']['voice']['push_credential_sid']).to eq('PC123') + expect(payload['grants']['voice']['endpoint_id']).to eq('EP123') + end - grant = Twilio::JWT::AccessToken::IpMessagingGrant.new - grant.push_credential_sid = 'CR123' - grant.deployment_role_sid = 'DR123' - grant.service_sid = 'IS123' - grant.endpoint_id = 'EP123' - scat.add_grant(grant) + it 'Sync grant' do + sync_grant = Twilio::JWT::SyncGrant.new + sync_grant.service_sid = 'SS123' + sync_grant.endpoint_id = 'EP123' + @scat.add_grant(sync_grant) + payload, _ = JWT.decode @scat.to_s, 'secret' + expect(payload['grants'].count).to eq(1) + expect(payload['grants']['data_sync']['service_sid']).to eq('SS123') + expect(payload['grants']['data_sync']['endpoint_id']).to eq('EP123') + end - token = scat.to_s - expect(token).not_to be_nil - payload, header = JWT.decode token, 'secret' + it 'Conversations grant' do + conversation_grant = Twilio::JWT::ConversationsGrant.new + conversation_grant.configuration_profile_sid = 'VS123' + @scat.add_grant(conversation_grant) + payload, _ = JWT.decode @scat.to_s, 'secret' + expect(payload['grants'].count).to eq(1) + expect(payload['grants']['rtc']['configuration_profile_sid']).to eq('VS123') + end - expect(payload['iss']).to eq('SK123') - expect(payload['sub']).to eq('AC123') - expect(payload['exp']).not_to be_nil - expect(payload['exp']).to be >= Time.now.to_i - expect(payload['jti']).not_to be_nil - expect(payload['jti']).to start_with payload['iss'] - expect(payload['grants']).not_to be_nil - expect(payload['grants'].count).to eq(1) - expect(payload['grants']['ip_messaging']).not_to be_nil - expect(payload['grants']['ip_messaging']['service_sid']).to eq('IS123') - expect(payload['grants']['ip_messaging']['endpoint_id']).to eq('EP123') - expect(payload['grants']['ip_messaging']['push_credential_sid']).to eq('CR123') - expect(payload['grants']['ip_messaging']['deployment_role_sid']).to eq('DR123') - end + it 'Room grant' do + room_grant = Twilio::JWT::VideoGrant.new + room_grant.room = 'RM123' + @scat.add_grant(room_grant) + payload, _ = JWT.decode @scat.to_s, 'secret' + expect(payload['grants'].count).to eq(1) + expect(payload['grants']['video']['room']).to eq('RM123') + end - it 'should be able to add Sync grants' do - scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret' - scat.identity = "brodawg" + it 'TaskRouter grant' do + task_router_grant = Twilio::JWT::TaskRouterGrant.new + task_router_grant.workspace_sid = 'WS123' + task_router_grant.worker_sid = 'WK123' + task_router_grant.role = 'worker' + @scat.add_grant(task_router_grant) + payload, _ = JWT.decode @scat.to_s, 'secret' + expect(payload['grants'].count).to eq(1) + expect(payload['grants']['task_router']['workspace_sid']).to eq('WS123') + expect(payload['grants']['task_router']['worker_sid']).to eq('WK123') + expect(payload['grants']['task_router']['role']).to eq('worker') + end - grant = Twilio::JWT::AccessToken::SyncGrant.new - grant.service_sid = 'IS123' - grant.endpoint_id = 'EP123' - scat.add_grant(grant) - - token = scat.to_s - expect(token).not_to be_nil - payload, header = JWT.decode token, 'secret' - - expect(payload['iss']).to eq('SK123') - expect(payload['sub']).to eq('AC123') - expect(payload['exp']).not_to be_nil - expect(payload['exp']).to be >= Time.now.to_i - expect(payload['jti']).not_to be_nil - expect(payload['jti']).to start_with payload['iss'] - expect(payload['grants']).not_to be_nil - expect(payload['grants'].count).to eq(2) - expect(payload['grants']['identity']).to eq("brodawg") - expect(payload['grants']['data_sync']).not_to be_nil - expect(payload['grants']['data_sync']['service_sid']).to eq('IS123') - expect(payload['grants']['data_sync']['endpoint_id']).to eq('EP123') + it 'multiple grants' do + room_grant = Twilio::JWT::VideoGrant.new + room_grant.room = 'RM123' + @scat.add_grant(room_grant) + task_router_grant = Twilio::JWT::TaskRouterGrant.new + task_router_grant.workspace_sid = 'WS123' + @scat.add_grant(task_router_grant) + payload, _ = JWT.decode @scat.to_s, 'secret' + expect(payload['grants'].count).to eq(2) + expect(payload['grants']['video']).not_to be_nil + expect(payload['grants']['task_router']).not_to be_nil + end + end end +end - it 'should add rest grants' do - scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret' - scat.add_grant(Twilio::JWT::AccessToken::VideoGrant.new) - scat.add_grant(Twilio::JWT::AccessToken::IpMessagingGrant.new) - token = scat.to_s - expect(token).not_to be_nil - payload, header = JWT.decode token, 'secret' - expect(payload['iss']).to eq('SK123') - expect(payload['sub']).to eq('AC123') - expect(payload['exp']).not_to be_nil - expect(payload['exp']).to be >= Time.now.to_i - expect(payload['jti']).not_to be_nil - expect(payload['jti']).to start_with payload['iss'] - expect(payload['grants']).not_to be_nil - expect(payload['grants'].count).to eq(2) - expect(payload['grants']['video']).not_to be_nil - expect(payload['grants']['ip_messaging']).not_to be_nil - end - it 'should add programmable voice grant' do - scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret' - pvg = Twilio::JWT::AccessToken::VoiceGrant.new - pvg.outgoing_application_sid = 'AP123' - pvg.outgoing_application_params = { :foo => 'bar' } - scat.add_grant(pvg) - token = scat.to_s - expect(token).not_to be_nil - payload, header = JWT.decode token, 'secret' - - expect(payload['iss']).to eq('SK123') - expect(payload['sub']).to eq('AC123') - expect(payload['exp']).not_to be_nil - expect(payload['exp']).to be >= Time.now.to_i - expect(payload['jti']).not_to be_nil - expect(payload['jti']).to start_with payload['iss'] - expect(payload['grants']).not_to be_nil - expect(payload['grants'].count).to eq(1) - expect(payload['grants']['voice']).not_to be_nil - expect(payload['grants']['voice']['outgoing']['application_sid']).to eq('AP123') - expect(payload['grants']['voice']['outgoing']['params']['foo']).to eq('bar') - end - - it 'should add video grant' do - scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret' - vg = Twilio::JWT::AccessToken::VideoGrant.new - vg.room = 'room' - - scat.add_grant(vg) - - token = scat.to_s - expect(token).not_to be_nil - payload, header = JWT.decode token, 'secret' - - expect(payload['iss']).to eq('SK123') - expect(payload['sub']).to eq('AC123') - expect(payload['exp']).not_to be_nil - expect(payload['exp']).to be >= Time.now.to_i - expect(payload['jti']).not_to be_nil - expect(payload['jti']).to start_with payload['iss'] - expect(payload['grants']).not_to be_nil - expect(payload['grants'].count).to eq(1) - expect(payload['grants']['video']).not_to be_nil - expect(payload['grants']['video']['room']).to eq('room') - end - - it 'should be able to add conversations grant' do - scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret' - cg = Twilio::JWT::AccessToken::ConversationsGrant.new - cg.configuration_profile_sid = 'VSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' - scat.add_grant(cg) - - token = scat.to_s - expect(token).not_to be_nil - payload, header = JWT.decode token, 'secret' - - expect(payload['iss']).to eq('SK123') - expect(payload['sub']).to eq('AC123') - expect(payload['exp']).not_to be_nil - expect(payload['exp']).to be >= Time.now.to_i - expect(payload['jti']).not_to be_nil - expect(payload['jti']).to start_with payload['iss'] - expect(payload['grants']).not_to be_nil - expect(payload['grants'].count).to eq(1) - expect(payload['grants']['rtc']).not_to be_nil - expect(payload['grants']['rtc']['configuration_profile_sid']).to eq('VSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx') - end - -end