8000 Checking for filter_friendly_name in TaskrouterConfig · devsec101/twilio-python@cba4bfb · GitHub
[go: up one dir, main page]

Skip to content

Commit cba4bfb

Browse files
committed
Checking for filter_friendly_name in TaskrouterConfig
1 parent 5715631 commit cba4bfb

File tree

3 files changed

+106
-3
lines changed

3 files changed

+106
-3
lines changed

tests/task_router/test_workflow_config.py

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,106 @@ def test_from_json_with_filter_friendly_name(self):
175175
# check that marshaling back stays as "friendly_name"
176176
self.assertEqual(config.to_json(), expected_config_json)
177177

178+
def test_from_json_with_both_filter_and_friendly_name(self):
179+
data = {
180+
'task_routing':
181+
{
182+
'filters': [
183+
{
184+
'expression': 'type == "sales"',
185+
'filter_friendly_name': "Sales",
186+
'friendly_name': 'Sales2',
187+
'targets': [
188+
{
189+
190+
'queue': 'WQec62de0e1148b8477f2e24579779c8b1',
191+
'expression': 'task.language IN worker.languages'
192+
}
193+
]
194+
},
195+
{
196+
'expression': 'type == "marketing"',
197+
'filter_friendly_name': 'Marketing',
198+
'friendly_name': 'Marketing2',
199+
'targets': [
200+
{
201+
'queue': 'WQ2acd4c1a41ffadce5d1bac9e1ce2fa9f',
202+
'expression': 'task.language IN worker.languages'
203+
}
204+
]
205+
},
206+
{
207+
'expression': 'type == "support"',
208+
'filter_friendly_name': 'Support',
209+
'friendly_name': 'Support2',
210+
'targets': [
211+
{
212+
'queue': 'WQe5eb317eb23500ade45087ea6522896c',
213+
'expression': 'task.language IN worker.languages'
214+
}
215+
]
216+
}
217+
],
218+
'default_filter':
219+
{
220+
'queue': 'WQ05f810d2d130344fd56e3c91ece2e594'
221+
}
222+
}
223+
}
224+
# marshal object
225+
config = WorkflowConfig.json2obj(json.dumps(data))
226+
self.assertEqual(3, len(config.task_routing.filters))
227+
self.assertEqual(1, len(config.task_routing.default_filter))
228+
229+
# check that the configuration was marshaled to "friendly_name" and not "filter_friendly_name"
230+
expected_config_data = {
231+
"task_routing":
232+
{
233+
"default_filter":
234+
{
235+
"queue": "WQ05f810d2d130344fd56e3c91ece2e594"
236+
},
237< 8000 code class="diff-text syntax-highlighted-line addition">+
"filters": [
238+
{
239+
"expression": "type == \"sales\"",
240+
"friendly_name": "Sales",
241+
"targets": [
242+
{
243+
"expression": "task.language IN worker.languages",
244+
"queue": "WQec62de0e1148b8477f2e24579779c8b1"
245+
}
246+
]
247+
},
248+
{
249+
"expression": "type == \"marketing\"",
250+
"friendly_name": "Marketing",
251+
"targets": [
252+
{
253+
"expression": "task.language IN worker.languages",
254+
"queue": "WQ2acd4c1a41ffadce5d1bac9e1ce2fa9f"
255+
}
256+
]
257+
},
258+
{
259+
"expression": "type == \"support\"",
260+
"friendly_name": "Support",
261+
"targets": [
262+
{
263+
"expression": "task.language IN worker.languages",
264+
"queue": "WQe5eb317eb23500ade45087ea6522896c"
265+
}
266+
]
267+
}
268+
]
269+
}
270+
}
271+
272+
expected_config_json = json.dumps(expected_config_data,
273+
sort_keys=True,
274+
indent=4)
275+
# check that marshaling back stays as "friendly_name"
276+
self.assertEqual(config.to_json(), expected_config_json)
277+
178278
def is_json(self, myjson):
179279
try:
180280
json.loads(myjson)

twilio/task_router/taskrouter_config.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,5 +13,11 @@ def __init__(self, rules, default_target):
1313
self.filters = rules
1414
self.default_filter = default_target
1515

16+
for rule in self.filters:
17+
if not isinstance(rule, WorkflowRule):
18+
filter_friendly_name = rule.pop('filter_friendly_name', None)
19+
if filter_friendly_name is not None:
20+
rule['friendly_name'] = filter_friendly_name
21+
1622
def __repr__(self):
1723
return self.__dict__

twilio/task_router/workflow_config.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,6 @@ def to_json(self):
2121

2222
@staticmethod
2323
def json2obj(data):
24-
# replace instances of "filter_friendly_name" with "friendly_name"
25-
data = data.replace("filter_friendly_name", "friendly_name")
26-
2724
m = json.loads(data)
2825
return WorkflowConfig(m['task_routing']['filters'],
2926
m['task_routing']['default_filter'])

0 commit comments

Comments
 (0)
0