Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Loading Reservations under a Worker by default in TaskRouter JS SDK #247

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jan 28, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 12 additions & 5 deletions tests/task_router/test_capability.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,29 +59,36 @@ def test_defaults(self):
)
expected = [
{
'url': 'https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities',
'url': websocket_url,
'method': 'GET',
'allow': True,
'query_filter': {},
'post_filter': {},
},
{
'url': 'https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**'.format(self.workspace_sid),
'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': websocket_url,
'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': 'POST',
'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': {},
Expand Down
28 changes: 15 additions & 13 deletions tests/task_router/test_task_router_capability.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,14 +72,15 @@ def test_worker_default(self):
self.check_decoded(decoded, account_sid, workspace_sid, worker_sid, worker_sid)

policies = decoded['policies']
self.assertEqual(len(policies), 5)
self.assertEqual(len(policies), 6)

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])
('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/Workers/WK789", policies[2])
('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[3]),
('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[4]),
('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789/Reservations/**", policies[5])
]:
yield self.check_policy, method, url, policy

Expand Down Expand Up @@ -128,15 +129,16 @@ def test_deprecated_worker(self):
self.check_decoded(decoded, account_sid, workspace_sid, worker_sid, worker_sid)

policies = decoded['policies']
self.assertEqual(len(policies), 5)
self.assertEqual(len(policies), 6)

# should expect 5 policies
# should expect 6 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])
('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

Expand Down
27 changes: 15 additions & 12 deletions tests/task_router/test_task_router_worker_capability.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,17 +72,18 @@ def test_defaults(self):

websocket_url = 'https://event-bridge.twilio.com/v1/wschannels/{0}/{1}'.format(self.account_sid, self.worker_sid)

# expect 5 policies
# expect 6 policies
policies = decoded['policies']
self.assertEqual(len(policies), 5)
self.assertEqual(len(policies), 6)

# should expect 5 policies
# should expect 6 policies
for method, url, policy in [
('GET', websocket_url, policies[0]),
('POST', websocket_url, policies[1]),
('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789", policies[2]),
('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[3]),
('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[4])
('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Activities", policies[3])
('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Tasks/**", policies[4]),
('GET', "https://taskrouter.twilio.com/v1/Workspaces/WS456/Workers/WK789/Reservations/**", policies[5])
]:
yield self.check_policy, method, url, policy

Expand All @@ -98,8 +99,8 @@ def test_allow_activity_updates(self):
self.assertNotEqual(None, decoded)

policies = decoded['policies']
self.assertEqual(len(policies), 6)
policy = policies[5]
self.assertEqual(len(policies), 7)
policy = policies[6]

url = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}".format(self.workspace_sid, self.worker_sid)

Expand All @@ -121,13 +122,15 @@ def test_allow_reservation_updates(self):
self.assertNotEqual(None, decoded)

policies = decoded['policies']
self.assertEqual(len(policies), 6)

policy = policies[5]
self.assertEqual(len(policies), 8)

url = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**".format(self.workspace_sid)
taskPolicy = policies[6]
tasksUrl = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Tasks/**".format(self.workspace_sid)
self.check_policy('POST', tasksUrl, taskPolicy)

self.check_policy('POST', url, policy)
workerReservationsPolicy = policies[7]
reservationsUrl = "https://taskrouter.twilio.com/v1/Workspaces/{0}/Workers/{1}/Reservations/**".format(self.workspace_sid, self.worker_sid)
self.check_policy('POST', reservationsUrl, workerReservationsPolicy)

if __name__ == "__main__":
unittest.main()
57 changes: 33 additions & 24 deletions twilio/task_router/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,21 @@
import time
from .. import jwt

from .taskrouter_config import (
TaskRouterConfig
)

from .workflow_config import (
WorkflowConfig
)

from .workflow_ruletarget import (
WorkflowRuleTarget
)
from .workflow_rule import (
WorkflowRule
)

import warnings
warnings.simplefilter('always', DeprecationWarning)

Expand Down Expand Up @@ -39,12 +54,12 @@ def __init__(self, account_sid, auth_token, workspace_sid, channel_id):
# validate the JWT
self.validate_jwt()

# set up resources
self.setup_resource()

# add permissions to GET and POST to the event-bridge channel
self.allow_web_sockets(channel_id)

# set up resources
self.setup_resource()

# add permissions to fetch the instance resource
self.add_policy(self.resource_url, "GET", True)

Expand All @@ -61,8 +76,11 @@ def setup_resource(self):
activity_url = self.base_url + "/Activities"
self.allow(activity_url, "GET")

reservations_url = self.base_url + "/Tasks/**"
self.allow(reservations_url, "GET")
tasks_url = self.base_url + "/Tasks/**"
self.allow(tasks_url, "GET")

worker_reservations_url = self.resource_url + "/Reservations/**"
self.allow(worker_reservations_url, "GET")

elif self.channel_prefix == "WQ":
self.resource_url = "{0}/TaskQueues/{1}".format(
Expand Down Expand Up @@ -209,13 +227,15 @@ def __init__(self, account_sid, auth_token, workspace_sid, worker_sid):
workspace_sid,
worker_sid)

self.reservations_url = self.base_url + "/Tasks/**"
self.activity_url = self.base_url + "/Activities"
self.reservations_url = self.base_url + "/Tasks/**"
self.worker_reservations_url = self.resource_url + "/Reservations/**"

# add permissions to fetch the list of activities and
# list of worker reservations
self.allow(self.reservations_url, "GET")
# add permissions to fetch the
# list of activities, tasks, and worker reservations
self.allow(self.activity_url, "GET")
self.allow(self.reservations_url, "GET")
self.allow(self.worker_reservations_url, "GET")

def setup_resource(self):
self.resource_url = self.base_url + "/Workers/" + self.channel_id
Expand All @@ -232,6 +252,10 @@ def allow_reservation_updates(self):
self.reservations_url,
'POST',
True))
self.policies.append(self.make_policy(
self.worker_reservations_url,
'POST',
True))


class TaskRouterTaskQueueCapability(TaskRouterCapability):
Expand All @@ -248,18 +272,3 @@ def __init__(self, account_sid, auth_token, workspace_sid):

def setup_resource(self):
self.resource_url = self.base_url

from .taskrouter_config import (
TaskRouterConfig
)

from .workflow_config import (
WorkflowConfig
)

from .workflow_ruletarget import (
WorkflowRuleTarget
)
from .workflow_rule import (
WorkflowRule
)