def test_task_queue_default(self): account_sid = "AC123" auth_token = "foobar" workspace_sid = "WS456" taskqueue_sid = "WQ789" capability = TaskRouterCapability(account_sid, auth_token, workspace_sid, taskqueue_sid) capability.generate_token() token = capability.generate_token() self.assertNotEqual(None, token) decoded = jwt.decode(token, auth_token) self.assertNotEqual(None, decoded) self.check_decoded(decoded, account_sid, workspace_sid, taskqueue_sid, taskqueue_sid) policies = decoded['policies'] self.assertEqual(len(policies), 3) for method, url, policy in [ ('GET', "https://event-bridge.twilio.com/v1/wschannels/AC123/WQ789", policies[0]), ('POST', "https://event-bridge.twilio.com/v1/wschannels/AC123/WQ789", policies[1]) ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/TaskQueues/WQ789", policies[2]) ]: yield self.check_policy, method, url, policy
def test_workspace_default(self): account_sid = "AC123" auth_token = "foobar" workspace_sid = "WS456" channel_id = "WS456" capability = TaskRouterCapability(account_sid, auth_token, workspace_sid, channel_id) capability.generate_token() token = capability.generate_token() self.assertNotEqual(None, token) decoded = jwt.decode(token, auth_token) self.assertNotEqual(None, decoded) self.check_decoded(decoded, account_sid, workspace_sid, channel_id) policies = decoded['policies'] self.assertEqual(len(policies), 3) for method, url, policy in [ ('GET', "https://event-bridge.twilio.com/v1/wschannels/AC123/WS456", policies[0]), ('POST', "https://event-bridge.twilio.com/v1/wschannels/AC123/WS456", policies[1]), ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456", policies[2]), ]: yield self.check_policy, method, url, policy
def test_worker_default(self): account_sid = "AC123" auth_token = "foobar" workspace_sid = "WS456" worker_sid = "WK789" capability = TaskRouterCapability(account_sid, auth_token, workspace_sid, worker_sid) capability.generate_token() token = capability.generate_token() self.assertIsNotNone(token) decoded = jwt.decode(token, auth_token) self.assertIsNotNone(decoded) self.check_decoded(decoded, account_sid, workspace_sid, worker_sid, worker_sid) policies = decoded["policies"] self.assertEqual(len(policies), 5) for method, url, policy in [ ("GET", "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[0]), ("GET", "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[1]), ("GET", "https://taskrouter.twilio.com/v1/wschannels/AC123/WK789", policies[2]), ("POST", "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[3]), ("GET", "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789", policies[4]), ]: yield self.check_policy, method, url, policy
def test_deprecated_worker(self): account_sid = "AC123" auth_token = "foobar" workspace_sid = "WS456" worker_sid = "WK789" capability = TaskRouterCapability(account_sid, auth_token, workspace_sid, worker_sid) capability.generate_token() token = capability.generate_token() self.assertNotEqual(None, token) decoded = jwt.decode(token, auth_token) self.assertNotEqual(None, decoded) self.check_decoded(decoded, account_sid, workspace_sid, worker_sid, worker_sid) policies = decoded['policies'] self.assertEqual(len(policies), 6) # should expect 6 policies for method, url, policy in [ ('GET', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[0]), ('POST', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[1]), ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[2]), ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[3]), ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789/Reservations/**", policies[4]), ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789", policies[5]) ]: yield self.check_policy, method, url, policy # check deprecated warnings with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") capability.allow_worker_fetch_attributes() assert len(w) == 1 assert issubclass(w[-1].category, DeprecationWarning) assert "deprecated" in str(w[-1].message) with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") capability.allow_worker_activity_updates() assert len(w) == 1 assert issubclass(w[-1].category, DeprecationWarning) assert "deprecated" in str(w[-1].message) with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") capability.allow_task_reservation_updates() assert len(w) == 1 assert issubclass(w[-1].category, DeprecationWarning) assert "deprecated" in str(w[-1].message)
class TaskRouterCapabilityTest(unittest.TestCase): def setUp(self): self.account_sid = "AC123" self.auth_token = "foobar" self.workspace_sid = "WS456" self.worker_sid = "WK789" self.cap = TaskRouterCapability(self.account_sid, self.auth_token, self.workspace_sid, self.worker_sid) def test_generate_token(self): token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) del decoded["exp"] del decoded["policies"] expected = { "iss": self.account_sid, "account_sid": self.account_sid, "workspace_sid": self.workspace_sid, "worker_sid": self.worker_sid, "channel": self.worker_sid, "version": "v1", "friendly_name": self.worker_sid, } self.assertEqual(expected, decoded) def test_generate_token_default_ttl(self): token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) self.assertEqual(int(time.time()) + 3600, decoded["exp"]) def test_generate_token_custom_ttl(self): token = self.cap.generate_token(10000) decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) self.assertEqual(int(time.time()) + 10000, decoded["exp"]) def test_defaults(self): token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) websocket_url = "https://event-bridge.twilio.com/v1/wschannels/{0}/{1}".format( self.account_sid, self.worker_sid ) expected = [ {"url": websocket_url, "method": "GET", "allow": True, "query_filter": {}, "post_filter": {}}, {"url": websocket_url, "method": "POST", "allow": True, "query_filter": {}, "post_filter": {}}, { "url": "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", "method": "GET", "allow": True, "query_filter": {}, "post_filter": {}, }, { "url": "https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**".format(self.workspace_sid), "method": "GET", "allow": True, "query_filter": {}, "post_filter": {}, }, { "url": "https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}/Reservations/**".format( self.workspace_sid, self.worker_sid ), "method": "GET", "allow": True, "query_filter": {}, "post_filter": {}, }, { "url": "https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}".format( self.workspace_sid, self.worker_sid ), "method": "GET", "allow": True, "query_filter": {}, "post_filter": {}, }, ] self.assertEqual(expected, decoded["policies"]) def test_allow_worker_activity_updates(self): self.cap.allow_worker_activity_updates() token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) url = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}".format(self.workspace_sid, self.worker_sid) expected = { "url": url, "method": "POST", "allow": True, "query_filter": {}, "post_filter": {"ActivitySid": {"required": True}}, } self.assertEqual(expected, decoded["policies"][-1]) def test_allow_worker_fetch_attributes(self): self.cap.allow_worker_fetch_attributes() token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) url = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}".format(self.workspace_sid, self.worker_sid) expected = {"url": url, "method": "GET", "allow": True, "query_filter": {}, "post_filter": {}} self.assertEqual(expected, decoded["policies"][-1]) def test_allow_task_reservation_updates(self): self.cap.allow_task_reservation_updates() token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) url = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**".format(self.workspace_sid) expected = {"url": url, "method": "POST", "allow": True, "query_filter": {}, "post_filter": {}} self.assertEqual(expected, decoded["policies"][-1])
class TaskRouterCapabilityTest(unittest.TestCase): def setUp(self): self.account_sid = "AC123" self.auth_token = "foobar" self.workspace_sid = "WS456" self.worker_sid = "WK789" self.cap = TaskRouterCapability(self.account_sid, self.auth_token, self.workspace_sid, self.worker_sid) def test_generate_token(self): token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) del decoded['exp'] del decoded['policies'] expected = { 'iss': self.account_sid, 'account_sid': self.account_sid, 'workspace_sid': self.workspace_sid, 'worker_sid': self.worker_sid, 'channel': self.worker_sid, 'version': 'v1', 'friendly_name': self.worker_sid, } self.assertEqual(expected, decoded) def test_generate_token_default_ttl(self): token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) self.assertEqual(int(time.time()) + 3600, decoded['exp']) def test_generate_token_custom_ttl(self): token = self.cap.generate_token(10000) decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) self.assertEqual(int(time.time()) + 10000, decoded['exp']) def test_defaults(self): token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) websocket_url = ( 'https://event-bridge.twilio.com/v1/wschannels/{0}/{1}'.format( self.account_sid, self.worker_sid)) expected = [{ 'url': 'https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities', 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, }, { 'url': 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**'.format( self.workspace_sid), 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, }, { 'url': websocket_url, 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, }, { 'url': websocket_url, 'method': 'POST', 'allow': True, 'query_filter': {}, 'post_filter': {}, }, { 'url': 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}'. format(self.workspace_sid, self.worker_sid), 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, }] self.assertEqual(expected, decoded['policies']) def test_allow_worker_activity_updates(self): self.cap.allow_worker_activity_updates() token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) url = 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}'.format( self.workspace_sid, self.worker_sid, ) expected = { 'url': url, 'method': 'POST', 'allow': True, 'query_filter': {}, 'post_filter': { 'ActivitySid': { 'required': True } }, } self.assertEqual(expected, decoded['policies'][-1]) def test_allow_worker_fetch_attributes(self): self.cap.allow_worker_fetch_attributes() token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) url = 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}'.format( self.workspace_sid, self.worker_sid, ) expected = { 'url': url, 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, } self.assertEqual(expected, decoded['policies'][-1]) def test_allow_task_reservation_updates(self): self.cap.allow_task_reservation_updates() token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) url = 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**'.format( self.workspace_sid, ) expected = { 'url': url, 'method': 'POST', 'allow': True, 'query_filter': {}, 'post_filter': {}, } self.assertEqual(expected, decoded['policies'][-1])
class TaskRouterCapabilityTest(unittest.TestCase): def setUp(self): self.account_sid = "AC123" self.auth_token = "foobar" self.workspace_sid = "WS456" self.worker_sid = "WK789" self.cap = TaskRouterCapability(self.account_sid, self.auth_token, self.workspace_sid, self.worker_sid) def test_generate_token(self): token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) del decoded['exp'] del decoded['policies'] expected = { 'iss': self.account_sid, 'account_sid': self.account_sid, 'workspace_sid': self.workspace_sid, 'worker_sid': self.worker_sid, 'channel': self.worker_sid, 'version': 'v1', 'friendly_name': self.worker_sid, } self.assertEqual(expected, decoded) def test_generate_token_default_ttl(self): token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) self.assertEqual(int(time.time()) + 3600, decoded['exp']) def test_generate_token_custom_ttl(self): token = self.cap.generate_token(10000) decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) self.assertEqual(int(time.time()) + 10000, decoded['exp']) def test_defaults(self): token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) websocket_url = ( 'https://event-bridge.twilio.com/v1/wschannels/{0}/{1}'.format(self.account_sid, self.worker_sid) ) expected = [ { 'url': 'https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities', 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, }, { 'url': 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**'.format(self.workspace_sid), 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, }, { 'url': websocket_url, 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, }, { 'url': websocket_url, 'method': 'POST', 'allow': True, 'query_filter': {}, 'post_filter': {}, }, { 'url': 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}'.format(self.workspace_sid, self.worker_sid), 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, } ] self.assertEqual(expected, decoded['policies']) def test_allow_worker_activity_updates(self): self.cap.allow_worker_activity_updates() token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) url = 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}'.format( self.workspace_sid, self.worker_sid, ) expected = { 'url': url, 'method': 'POST', 'allow': True, 'query_filter': {}, 'post_filter': {'ActivitySid': {'required': True}}, } self.assertEqual(expected, decoded['policies'][-1]) def test_allow_worker_fetch_attributes(self): self.cap.allow_worker_fetch_attributes() token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) url = 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}'.format( self.workspace_sid, self.worker_sid, ) expected = { 'url': url, 'method': 'GET', 'allow': True, 'query_filter': {}, 'post_filter': {}, } self.assertEqual(expected, decoded['policies'][-1]) def test_allow_task_reservation_updates(self): self.cap.allow_task_reservation_updates() token = self.cap.generate_token() decoded = jwt.decode(token, self.auth_token) self.assertTrue(decoded is not None) url = 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**'.format( self.workspace_sid, ) expected = { 'url': url, 'method': 'POST', 'allow': True, 'query_filter': {}, 'post_filter': {}, } self.assertEqual(expected, decoded['policies'][-1])
def test_deprecated_worker(self): account_sid = "AC123" auth_token = "foobar" workspace_sid = "WS456" worker_sid = "WK789" capability = TaskRouterCapability(account_sid, auth_token, workspace_sid, worker_sid) capability.generate_token() token = capability.generate_token() self.assertNotEqual(None, token) decoded = jwt.decode(token, auth_token) self.assertNotEqual(None, decoded) self.check_decoded(decoded, account_sid, workspace_sid, worker_sid, worker_sid) policies = decoded['policies'] self.assertEqual(len(policies), 5) # should expect 5 policies for method, url, policy in [ ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[0]), ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[1]), ('GET', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[2]), ('POST', "https://event-bridge.twilio.com/v1/wschannels/AC123/WK789", policies[3]), ('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789", policies[4]) ]: yield self.check_policy, method, url, policy # check deprecated warnings with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") capability.allow_worker_fetch_attributes() assert len(w) == 1 assert issubclass(w[-1].category, DeprecationWarning) assert "deprecated" in str(w[-1].message) with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") capability.allow_worker_activity_updates() assert len(w) == 1 assert issubclass(w[-1].category, DeprecationWarning) assert "deprecated" in str(w[-1].message) with warnings.catch_warnings(record=True) as w: warnings.simplefilter("always") capability.allow_task_reservation_updates() assert len(w) == 1 assert issubclass(w[-1].category, DeprecationWarning) assert "deprecated" in str(w[-1].message)