1
+ import time
1
2
import unittest
2
3
4
+ from datetime import datetime
3
5
from nose .tools import assert_equal
4
6
from twilio .jwt import decode
5
7
from twilio .access_token import AccessToken , ConversationsGrant , IpMessagingGrant
@@ -13,18 +15,27 @@ def assert_is_not_none(obj):
13
15
assert obj is not None , '%r is None' % obj
14
16
15
17
18
+ def assert_in (obj1 , obj2 ):
19
+ assert obj1 in obj2 , '%r is not in %r' % (obj1 , obj2 )
20
+
21
+
22
+ def assert_greater_equal (obj1 , obj2 ):
23
+ assert obj1 > obj2 , '%r is not greater than or equal to %r' % (obj1 , obj2 )
24
+
25
+
16
26
class AccessTokenTest (unittest .TestCase ):
17
27
def _validate_claims (self , payload ):
18
28
assert_equal (SIGNING_KEY_SID , payload ['iss' ])
19
29
assert_equal (ACCOUNT_SID , payload ['sub' ])
20
- assert_is_not_none ( payload [ 'nbf' ])
30
+
21
31
assert_is_not_none (payload ['exp' ])
22
- assert_equal (payload ['nbf' ] + 3600 , payload ['exp' ])
23
32
assert_is_not_none (payload ['jti' ])
24
- assert_equal ('{0}-{1}' .format (payload ['iss' ], payload ['nbf' ]),
25
- payload ['jti' ])
26
33
assert_is_not_none (payload ['grants' ])
27
34
35
+ assert_greater_equal (payload ['exp' ], int (time .time ()))
36
+
37
+ assert_in (payload ['iss' ], payload ['jti' ])
38
+
28
39
def test_empty_grants (self ):
29
40
scat = AccessToken (ACCOUNT_SID , SIGNING_KEY_SID , 'secret' )
30
41
token = str (scat )
@@ -34,27 +45,53 @@ def test_empty_grants(self):
34
45
self ._validate_claims (payload )
35
46
assert_equal ({}, payload ['grants' ])
36
47
48
+ def test_nbf (self ):
49
+ now = int (time .mktime (datetime .now ().timetuple ()))
50
+ scat = AccessToken (ACCOUNT_SID , SIGNING_KEY_SID , 'secret' , nbf = now )
51
+ token = str (scat )
52
+
53
+ assert_is_not_none (token )
54
+ payload = decode (token , 'secret' )
55
+ self ._validate_claims (payload )
56
+ assert_equal (now , payload ['nbf' ])
57
+
58
+ def test_identity (self ):
59
+ scat = AccessToken (ACCOUNT_SID , SIGNING_KEY_SID , 'secret' , identity = 'test@twilio.com' )
60
+ token = str (scat )
61
+
62
+ assert_is_not_none(token )
63
+ payload = decode (token , 'secret' )
64
+ self ._validate_claims (payload )
65
+ assert_equal ({
66
+ 'identity' : 'test@twilio.com'
67
+ }, payload ['grants' ])
68
+
37
69
def test_conversations_grant (self ):
38
70
scat = AccessToken (ACCOUNT_SID , SIGNING_KEY_SID , 'secret' )
39
- scat .add_grant (ConversationsGrant ())
71
+ scat .add_grant (ConversationsGrant (configuration_profile_sid = 'CP123' ))
40
72
41
73
token = str (scat )
42
74
assert_is_not_none (token )
43
75
payload = decode (token , 'secret' )
44
76
self ._validate_claims (payload )
45
77
assert_equal (1 , len (payload ['grants' ]))
46
- assert_equal ({}, payload ['grants' ]['rtc' ])
78
+ assert_equal ({
79
+ 'configuration_profile_sid' : 'CP123'
80
+ }, payload ['grants' ]['rtc' ])
47
81
48
82
def test_ip_messaging_grant (self ):
49
83
scat = AccessToken (<
8000
span class=pl-c1>ACCOUNT_SID, SIGNING_KEY_SID , 'secret' )
50
- scat .add_grant (IpMessagingGrant ())
84
+ scat .add_grant (IpMessagingGrant (service_sid = 'IS123' , push_credential_sid = 'CR123' ))
51
85
52
86
token = str (scat )
53
87
assert_is_not_none (token )
54
88
payload = decode (token , 'secret' )
55
89
self ._validate_claims (payload )
56
90
assert_equal (1 , len (payload ['grants' ]))
57
- assert_equal ({}, payload ['grants' ]['ip_messaging' ])
91
+ assert_equal ({
92
+ 'service_sid' : 'IS123' ,
93
+ 'push_credential_sid' : 'CR123'
94
+ }, payload ['grants' ]['ip_messaging' ])
58
95
59
96
def test_grants (self ):
60
97
scat = AccessToken (ACCOUNT_SID , SIGNING_KEY_SID , 'secret' )
0 commit comments