1
+ import sys
2
+
3
+ import time
4
+ import unittest
5
+ import warnings
6
+
7
+ from twilio import jwt
8
+ from twilio .task_router .capability import TaskRouterCapability
9
+
10
+ class TaskRouterCapabilityTest (unittest .TestCase ):
11
+
12
+ def test_workspace_default (self ):
13
+ account_sid = "AC123"
14
+ auth_token = "foobar"
15
+ workspace_sid = "WS456"
16
+ channel_id = "WS456"
17
+ capability = TaskRouterCapability (account_sid , auth_token , workspace_sid , channel_id )
18
+
19
+ capability .generate_token ()
20
+
21
+ token = capability .generate_token ()
22
+ self .assertIsNotNone (token )
23
+
24
+ decoded = jwt .decode (token , auth_token )
25
+ self .assertIsNotNone (decoded )
26
+
27
+ self .assertEqual (decoded ["iss" ], account_sid )
28
+ self .assertEqual (decoded ["account_sid" ], account_sid )
29
+ self .assertEqual (decoded ["workspace_sid" ], workspace_sid )
30
+ self .assertEqual (decoded ["channel" ], channel_id )
31
+ self .assertEqual (decoded ["version" ], "v1" )
32
+ self .assertEqual (decoded ["friendly_name" ], channel_id )
33
+
34
+ policies = decoded ['policies' ]
35
+ self .assertEqual (len (policies ), 3 )
36
+
37
+ # websocket GET
38
+ get_policy = policies [0 ]
39
+ self .assertEqual ("https://event-bridge.twilio.com/v1/wschannels/AC123/WS456" , get_policy ['url' ])
40
+ self .assertEqual ("GET" , get_policy ['method' ])
41
+ self .assertTrue (get_policy ['allowed' ])
42
+ self .assertEqual ({}, get_policy ['query_filter' ])
43
+ self .assertEqual ({}, get_policy ['post_filter' ])
44
+
45
+ # websocket POST
46
+ post_policy = policies [1 ]
47
+ self .assertEqual ("https://event-bridge.twilio.com/v1/wschannels/AC123/WS456" , post_policy ['url' ])
48
+ self .assertEqual ("POST" , post_policy ['method' ])
49
+ self .assertTrue (post_policy ['allowed' ])
50
+ self .assertEqual ({}, post_policy ['query_filter' ])
51
+ self .assertEqual ({}, post_policy ['post_filter' ])
52
+
53
+ # fetch GET
54
+ fetch_policy = policies [2 ]
55
+ self .assertEqual ("https://taskrouter.twilio.com/v1/Workspaces/WS456" , fetch_policy ['url' ])
56
+ self .assertEqual ("GET" , fetch_policy ['method' ])
57
+ self .assertTrue (fetch_policy ['allowed' ])
58
+ self .assertEqual ({}, fetch_policy ['query_filter' ])
59
+ self .assertEqual ({}, fetch_policy ['post_filter' ])
60
+
61
+ def test_worker_default (self ):
62
+ account_sid = "AC123"
63
+ auth_token = "foobar"
64
+ workspace_sid = "WS456"
65
+ worker_sid = "WK789"
66
+ capability = TaskRouterCapability (account_sid , auth_token , workspace_sid , worker_sid )
67
+
68
+ capability .generate_token ()
69
+
70
+ token = capability .generate_token ()
71
+ self .assertIsNotNone (token )
72
+
73
+ decoded = jwt .decode (token , auth_token )
74
+ self .assertIsNotNone (decoded )
75
+
76
+ self .a
F438
ssertEqual (decoded ["iss" ], account_sid )
77
+ self .assertEqual (decoded ["account_sid" ], account_sid )
78
+ self .assertEqual (decoded ["workspace_sid" ], workspace_sid )
79
+ self .assertEqual (decoded ["worker_sid" ], worker_sid )
80
+ self .assertEqual (decoded ["channel" ], worker_sid )
81
+ self .assertEqual (decoded ["version" ], "v1" )
82
+ self .assertEqual (decoded ["friendly_name" ], worker_sid )
83
+
84
+ policies = decoded ['policies' ]
85
+ self .assertEqual (len (policies ), 4 )
86
+
87
+ # activity GET
88
+ fetch_activity = policies [0 ]
89
+ self .assertEqual ("https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities" , fetch_activity ['url' ])
90
+ self .assertEqual ("GET" , fetch_activity ['method' ])
91
+ self .assertTrue (fetch_activity ['allowed' ])
92
+ self .assertEqual ({}, fetch_activity ['query_filter' ])
93
+ self .assertEqual ({}, fetch_activity ['post_filter' ])
94
+
95
+ # websocket GET
96
+ get_policy = policies [1 ]
97
+ self .assertEqual ("https://event-bridge.twilio.com/v1/wschannels/AC123/WK789" , get_policy ['url' ])
98
+ self .assertEqual ("GET" , get_policy ['method' ])
99
+ self .assertTrue (get_policy ['allowed' ])
100
+ self .assertEqual ({}, get_policy ['query_filter' ])
101
+ self .assertEqual ({}, get_policy ['post_filter' ])
102
+
103
+ # websocket POST
104
+ post_policy = policies [2 ]
105
+ self .assertEqual ("https://event-bridge.twilio.com/v1/wschannels/AC123/WK789" , post_policy ['url' ])
106
+ self .assertEqual ("POST" , post_policy ['method' ])
107
+ self .assertTrue (post_policy ['allowed' ])
108
+ self .assertEqual ({}, post_policy ['query_filter' ])
109
+ self .assertEqual ({}, post_policy ['post_filter' ])
110
+
111
+ # fetch GET
112
+ fetch_policy = policies [3 ]
113
+ self .assertEqual ("https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789" , fetch_policy ['url' ])
114
+ self .assertEqual ("GET" , fetch_policy ['method' ])
115
+ self .assertTrue (fetch_policy ['allowed' ])
116
+ self .assertEqual ({}, fetch_policy ['query_filter' ])
117
+ self .assertEqual ({}, fetch_policy ['post_filter' ])
118
+
119
+ def test_task_queue_default (self ):
120
+ account_sid = "AC123"
121
+ auth_token = "foobar"
122
+ workspace_sid = "WS456"
123
+ taskqueue_sid = "WQ789"
124
+ capability = TaskRouterCapability (account_sid , auth_token , workspace_sid , taskqueue_sid )
125
+
126
+ capability .generate_token ()
127
+
128
+ token = capability .generate_token ()
129
+ self .assertIsNotNone (token )
130
+
131
+ decoded = jwt .decode (token , auth_token )
132
+ self .assertIsNotNone (decoded )
133
+
134
+ self .assertEqual (decoded ["iss" ], account_sid )
135
+ self .assertEqual (decoded ["account_sid" ], account_sid )
136
+ self .assertEqual (decoded ["workspace_sid" ], workspace_sid )
137
+ self .assertEqual (decoded ["taskqueue_sid" ], taskqueue_sid )
138
+ self .assertEqual (decoded ["channel" ], taskqueue_sid )
139
+ self .assertEqual (decoded ["version" ], "v1" )
140
+ self .assertEqual (decoded ["friendly_name" ], taskqueue_sid )
141
+
142
+ policies = decoded ['policies' ]
143
+ self .assertEqual (len (policies ), 3 )
144
+
145
+ # websocket GET
146
+ get_policy = policies [0 ]
147
+ self .assertEqual ("https://event-bridge.twilio.com/v1/wschannels/AC123/WQ789" , get_policy ['url' ])
148
+ self .assertEqual ("GET" , get_policy ['method' ])
149
+ self .assertTrue (get_policy ['allowed' ])
150
+ self .assertEqual ({}, get_policy ['query_filter' ])
151
+ self .assertEqual ({}, get_policy ['post_filter' ])
152
+
153
+ # websocket POST
154
+ post_policy = policies [1 ]
155
+ self .assertEqual ("https://event-bridge.twilio.com/v1/wschannels/AC123/WQ789" , post_policy ['url' ])
156
+ self .assertEqual ("POST" , post_policy ['method' ])
157
+ self .assertTrue (post_policy ['allowed' ])
158
+ self .assertEqual ({}, post_policy ['query_filter' ])
159
+ self .assertEqual ({}, post_policy ['post_filter' ])
160
+
161
+ # fetch GET
162
+ fetch_policy = policies [2 ]
163
+ self .assertEqual ("https://taskrouter.twilio.com/v1/Workspaces/WS456/TaskQueues/WQ789" , fetch_policy ['url' ])
164
+ self .assertEqual ("GET" , fetch_policy ['method' ])
165
+ self .assertTrue (fetch_policy ['allowed' ])
166
+ self .assertEqual ({}, fetch_policy ['query_filter' ])
167
+ self .assertEqual ({}, fetch_policy ['post_filter' ])
168
+
169
+ def test_deprecated_worker (self ):
170
+ account_sid = "AC123"
171
+ auth_token = "foobar"
172
+ workspace_sid = "WS456"
173
+ worker_sid = "WK789"
174
+ capability = TaskRouterCapability (account_sid , auth_token , workspace_sid , worker_sid )
175
+
176
+ capability .generate_token ()
177
+
178
+ token = capability .generate_token ()
179
+ self .assertIsNotNone (token )
180
+
181
+ decoded = jwt .decode (token , auth_token )
182
+ self .assertIsNotNone (decoded )
183
+
184
+ self .assertEqual (decoded ["iss" ], account_sid )
185
+ self .assertEqual (decoded ["account_sid" ], account_sid )
186
+ self .assertEqual (decoded ["workspace_sid" ], workspace_sid )
187
+ self .assertEqual (decoded ["worker_sid" ], worker_sid )
188
+ self .assertEqual (decoded ["channel" ], worker_sid )
189
+ self .assertEqual (decoded ["version" ], "v1" )
190
+ self .assertEqual (decoded ["friendly_name" ], worker_sid )
191
+
192
+ policies = decoded ['policies' ]
193
+ self .assertEqual (len (policies ), 4 )
194
+
195
+ # should expect 4 policies
196
+
197
+ # activity GET
198
+ fetch_activity = policies [0 ]
199
+ self .assertEqual ("https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities" , fetch_activity ['url' ])
200
+ self .assertEqual ("GET" , fetch_activity ['method' ])
201
+ self .assertTrue (fetch_activity ['allowed' ])
202
+ self .assertEqual ({}, fetch_activity ['query_filter' ])
203
+ self .assertEqual ({}, fetch_activity ['post_filter' ])
204
+
205
F438
+ # websocket GET
206
+ get_policy = policies [1 ]
207
+ self .assertEqual ("https://event-bridge.twilio.com/v1/wschannels/AC123/WK789" , get_policy ['url' ])
208
+ self .assertEqual ("GET" , get_policy ['method' ])
209
+ self .assertTrue (get_policy ['allowed' ])
210
+ self .assertEqual ({}, get_policy ['query_filter' ])
211
+ self .assertEqual ({}, get_policy ['post_filter' ])
212
+
213
+ # websocket POST
214
+ post_policy = policies [2 ]
215
+ self .assertEqual ("https://event-bridge.twilio.com/v1/wschannels/AC123/WK789" , post_policy ['url' ])
216
+ self .assertEqual ("POST" , post_policy ['method' ])
217
+ self .assertTrue (post_policy ['allowed' ])
218
+ self .assertEqual ({}, post_policy ['query_filter' ])
219
+ self .assertEqual ({}, post_policy ['post_filter' ])
220
+
221
+ # fetch GET
222
+ fetch_policy = policies [3 ]
223
+ self .assertEqual ("https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789" , fetch_policy ['url' ])
224
+ self .assertEqual ("GET" , fetch_policy ['method' ])
225
+ self .assertTrue (fetch_policy ['allowed' ])
226
+ self .assertEqual ({}, fetch_policy ['query_filter' ])
227
+ self .assertEqual ({}, fetch_policy ['post_filter' ])
228
+
229
+ # check deprecated warnings
230
+ with warnings .catch_warnings (record = True ) as w :
231
+ warnings .simplefilter ("always" )
232
+ capability .allow_worker_fetch_attributes ()
233
+ assert len (w ) == 1
234
+ assert issubclass (w [- 1 ].category , DeprecationWarning )
235
+ assert "deprecated" in str (w [- 1 ].message )
236
+
237
+ with warnings .catch_warnings (record = True ) as w :
238
+ warnings .simplefilter ("always" )
239
+ capability .allow_worker_activity_updates ()
240
+ assert len (w ) == 1
241
+ assert issubclass (w [- 1 ].category , DeprecationWarning )
242
+ assert "deprecated" in str (w [- 1 ].message )
243
+
244
+ with warnings .catch_warnings (record = True ) as w :
245
+ warnings .simplefilter ("always" )
246
+ capability .allow_task_reservation_updates ()
247
+ assert len (w ) == 1
248
+ assert issubclass (w [- 1 ].category , DeprecationWarning )
249
+ assert "deprecated" in str (w [- 1 ].message )
250
+
251
+
252
+ if __name__ == "__main__" :
253
+ unittest .main ()
0 commit comments