twilio-ruby 5.0.0.rc21 → 5.0.0.rc22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (238) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +3 -0
  3. data/lib/twilio-ruby.rb +7 -3
  4. data/lib/twilio-ruby/framework/domain.rb +5 -1
  5. data/lib/twilio-ruby/framework/page.rb +4 -4
  6. data/lib/twilio-ruby/framework/serialize.rb +3 -2
  7. data/lib/twilio-ruby/framework/values.rb +7 -0
  8. data/lib/twilio-ruby/framework/version.rb +4 -6
  9. data/lib/twilio-ruby/jwt/access_token.rb +160 -134
  10. data/lib/twilio-ruby/jwt/client_capability.rb +98 -0
  11. data/lib/twilio-ruby/jwt/jwt.rb +56 -0
  12. data/lib/twilio-ruby/jwt/task_router.rb +108 -139
  13. data/lib/twilio-ruby/rest/accounts.rb +1 -1
  14. data/lib/twilio-ruby/rest/accounts/v1/credential.rb +1 -1
  15. data/lib/twilio-ruby/rest/accounts/v1/credential/public_key.rb +30 -17
  16. data/lib/twilio-ruby/rest/api.rb +2 -2
  17. data/lib/twilio-ruby/rest/api/v2010/account.rb +31 -18
  18. data/lib/twilio-ruby/rest/api/v2010/account/address.rb +32 -19
  19. data/lib/twilio-ruby/rest/api/v2010/account/address/dependent_phone_number.rb +18 -5
  20. data/lib/twilio-ruby/rest/api/v2010/account/application.rb +32 -19
  21. data/lib/twilio-ruby/rest/api/v2010/account/authorized_connect_app.rb +20 -7
  22. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number.rb +20 -7
  23. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/local.rb +20 -7
  24. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/mobile.rb +20 -7
  25. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/toll_free.rb +20 -7
  26. data/lib/twilio-ruby/rest/api/v2010/account/call.rb +33 -20
  27. data/lib/twilio-ruby/rest/api/v2010/account/call/feedback.rb +13 -13
  28. data/lib/twilio-ruby/rest/api/v2010/account/call/feedback_summary.rb +8 -8
  29. data/lib/twilio-ruby/rest/api/v2010/account/call/notification.rb +23 -10
  30. data/lib/twilio-ruby/rest/api/v2010/account/call/recording.rb +23 -10
  31. data/lib/twilio-ruby/rest/api/v2010/account/conference.rb +27 -14
  32. data/lib/twilio-ruby/rest/api/v2010/account/conference/participant.rb +32 -19
  33. data/lib/twilio-ruby/rest/api/v2010/account/connect_app.rb +25 -12
  34. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number.rb +32 -19
  35. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/assigned_add_on.rb +24 -11
  36. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/assigned_add_on/assigned_add_on_extension.rb +20 -7
  37. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/local.rb +24 -11
  38. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/mobile.rb +24 -11
  39. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/toll_free.rb +24 -11
  40. data/lib/twilio-ruby/rest/api/v2010/account/key.rb +26 -13
  41. data/lib/twilio-ruby/rest/api/v2010/account/message.rb +30 -17
  42. data/lib/twilio-ruby/rest/api/v2010/account/message/feedback.rb +5 -5
  43. data/lib/twilio-ruby/rest/api/v2010/account/message/media.rb +23 -10
  44. data/lib/twilio-ruby/rest/api/v2010/account/new_key.rb +5 -5
  45. data/lib/twilio-ruby/rest/api/v2010/account/new_signing_key.rb +5 -5
  46. data/lib/twilio-ruby/rest/api/v2010/account/notification.rb +23 -10
  47. data/lib/twilio-ruby/rest/api/v2010/account/outgoing_caller_id.rb +28 -15
  48. data/lib/twilio-ruby/rest/api/v2010/account/queue.rb +30 -17
  49. data/lib/twilio-ruby/rest/api/v2010/account/queue/member.rb +23 -10
  50. data/lib/twilio-ruby/rest/api/v2010/account/recording.rb +23 -10
  51. data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result.rb +21 -8
  52. data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result/payload.rb +21 -8
  53. data/lib/twilio-ruby/rest/api/v2010/account/recording/transcription.rb +21 -8
  54. data/lib/twilio-ruby/rest/api/v2010/account/short_code.rb +27 -14
  55. data/lib/twilio-ruby/rest/api/v2010/account/signing_key.rb +26 -13
  56. data/lib/twilio-ruby/rest/api/v2010/account/sip.rb +1 -1
  57. data/lib/twilio-ruby/rest/api/v2010/account/sip/credential_list.rb +27 -14
  58. data/lib/twilio-ruby/rest/api/v2010/account/sip/credential_list/credential.rb +29 -16
  59. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain.rb +30 -17
  60. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/credential_list_mapping.rb +24 -11
  61. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/ip_access_control_list_mapping.rb +24 -11
  62. data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list.rb +27 -14
  63. data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list/ip_address.rb +29 -16
  64. data/lib/twilio-ruby/rest/api/v2010/account/token.rb +5 -5
  65. data/lib/twilio-ruby/rest/api/v2010/account/transcription.rb +21 -8
  66. data/lib/twilio-ruby/rest/api/v2010/account/usage.rb +1 -1
  67. data/lib/twilio-ruby/rest/api/v2010/account/usage/record.rb +20 -7
  68. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/all_time.rb +20 -7
  69. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/daily.rb +20 -7
  70. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/last_month.rb +20 -7
  71. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/monthly.rb +20 -7
  72. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/this_month.rb +20 -7
  73. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/today.rb +20 -7
  74. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yearly.rb +20 -7
  75. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yesterday.rb +20 -7
  76. data/lib/twilio-ruby/rest/api/v2010/account/usage/trigger.rb +32 -19
  77. data/lib/twilio-ruby/rest/api/v2010/account/validation_request.rb +5 -5
  78. data/lib/twilio-ruby/rest/chat.rb +4 -4
  79. data/lib/twilio-ruby/rest/chat/v1/credential.rb +30 -17
  80. data/lib/twilio-ruby/rest/chat/v1/service.rb +29 -16
  81. data/lib/twilio-ruby/rest/chat/v1/service/channel.rb +32 -19
  82. data/lib/twilio-ruby/rest/chat/v1/service/channel/invite.rb +27 -14
  83. data/lib/twilio-ruby/rest/chat/v1/service/channel/member.rb +32 -19
  84. data/lib/twilio-ruby/rest/chat/v1/service/channel/message.rb +32 -19
  85. data/lib/twilio-ruby/rest/chat/v1/service/role.rb +27 -14
  86. data/lib/twilio-ruby/rest/chat/v1/service/user.rb +30 -17
  87. data/lib/twilio-ruby/rest/chat/v1/service/user/user_channel.rb +18 -5
  88. data/lib/twilio-ruby/rest/chat/v2/credential.rb +30 -17
  89. data/lib/twilio-ruby/rest/chat/v2/service.rb +29 -16
  90. data/lib/twilio-ruby/rest/chat/v2/service/channel.rb +32 -19
  91. data/lib/twilio-ruby/rest/chat/v2/service/channel/invite.rb +27 -14
  92. data/lib/twilio-ruby/rest/chat/v2/service/channel/member.rb +32 -19
  93. data/lib/twilio-ruby/rest/chat/v2/service/channel/message.rb +32 -19
  94. data/lib/twilio-ruby/rest/chat/v2/service/role.rb +27 -14
  95. data/lib/twilio-ruby/rest/chat/v2/service/user.rb +30 -17
  96. data/lib/twilio-ruby/rest/chat/v2/service/user/user_channel.rb +18 -5
  97. data/lib/twilio-ruby/rest/fax.rb +2 -2
  98. data/lib/twilio-ruby/rest/fax/v1/fax.rb +32 -19
  99. data/lib/twilio-ruby/rest/fax/v1/fax/fax_media.rb +21 -8
  100. data/lib/twilio-ruby/rest/ip_messaging.rb +4 -4
  101. data/lib/twilio-ruby/rest/ip_messaging/v1/credential.rb +30 -17
  102. data/lib/twilio-ruby/rest/ip_messaging/v1/service.rb +29 -16
  103. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel.rb +32 -19
  104. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/invite.rb +27 -14
  105. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/member.rb +32 -19
  106. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/message.rb +32 -19
  107. data/lib/twilio-ruby/rest/ip_messaging/v1/service/role.rb +27 -14
  108. data/lib/twilio-ruby/rest/ip_messaging/v1/service/user.rb +30 -17
  109. data/lib/twilio-ruby/rest/ip_messaging/v1/service/user/user_channel.rb +18 -5
  110. data/lib/twilio-ruby/rest/ip_messaging/v2/credential.rb +30 -17
  111. data/lib/twilio-ruby/rest/ip_messaging/v2/service.rb +29 -16
  112. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel.rb +32 -19
  113. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/invite.rb +27 -14
  114. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/member.rb +32 -19
  115. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/message.rb +32 -19
  116. data/lib/twilio-ruby/rest/ip_messaging/v2/service/role.rb +27 -14
  117. data/lib/twilio-ruby/rest/ip_messaging/v2/service/user.rb +30 -17
  118. data/lib/twilio-ruby/rest/ip_messaging/v2/service/user/user_channel.rb +18 -5
  119. data/lib/twilio-ruby/rest/lookups.rb +2 -2
  120. data/lib/twilio-ruby/rest/lookups/v1/phone_number.rb +6 -6
  121. data/lib/twilio-ruby/rest/messaging.rb +2 -2
  122. data/lib/twilio-ruby/rest/messaging/v1/service.rb +30 -17
  123. data/lib/twilio-ruby/rest/messaging/v1/service/alpha_sender.rb +24 -11
  124. data/lib/twilio-ruby/rest/messaging/v1/service/phone_number.rb +24 -11
  125. data/lib/twilio-ruby/rest/messaging/v1/service/short_code.rb +24 -11
  126. data/lib/twilio-ruby/rest/monitor.rb +4 -4
  127. data/lib/twilio-ruby/rest/monitor/v1/alert.rb +23 -10
  128. data/lib/twilio-ruby/rest/monitor/v1/event.rb +22 -9
  129. data/lib/twilio-ruby/rest/notify.rb +4 -4
  130. data/lib/twilio-ruby/rest/notify/v1/credential.rb +30 -17
  131. data/lib/twilio-ruby/rest/notify/v1/service.rb +32 -19
  132. data/lib/twilio-ruby/rest/notify/v1/service/binding.rb +27 -14
  133. data/lib/twilio-ruby/rest/notify/v1/service/notification.rb +5 -5
  134. data/lib/twilio-ruby/rest/notify/v1/service/segment.rb +18 -5
  135. data/lib/twilio-ruby/rest/notify/v1/service/user.rb +27 -14
  136. data/lib/twilio-ruby/rest/notify/v1/service/user/segment_memberships.rb +7 -7
  137. data/lib/twilio-ruby/rest/notify/v1/service/user/user_binding.rb +27 -14
  138. data/lib/twilio-ruby/rest/preview.rb +18 -18
  139. data/lib/twilio-ruby/rest/preview/bulk_exports/export.rb +3 -3
  140. data/lib/twilio-ruby/rest/preview/bulk_exports/export/day.rb +18 -5
  141. data/lib/twilio-ruby/rest/preview/bulk_exports/export_configuration.rb +8 -8
  142. data/lib/twilio-ruby/rest/preview/hosted_numbers/hosted_number_order.rb +32 -19
  143. data/lib/twilio-ruby/rest/preview/marketplace/available_add_on.rb +20 -7
  144. data/lib/twilio-ruby/rest/preview/marketplace/available_add_on/available_add_on_extension.rb +20 -7
  145. data/lib/twilio-ruby/rest/preview/marketplace/installed_add_on.rb +30 -17
  146. data/lib/twilio-ruby/rest/preview/marketplace/installed_add_on/installed_add_on_extension.rb +23 -10
  147. data/lib/twilio-ruby/rest/preview/proxy/service.rb +30 -17
  148. data/lib/twilio-ruby/rest/preview/proxy/service/phone_number.rb +24 -11
  149. data/lib/twilio-ruby/rest/preview/proxy/service/session.rb +32 -19
  150. data/lib/twilio-ruby/rest/preview/proxy/service/session/interaction.rb +22 -9
  151. data/lib/twilio-ruby/rest/preview/proxy/service/session/participant.rb +32 -19
  152. data/lib/twilio-ruby/rest/preview/proxy/service/session/participant/message_interaction.rb +24 -11
  153. data/lib/twilio-ruby/rest/preview/proxy/service/short_code.rb +24 -11
  154. data/lib/twilio-ruby/rest/preview/sync/service.rb +30 -17
  155. data/lib/twilio-ruby/rest/preview/sync/service/document.rb +28 -15
  156. data/lib/twilio-ruby/rest/preview/sync/service/document/document_permission.rb +24 -11
  157. data/lib/twilio-ruby/rest/preview/sync/service/sync_list.rb +25 -12
  158. data/lib/twilio-ruby/rest/preview/sync/service/sync_list/sync_list_item.rb +29 -16
  159. data/lib/twilio-ruby/rest/preview/sync/service/sync_list/sync_list_permission.rb +24 -11
  160. data/lib/twilio-ruby/rest/preview/sync/service/sync_map.rb +25 -12
  161. data/lib/twilio-ruby/rest/preview/sync/service/sync_map/sync_map_item.rb +29 -16
  162. data/lib/twilio-ruby/rest/preview/sync/service/sync_map/sync_map_permission.rb +24 -11
  163. data/lib/twilio-ruby/rest/preview/wireless/command.rb +26 -13
  164. data/lib/twilio-ruby/rest/preview/wireless/rate_plan.rb +30 -17
  165. data/lib/twilio-ruby/rest/preview/wireless/sim.rb +28 -15
  166. data/lib/twilio-ruby/rest/preview/wireless/sim/usage.rb +6 -6
  167. data/lib/twilio-ruby/rest/pricing.rb +3 -3
  168. data/lib/twilio-ruby/rest/pricing/v1/messaging.rb +1 -1
  169. data/lib/twilio-ruby/rest/pricing/v1/messaging/country.rb +20 -7
  170. data/lib/twilio-ruby/rest/pricing/v1/phone_number.rb +1 -1
  171. data/lib/twilio-ruby/rest/pricing/v1/phone_number/country.rb +20 -7
  172. data/lib/twilio-ruby/rest/pricing/v1/voice.rb +1 -1
  173. data/lib/twilio-ruby/rest/pricing/v1/voice/country.rb +20 -7
  174. data/lib/twilio-ruby/rest/pricing/v1/voice/number.rb +3 -3
  175. data/lib/twilio-ruby/rest/sync.rb +2 -2
  176. data/lib/twilio-ruby/rest/sync/v1/service.rb +30 -17
  177. data/lib/twilio-ruby/rest/sync/v1/service/document.rb +28 -15
  178. data/lib/twilio-ruby/rest/sync/v1/service/document/document_permission.rb +24 -11
  179. data/lib/twilio-ruby/rest/sync/v1/service/sync_list.rb +25 -12
  180. data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_item.rb +29 -16
  181. data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_permission.rb +24 -11
  182. data/lib/twilio-ruby/rest/sync/v1/service/sync_map.rb +25 -12
  183. data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_item.rb +29 -16
  184. data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_permission.rb +24 -11
  185. data/lib/twilio-ruby/rest/taskrouter.rb +2 -2
  186. data/lib/twilio-ruby/rest/taskrouter/v1/workspace.rb +33 -20
  187. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/activity.rb +32 -19
  188. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/event.rb +22 -9
  189. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task.rb +32 -19
  190. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task/reservation.rb +27 -14
  191. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_channel.rb +20 -7
  192. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue.rb +33 -20
  193. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_statistics.rb +6 -6
  194. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queues_statistics.rb +20 -7
  195. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker.rb +33 -20
  196. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/reservation.rb +27 -14
  197. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_channel.rb +25 -12
  198. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_statistics.rb +6 -6
  199. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_statistics.rb +6 -6
  200. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow.rb +33 -20
  201. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_statistics.rb +6 -6
  202. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_statistics.rb +6 -6
  203. data/lib/twilio-ruby/rest/trunking.rb +2 -2
  204. data/lib/twilio-ruby/rest/trunking/v1/trunk.rb +30 -17
  205. data/lib/twilio-ruby/rest/trunking/v1/trunk/credential_list.rb +24 -11
  206. data/lib/twilio-ruby/rest/trunking/v1/trunk/ip_access_control_list.rb +24 -11
  207. data/lib/twilio-ruby/rest/trunking/v1/trunk/origination_url.rb +29 -16
  208. data/lib/twilio-ruby/rest/trunking/v1/trunk/phone_number.rb +24 -11
  209. data/lib/twilio-ruby/rest/video.rb +4 -4
  210. data/lib/twilio-ruby/rest/video/v1/recording.rb +23 -10
  211. data/lib/twilio-ruby/rest/video/v1/room.rb +29 -16
  212. data/lib/twilio-ruby/rest/video/v1/room/recording.rb +20 -7
  213. data/lib/twilio-ruby/rest/wireless.rb +6 -6
  214. data/lib/twilio-ruby/rest/wireless/v1/command.rb +26 -13
  215. data/lib/twilio-ruby/rest/wireless/v1/rate_plan.rb +30 -17
  216. data/lib/twilio-ruby/rest/wireless/v1/sim.rb +27 -14
  217. data/lib/twilio-ruby/rest/wireless/v1/sim/usage_record.rb +20 -7
  218. data/lib/twilio-ruby/twiml/messaging_response.rb +147 -0
  219. data/lib/twilio-ruby/twiml/twiml.rb +77 -0
  220. data/lib/twilio-ruby/twiml/voice_response.rb +925 -0
  221. data/lib/twilio-ruby/version.rb +1 -1
  222. data/spec/holodeck/hologram.rb +0 -1
  223. data/spec/jwt/access_token_spec.rb +126 -182
  224. data/spec/jwt/client_capability_spec.rb +104 -0
  225. data/spec/jwt/task_router_spec.rb +164 -97
  226. data/spec/twiml/messaging_response_spec.rb +62 -0
  227. data/spec/twiml/voice_response_spec.rb +452 -0
  228. data/twilio-ruby.gemspec +4 -2
  229. metadata +36 -23
  230. data/lib/twilio-ruby/compatibility/v2010/account/call/feedback.rb +0 -15
  231. data/lib/twilio-ruby/compatibility/v2010/account/queue/member.rb +0 -23
  232. data/lib/twilio-ruby/jwt/capability.rb +0 -64
  233. data/lib/twilio-ruby/twiml/response.rb +0 -16
  234. data/spec/jwt/capability_spec.rb +0 -186
  235. data/spec/jwt/task_router_taskqueue_spec.rb +0 -111
  236. data/spec/jwt/task_router_worker_spec.rb +0 -146
  237. data/spec/jwt/task_router_workspace_spec.rb +0 -110
  238. data/spec/twiml/twiml_response_spec.rb +0 -47
@@ -1,3 +1,3 @@
1
1
  module Twilio
2
- VERSION = '5.0.0.rc21'
2
+ VERSION = '5.0.0.rc22'
3
3
  end
@@ -1,4 +1,3 @@
1
- require 'json'
2
1
  require 'uri'
3
2
 
4
3
  class Hologram
@@ -1,192 +1,136 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Twilio::JWT::AccessToken do
4
-
5
- it 'should generate a token for no grants' do
6
- scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret'
7
- token = scat.to_s
8
- expect(token).not_to be_nil
9
- payload, header = JWT.decode token, 'secret'
10
-
11
- expect(payload['iss']).to eq('SK123')
12
- expect(payload['sub']).to eq('AC123')
13
- expect(payload['exp']).not_to be_nil
14
- expect(payload['exp']).to be >= Time.now.to_i
15
- expect(payload['jti']).not_to be_nil
16
- expect(payload['jti']).to start_with payload['iss']
17
- expect(payload['nbf']).to be_nil
18
- expect(payload['grants']).not_to be_nil
19
- expect(payload['grants'].count).to eq(0)
20
- end
21
-
22
- it 'should generate a nbf' do
23
- now = Time.now.to_i - 1
24
- scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret'
25
- scat.identity = 'abc'
26
- scat.nbf = now
27
-
28
- token = scat.to_s
29
- expect(token).not_to be_nil
30
- payload, header = JWT.decode token, 'secret'
31
-
32
- expect(payload['iss']).to eq('SK123')
33
- expect(payload['sub']).to eq('AC123')
34
- expect(payload['nbf']).not_to be_nil
35
- expect(payload['nbf']).to eq(now)
36
- expect(payload['exp']).not_to be_nil
37
- expect(payload['exp']).to be >= Time.now.to_i
38
- expect(payload['jti']).not_to be_nil
39
- expect(payload['jti']).to start_with payload['iss']
40
- expect(payload['grants']).not_to be_nil
41
- expect(payload['grants'].count).to eq(1)
42
- expect(payload['grants']['identity']).to eq('abc')
43
- end
44
-
45
- it 'should be able to add endpoint grants' do
46
- scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret'
47
-
48
- grant = Twilio::JWT::AccessToken::IpMessagingGrant.new
49
- grant.push_credential_sid = 'CR123'
50
- grant.deployment_role_sid = 'DR123'
51
- grant.service_sid = 'IS123'
52
- grant.endpoint_id = 'EP123'
53
- scat.add_grant(grant)
54
-
55
- token = scat.to_s
56
- expect(token).not_to be_nil
57
- payload, header = JWT.decode token, 'secret'
58
-
59
- expect(payload['iss']).to eq('SK123')
60
- expect(payload['sub']).to eq('AC123')
61
- expect(payload['exp']).not_to be_nil
62
- expect(payload['exp']).to be >= Time.now.to_i
63
- expect(payload['jti']).not_to be_nil
64
- expect(payload['jti']).to start_with payload['iss']
65
- expect(payload['grants']).not_to be_nil
66
- expect(payload['grants'].count).to eq(1)
67
- expect(payload['grants']['ip_messaging']).not_to be_nil
68
- expect(payload['grants']['ip_messaging']['service_sid']).to eq('IS123')
69
- expect(payload['grants']['ip_messaging']['endpoint_id']).to eq('EP123')
70
- expect(payload['grants']['ip_messaging']['push_credential_sid']).to eq('CR123')
71
- expect(payload['grants']['ip_messaging']['deployment_role_sid']).to eq('DR123')
4
+ describe 'access_token functionality ' do
5
+ it 'should generate a token for no grants' do
6
+ scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123', 'secret'
7
+ payload, _ = JWT.decode scat.to_s, 'secret'
8
+ expect(payload['sub']).to eq('AC123')
9
+ expect(payload['iss']).to eq('SK123')
10
+ expect(payload['exp']).to be > Time.now.to_i
11
+ expect(payload['jti']).to start_with payload['iss']
12
+ expect(payload['nbf']).to be <= Time.now.to_i
13
+ expect(payload['grants']).not_to be_nil
14
+ expect(payload['grants'].count).to eq(0)
15
+ end
16
+
17
+ it 'should add the proper headers' do
18
+ scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123', 'secret'
19
+ _, headers = JWT.decode scat.to_s, 'secret'
20
+ expect(headers['cty']).to eq('twilio-fpa;v=1')
21
+ end
22
+
23
+ it 'identity should exist in the grants' do
24
+ scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123', 'secret', identity: 'test-identity'
25
+ payload, _ = JWT.decode scat.to_s, 'secret'
26
+ expect(payload['grants']).to eq({'identity' => 'test-identity'})
27
+ end
28
+
29
+ it 'grants during initialization' do
30
+ room_grant = Twilio::JWT::VideoGrant.new
31
+ room_grant.room = 'RM123'
32
+ grants = [room_grant]
33
+ scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123', 'secret', grants
34
+ payload, _ = JWT.decode scat.to_s, 'secret'
35
+ expect(payload['grants'].count).to eq(1)
36
+ expect(payload['grants']['video']['room']).to eq('RM123')
37
+ end
38
+
39
+ describe 'all the grants' do
40
+ before :each do
41
+ @scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123', 'secret'
42
+ end
43
+
44
+ it 'IpMessaging grant' do
45
+ ip_messaging_grant = Twilio::JWT::IpMessagingGrant.new
46
+ ip_messaging_grant.service_sid = 'SS123'
47
+ ip_messaging_grant.endpoint_id = 'EP123'
48
+ ip_messaging_grant.deployment_role_sid = 'DR123'
49
+ ip_messaging_grant.push_credential_sid = 'PC123'
50
+ @scat.add_grant(ip_messaging_grant)
51
+ payload, _ = JWT.decode @scat.to_s, 'secret'
52
+ expect(payload['grants'].count).to eq(1)
53
+ expect(payload['grants']['ip_messaging']['service_sid']).to eq('SS123')
54
+ expect(payload['grants']['ip_messaging']['endpoint_id']).to eq('EP123')
55
+ expect(payload['grants']['ip_messaging']['push_credential_sid']).to eq('PC123')
56
+ expect(payload['grants']['ip_messaging']['deployment_role_sid']).to eq('DR123')
57
+ end
58
+
59
+ it 'Voice grant' do
60
+ voice_grant = Twilio::JWT::VoiceGrant.new
61
+ voice_grant.outgoing_application_sid = 'AP123'
62
+ voice_grant.outgoing_application_params = {:foo => 'bar'}
63
+ voice_grant.push_credential_sid = 'PC123'
64
+ voice_grant.endpoint_id = 'EP123'
65
+ @scat.add_grant(voice_grant)
66
+ payload, _ = JWT.decode @scat.to_s, 'secret'
67
+ expect(payload['grants'].count).to eq(1)
68
+ expect(payload['grants']['voice']['outgoing']['application_sid']).to eq('AP123')
69
+ expect(payload['grants']['voice']['outgoing']['params']['foo']).to eq('bar')
70
+ expect(payload['grants']['voice']['push_credential_sid']).to eq('PC123')
71
+ expect(payload['grants']['voice']['endpoint_id']).to eq('EP123')
72
+ end
73
+
74
+ it 'Sync grant' do
75
+ sync_grant = Twilio::JWT::SyncGrant.new
76
+ sync_grant.service_sid = 'SS123'
77
+ sync_grant.endpoint_id = 'EP123'
78
+ @scat.add_grant(sync_grant)
79
+ payload, _ = JWT.decode @scat.to_s, 'secret'
80
+ expect(payload['grants'].count).to eq(1)
81
+ expect(payload['grants']['data_sync']['service_sid']).to eq('SS123')
82
+ expect(payload['grants']['data_sync']['endpoint_id']).to eq('EP123')
83
+ end
84
+
85
+ it 'Conversations grant' do
86
+ conversation_grant = Twilio::JWT::ConversationsGrant.new
87
+ conversation_grant.configuration_profile_sid = 'VS123'
88
+ @scat.add_grant(conversation_grant)
89
+ payload, _ = JWT.decode @scat.to_s, 'secret'
90
+ expect(payload['grants'].count).to eq(1)
91
+ expect(payload['grants']['rtc']['configuration_profile_sid']).to eq('VS123')
92
+ end
93
+
94
+ it 'Room grant' do
95
+ room_grant = Twilio::JWT::VideoGrant.new
96
+ room_grant.room = 'RM123'
97
+ @scat.add_grant(room_grant)
98
+ payload, _ = JWT.decode @scat.to_s, 'secret'
99
+ expect(payload['grants'].count).to eq(1)
100
+ expect(payload['grants']['video']['room']).to eq('RM123')
101
+ end
102
+
103
+ it 'TaskRouter grant' do
104
+ task_router_grant = Twilio::JWT::TaskRouterGrant.new
105
+ task_router_grant.workspace_sid = 'WS123'
106
+ task_router_grant.worker_sid = 'WK123'
107
+ task_router_grant.role = 'worker'
108
+ @scat.add_grant(task_router_grant)
109
+ payload, _ = JWT.decode @scat.to_s, 'secret'
110
+ expect(payload['grants'].count).to eq(1)
111
+ expect(payload['grants']['task_router']['workspace_sid']).to eq('WS123')
112
+ expect(payload['grants']['task_router']['worker_sid']).to eq('WK123')
113
+ expect(payload['grants']['task_router']['role']).to eq('worker')
114
+ end
115
+
116
+ it 'multiple grants' do
117
+ room_grant = Twilio::JWT::VideoGrant.new
118
+ room_grant.room = 'RM123'
119
+ @scat.add_grant(room_grant)
120
+ task_router_grant = Twilio::JWT::TaskRouterGrant.new
121
+ task_router_grant.workspace_sid = 'WS123'
122
+ @scat.add_grant(task_router_grant)
123
+ payload, _ = JWT.decode @scat.to_s, 'secret'
124
+ expect(payload['grants'].count).to eq(2)
125
+ expect(payload['grants']['video']).not_to be_nil
126
+ expect(payload['grants']['task_router']).not_to be_nil
127
+ end
128
+ end
72
129
  end
130
+ end
73
131
 
74
- it 'should be able to add Sync grants' do
75
- scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret'
76
- scat.identity = "brodawg"
77
-
78
- grant = Twilio::JWT::AccessToken::SyncGrant.new
79
- grant.service_sid = 'IS123'
80
- grant.endpoint_id = 'EP123'
81
- scat.add_grant(grant)
82
-
83
- token = scat.to_s
84
- expect(token).not_to be_nil
85
- payload, header = JWT.decode token, 'secret'
86
-
87
- expect(payload['iss']).to eq('SK123')
88
- expect(payload['sub']).to eq('AC123')
89
- expect(payload['exp']).not_to be_nil
90
- expect(payload['exp']).to be >= Time.now.to_i
91
- expect(payload['jti']).not_to be_nil
92
- expect(payload['jti']).to start_with payload['iss']
93
- expect(payload['grants']).not_to be_nil
94
- expect(payload['grants'].count).to eq(2)
95
- expect(payload['grants']['identity']).to eq("brodawg")
96
- expect(payload['grants']['data_sync']).not_to be_nil
97
- expect(payload['grants']['data_sync']['service_sid']).to eq('IS123')
98
- expect(payload['grants']['data_sync']['endpoint_id']).to eq('EP123')
99
- end
100
132
 
101
- it 'should add rest grants' do
102
- scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret'
103
- scat.add_grant(Twilio::JWT::AccessToken::VideoGrant.new)
104
- scat.add_grant(Twilio::JWT::AccessToken::IpMessagingGrant.new)
105
-
106
- token = scat.to_s
107
- expect(token).not_to be_nil
108
- payload, header = JWT.decode token, 'secret'
109
-
110
- expect(payload['iss']).to eq('SK123')
111
- expect(payload['sub']).to eq('AC123')
112
- expect(payload['exp']).not_to be_nil
113
- expect(payload['exp']).to be >= Time.now.to_i
114
- expect(payload['jti']).not_to be_nil
115
- expect(payload['jti']).to start_with payload['iss']
116
- expect(payload['grants']).not_to be_nil
117
- expect(payload['grants'].count).to eq(2)
118
- expect(payload['grants']['video']).not_to be_nil
119
- expect(payload['grants']['ip_messaging']).not_to be_nil
120
- end
121
133
 
122
- it 'should add programmable voice grant' do
123
- scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret'
124
- pvg = Twilio::JWT::AccessToken::VoiceGrant.new
125
- pvg.outgoing_application_sid = 'AP123'
126
- pvg.outgoing_application_params = { :foo => 'bar' }
127
-
128
- scat.add_grant(pvg)
129
-
130
- token = scat.to_s
131
- expect(token).not_to be_nil
132
- payload, header = JWT.decode token, 'secret'
133
-
134
- expect(payload['iss']).to eq('SK123')
135
- expect(payload['sub']).to eq('AC123')
136
- expect(payload['exp']).not_to be_nil
137
- expect(payload['exp']).to be >= Time.now.to_i
138
- expect(payload['jti']).not_to be_nil
139
- expect(payload['jti']).to start_with payload['iss']
140
- expect(payload['grants']).not_to be_nil
141
- expect(payload['grants'].count).to eq(1)
142
- expect(payload['grants']['voice']).not_to be_nil
143
- expect(payload['grants']['voice']['outgoing']['application_sid']).to eq('AP123')
144
- expect(payload['grants']['voice']['outgoing']['params']['foo']).to eq('bar')
145
- end
146
134
 
147
- it 'should add video grant' do
148
- scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret'
149
- vg = Twilio::JWT::AccessToken::VideoGrant.new
150
- vg.room = 'room'
151
-
152
- scat.add_grant(vg)
153
-
154
- token = scat.to_s
155
- expect(token).not_to be_nil
156
- payload, header = JWT.decode token, 'secret'
157
-
158
- expect(payload['iss']).to eq('SK123')
159
- expect(payload['sub']).to eq('AC123')
160
- expect(payload['exp']).not_to be_nil
161
- expect(payload['exp']).to be >= Time.now.to_i
162
- expect(payload['jti']).not_to be_nil
163
- expect(payload['jti']).to start_with payload['iss']
164
- expect(payload['grants']).not_to be_nil
165
- expect(payload['grants'].count).to eq(1)
166
- expect(payload['grants']['video']).not_to be_nil
167
- expect(payload['grants']['video']['room']).to eq('room')
168
- end
169
135
 
170
- it 'should be able to add conversations grant' do
171
- scat = Twilio::JWT::AccessToken.new 'AC123', 'SK123','secret'
172
- cg = Twilio::JWT::AccessToken::ConversationsGrant.new
173
- cg.configuration_profile_sid = 'VSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
174
- scat.add_grant(cg)
175
-
176
- token = scat.to_s
177
- expect(token).not_to be_nil
178
- payload, header = JWT.decode token, 'secret'
179
-
180
- expect(payload['iss']).to eq('SK123')
181
- expect(payload['sub']).to eq('AC123')
182
- expect(payload['exp']).not_to be_nil
183
- expect(payload['exp']).to be >= Time.now.to_i
184
- expect(payload['jti']).not_to be_nil
185
- expect(payload['jti']).to start_with payload['iss']
186
- expect(payload['grants']).not_to be_nil
187
- expect(payload['grants'].count).to eq(1)
188
- expect(payload['grants']['rtc']).not_to be_nil
189
- expect(payload['grants']['rtc']['configuration_profile_sid']).to eq('VSxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx')
190
- end
191
136
 
192
- end
@@ -0,0 +1,104 @@
1
+ require 'spec_helper'
2
+
3
+ describe Twilio::JWT::ClientCapability do
4
+ describe 'initialization' do
5
+ it 'should initialize without optionals' do
6
+ clientCapability = Twilio::JWT::ClientCapability.new 'accountSid', 'authToken'
7
+ expect(clientCapability.instance_variable_get('@account_sid')).to eq('accountSid')
8
+ expect(clientCapability.instance_variable_get('@auth_token')).to eq('authToken')
9
+ expect(clientCapability.instance_variable_get('@client_name')).to be_nil
10
+ expect(clientCapability.instance_variable_get('@scopes')).to eq([])
11
+ end
12
+ end
13
+
14
+ describe 'ClientCapability scopes' do
15
+ before :each do
16
+ @clientCapability = Twilio::JWT::ClientCapability.new 'accountSid', 'authToken'
17
+ end
18
+
19
+ it 'no capabilities' do
20
+ expect(@clientCapability.__send__(:_generate_payload)[:scope]).to eq('')
21
+ end
22
+
23
+ it 'OutgoingClientScope sans params, client name' do
24
+ @outgoingScope = Twilio::JWT::OutgoingClientScope.new('test-application-sid')
25
+ @clientCapability.add_scope(@outgoingScope)
26
+ escope = 'scope:client:outgoing?appSid%3Dtest-application-sid'
27
+ expect(@clientCapability.__send__(:_generate_payload)[:scope]).to eq(escope)
28
+ end
29
+
30
+ it 'OutgoingClientScope with client-name' do
31
+ @outgoingScope = Twilio::JWT::OutgoingClientScope.new('test-application-sid', 'test-client-name')
32
+ @clientCapability.add_scope(@outgoingScope)
33
+ escope = 'scope:client:outgoing?appSid%3Dtest-application-sid%26clientName%3Dtest-client-name'
34
+ expect(@clientCapability.__send__(:_generate_payload)[:scope]).to eq(escope)
35
+ end
36
+
37
+ it 'OutgoingClientScope with params' do
38
+ @outgoingScope = Twilio::JWT::OutgoingClientScope.new('test-application-sid', nil, {'params_key'=>'param_value'})
39
+ @clientCapability.add_scope(@outgoingScope)
40
+ escope = 'scope:client:outgoing?appSid%3Dtest-application-sid%26appParams%3Dparams_key%3Dparam_value'
41
+ expect(@clientCapability.__send__(:_generate_payload)[:scope]).to eq(escope)
42
+ end
43
+
44
+ it 'IncomingClientScope' do
45
+ @incomingScope = Twilio::JWT::IncomingClientScope.new('test-client-name')
46
+ @clientCapability.add_scope(@incomingScope)
47
+ escope = 'scope:client:incoming?clientName%3Dtest-client-name'
48
+ expect(@clientCapability.__send__(:_generate_payload)[:scope]).to eq(escope)
49
+ end
50
+
51
+ it 'EventStreamScope sans filters' do
52
+ @eventStreamScope = Twilio::JWT::EventStreamScope.new
53
+ @clientCapability.add_scope(@eventStreamScope)
54
+ escope = 'scope:stream:subscribe?path%3D%2F2010-04-01%2FEvents'
55
+ expect(@clientCapability.__send__(:_generate_payload)[:scope]).to eq(escope)
56
+ end
57
+
58
+ it 'EventStreamScope with filters' do
59
+ @eventStreamScope = Twilio::JWT::EventStreamScope.new({'param_key'=>'param_value'})
60
+ @clientCapability.add_scope(@eventStreamScope)
61
+ escope = 'scope:stream:subscribe?param_key%3Dparam_value%26path%3D%2F2010-04-01%2FEvents'
62
+ expect(@clientCapability.__send__(:_generate_payload)[:scope]).to eq(escope)
63
+ end
64
+
65
+ it 'OutgoingClientScope and IncomingClientScope' do
66
+ @outgoingScope = Twilio::JWT::OutgoingClientScope.new('test-application-sid')
67
+ @clientCapability.add_scope(@outgoingScope)
68
+ @incomingScope = Twilio::JWT::IncomingClientScope.new('test-client-name')
69
+ @clientCapability.add_scope(@incomingScope)
70
+ escope = 'scope:client:outgoing?appSid%3Dtest-application-sid scope:client:incoming?clientName%3Dtest-client-name'
71
+ expect(@clientCapability.__send__(:_generate_payload)[:scope]).to eq(escope)
72
+ end
73
+
74
+ it 'complete payload' do
75
+ @incomingScope = Twilio::JWT::IncomingClientScope.new('test-client-name')
76
+ @clientCapability.add_scope(@incomingScope)
77
+ payload, _ = ::JWT.decode @clientCapability.to_s, 'authToken', true, {:algorithm=>'HS256'}
78
+ escope = 'scope:client:incoming?clientName%3Dtest-client-name'
79
+ expect(payload['iss']).to eq('accountSid')
80
+ expect(payload['scope']).to eq(escope)
81
+ expect(payload['exp']).to be > Time.now.to_i
82
+ expect(payload['nbf']).to be <= Time.now.to_i
83
+ end
84
+ end
85
+
86
+ describe 'ClientCapability constructor with scopes' do
87
+ it 'Valid scopes in constructor' do
88
+ @incomingScope = Twilio::JWT::IncomingClientScope.new('test-client-name')
89
+ @clientCapability = Twilio::JWT::ClientCapability.new 'accountSid', 'authToken', scopes: [@incomingScope]
90
+ escope = 'scope:client:incoming?clientName%3Dtest-client-name'
91
+ expect(@clientCapability.__send__(:_generate_payload)[:scope]).to eq(escope)
92
+ end
93
+ end
94
+ end
95
+
96
+ describe Twilio::JWT::Scope do
97
+ it 'Scope raise exception' do
98
+ class DummyScope
99
+ include Twilio::JWT::Scope
100
+ end
101
+ @dummyScope = DummyScope.new
102
+ expect{@dummyScope._generate_payload}.to raise_error(RuntimeError)
103
+ end
104
+ end
@@ -1,110 +1,177 @@
1
1
  require 'spec_helper'
2
2
 
3
- describe Twilio::JWT::TaskRouterCapability do
4
- describe 'with a capability' do
5
- before :each do
6
- @capability = Twilio::JWT::TaskRouterCapability.new 'AC123', 'foobar', 'WS456', 'WS456'
7
- end
3
+ describe 'TaskRouter ' do
4
+ def check_policy(method, url, policy, post_filter: {}, query_filter: {}, allow: true)
5
+ expect(policy['url']).to eq(url)
6
+ expect(policy['method']).to eq(method)
7
+ expect(policy['post_filter']).to eq(post_filter)
8
+ expect(policy['query_filter']).to eq(query_filter)
9
+ expect(policy['allow']).to eq(allow)
10
+ end
8
11
 
9
- it 'should return a valid jwt when #generate_token is called' do
10
- token = @capability.generate_token
11
- decoded, header = JWT.decode token, 'foobar'
12
- expect(decoded['policies']).not_to be_nil
13
- expect(decoded['iss']).not_to be_nil
14
- expect(decoded['exp']).not_to be_nil
15
- expect(decoded['account_sid']).to eq('AC123')
16
- expect(decoded['workspace_sid']).to eq('WS456')
17
- expect(decoded['channel']).to eq('WS456')
18
- end
12
+ describe Twilio::JWT::TaskRouterCapability do
13
+ describe 'token initialization' do
14
+ before :each do
15
+ @taskRouterCapability = Twilio::JWT::TaskRouterCapability.new 'AC123', 'secret', 'WS456', 'CI123'
16
+ end
19
17
 
20
- it 'should properly set the iss key in the payload' do
21
- token = @capability.generate_token
22
- decoded, header = JWT.decode token, 'foobar'
23
- expect(decoded['iss']).to eq('AC123')
24
- end
18
+ it 'generate default' do
19
+ token = @taskRouterCapability.to_s
20
+ payload, _ = JWT.decode token, 'secret'
21
+ expect(payload['iss']).to eq('AC123')
22
+ expect(payload['workspace_sid']).to eq('WS456')
23
+ expect(payload['policies']).not_to be_nil
24
+ expect(payload['policies'].size).to eq(2)
25
+ end
25
26
 
26
- it 'should properly set exp based on the default 1-hour ttl' do
27
- seconds = Time.now.to_i
28
- token = @capability.generate_token
29
- decoded, header = JWT.decode token, 'foobar'
30
- expect(decoded['exp']).to eq(seconds + 3600)
27
+ it 'add policy' do
28
+ @policy = Twilio::JWT::Policy.new(Twilio::JWT::TaskRouterUtils.workspace('WK123'), 'GET', true)
29
+ @taskRouterCapability.add_policy(@policy)
30
+ token = @taskRouterCapability.to_s
31
+ payload, _ = JWT.decode token, 'secret'
32
+ expect(payload['policies']).not_to be_nil
33
+ expect(payload['policies'].size).to eq(3)
34
+ check_policy('GET', 'https://taskrouter.twilio.com/v1/Workspaces/WK123', payload['policies'][0])
35
+ check_policy('GET', 'https://event-bridge.twilio.com/v1/wschannels/AC123/CI123', payload['policies'][1])
36
+ check_policy('POST', 'https://event-bridge.twilio.com/v1/wschannels/AC123/CI123', payload['policies'][2])
37
+ end
31
38
  end
39
+ end
32
40
 
33
- it 'should properly set exp based on the ttl arg to #generate_token' do
34
- seconds = Time.now.to_i
35
- ttl = rand 10000
36
- token = @capability.generate_token ttl
37
- decoded, header = JWT.decode token, 'foobar'
38
- expect(decoded['exp']).to eq(seconds + ttl)
39
- end
41
+ describe Twilio::JWT::Policy do
42
+ describe 'policy' do
43
+ it 'initialize' do
44
+ @policy = Twilio::JWT::Policy.new('test-url',
45
+ 'GET',
46
+ true,
47
+ {'test-post-key'=>'test-post-value'},
48
+ {'test-query-key'=>'test-query-value'}
49
+ )
40
50
 
41
- it 'should allow websocket operations and fetching the workspace by default' do
42
- token = @capability.generate_token
43
- decoded, header = JWT.decode token, 'foobar'
44
- expect(decoded['policies'].size).to eq(3)
45
- get_policy = {
46
- "url" => 'https://event-bridge.twilio.com/v1/wschannels/AC123/WS456',
47
- "method" => 'GET',
48
- "query_filter" => {},
49
- "post_filter" => {},
50
- "allow" => true
51
- }
52
- expect(decoded['policies'][0]).to eq(get_policy)
53
- post_policy = {
54
- "url" => 'https://event-bridge.twilio.com/v1/wschannels/AC123/WS456',
55
- "method" => 'POST',
56
- "query_filter" => {},
57
- "post_filter" => {},
58
- "allow" => true
59
- }
60
- expect(decoded['policies'][1]).to eq(post_policy)
61
-
62
- workspace_fetch_policy = {
63
- 'url' => 'https://taskrouter.twilio.com/v1/Workspaces/WS456',
64
- 'method' => 'GET',
65
- 'query_filter' => {},
66
- 'post_filter' => {},
67
- 'allow' => true
68
- }
69
- expect(decoded['policies'][2]).to eq(workspace_fetch_policy)
51
+ payload = Hash[@policy._generate_payload.map{ |k, v| [k.to_s, v] }]
52
+ check_policy('GET',
53
+ 'test-url',
54
+ payload,
55
+ post_filter: {'test-post-key'=>'test-post-value'},
56
+ query_filter: {'test-query-key'=>'test-query-value'},
57
+ allow: true )
58
+ end
70
59
  end
71
60
 
72
- it 'should add a policy when #allow_fetch_subresources is called' do
73
- token = @capability.generate_token
74
- decoded, header = JWT.decode token, 'foobar'
75
- policies_size = decoded['policies'].size
76
-
77
- @capability.allow_fetch_subresources
78
- token = @capability.generate_token
79
- decoded, header = JWT.decode token, 'foobar'
80
- workspace_fetch_policy = {
81
- 'url' => 'https://taskrouter.twilio.com/v1/Workspaces/WS456/**',
82
- 'method' => 'GET',
83
- 'query_filter' => {},
84
- 'post_filter' => {},
85
- 'allow' => true
86
- }
87
- expect(decoded['policies'][-1]).to eq(workspace_fetch_policy)
88
- expect(decoded['policies'].size).to eq(policies_size+1)
89
- end
61
+ describe Twilio::JWT::TaskRouterUtils do
62
+ describe 'urls' do
63
+
64
+ it 'workspaces' do
65
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces'
66
+ expect(Twilio::JWT::TaskRouterUtils.workspaces).to eq(expected_url)
67
+ end
68
+
69
+ it 'workspace' do
70
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123'
71
+ expect(Twilio::JWT::TaskRouterUtils.workspace('WK123')).to eq(expected_url)
72
+ end
73
+
74
+ it 'all_workspaces' do
75
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/**'
76
+ expect(Twilio::JWT::TaskRouterUtils.all_workspaces).to eq(expected_url)
77
+ end
78
+
79
+ it 'tasks' do
80
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Tasks'
81
+ expect(Twilio::JWT::TaskRouterUtils.tasks('WK123')).to eq(expected_url)
82
+ end
83
+
84
+ it 'task' do
85
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Tasks/TK123'
86
+ expect(Twilio::JWT::TaskRouterUtils.task('WK123', 'TK123')).to eq(expected_url)
87
+ end
88
+
89
+ it 'all_tasks' do
90
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Tasks/**'
91
+ expect(Twilio::JWT::TaskRouterUtils.all_tasks('WK123')).to eq(expected_url)
92
+ end
93
+
94
+ it 'task_queues' do
95
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/TaskQueues'
96
+ expect(Twilio::JWT::TaskRouterUtils.task_queues('WK123')).to eq(expected_url)
97
+ end
98
+
99
+ it 'task_queue' do
100
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/TaskQueues/WQ123'
101
+ expect(Twilio::JWT::TaskRouterUtils.task_queue('WK123', 'WQ123')).to eq(expected_url)
102
+ end
90
103
 
91
- it 'should add a policy when #allow_update_subresources is called' do
92
- token = @capability.generate_token
93
- decoded, header = JWT.decode token, 'foobar'
94
- policies_size = decoded['policies'].size
95
-
96
- @capability.allow_updates_subresources
97
- token = @capability.generate_token
98
- decoded, header = JWT.decode token, 'foobar'
99
- workspace_update_policy = {
100
- 'url' => 'https://taskrouter.twilio.com/v1/Workspaces/WS456/**',
101
- 'method' => 'POST',
102
- 'query_filter' => {},
103
- 'post_filter' => {},
104
- 'allow' => true
105
- }
106
- expect(decoded['policies'][-1]).to eq(workspace_update_policy)
107
- expect(decoded['policies'].size).to eq(policies_size+1)
104
+ it 'all_task_queues' do
105
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/TaskQueues/**'
106
+ expect(Twilio::JWT::TaskRouterUtils.all_task_queues('WK123')).to eq(expected_url)
107
+ end
108
+
109
+ it 'activities' do
110
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/AT123/Activities'
111
+ expect(Twilio::JWT::TaskRouterUtils.activities('AT123')).to eq(expected_url)
112
+ end
113
+
114
+ it 'activity' do
115
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Activities/AT123'
116
+ expect(Twilio::JWT::TaskRouterUtils.activity('WK123', 'AT123')).to eq(expected_url)
117
+ end
118
+
119
+ it 'all_activities' do
120
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Activities/**'
121
+ expect(Twilio::JWT::TaskRouterUtils.all_activities('WK123')).to eq(expected_url)
122
+ end
123
+
124
+ it 'workers' do
125
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Workers'
126
+ expect(Twilio::JWT::TaskRouterUtils.workers('WK123')).to eq(expected_url)
127
+ end
128
+
129
+ it 'worker' do
130
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Workers/WT123'
131
+ expect(Twilio::JWT::TaskRouterUtils.worker('WK123', 'WT123')).to eq(expected_url)
132
+ end
133
+
134
+ it 'all_workers' do
135
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Workers/**'
136
+ expect(Twilio::JWT::TaskRouterUtils.all_workers('WK123')).to eq(expected_url)
137
+ end
138
+
139
+ it 'reservations' do
140
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Workers/WT123/Reservations'
141
+ expect(Twilio::JWT::TaskRouterUtils.reservations('WK123', 'WT123')).to eq(expected_url)
142
+ end
143
+
144
+ it 'reservation' do
145
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Workers/WT123/Reservations/RS123'
146
+ expect(Twilio::JWT::TaskRouterUtils.reservation('WK123', 'WT123', 'RS123')).to eq(expected_url)
147
+ end
148
+
149
+ it 'all_reservations' do
150
+ expected_url = 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Workers/WT123/Reservations/**'
151
+ expect(Twilio::JWT::TaskRouterUtils.all_reservations('WK123', 'WT123')).to eq(expected_url)
152
+ end
153
+
154
+ end
155
+
156
+ describe 'default policies' do
157
+ it 'default web_socket_policies' do
158
+ @policies = Twilio::JWT::TaskRouterUtils.web_socket_policies('AC123', 'CI123')
159
+ get, post = @policies.map{|policy| policy._generate_payload}
160
+ check_policy('GET', 'https://event-bridge.twilio.com/v1/wschannels/AC123/CI123', Hash[get.map{ |k, v| [k.to_s, v]}])
161
+ check_policy('POST', 'https://event-bridge.twilio.com/v1/wschannels/AC123/CI123', Hash[post.map{ |k, v| [k.to_s, v]}])
162
+ end
163
+
164
+ it 'default worker policies' do
165
+ @policies = Twilio::JWT::TaskRouterUtils.worker_policies('WK123', 'WT123')
166
+ payload = @policies.map{|policy| policy._generate_payload}
167
+ check_policy('GET', 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Activities', Hash[payload[0].map{ |k, v| [k.to_s, v]}])
168
+ check_policy('GET', 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Tasks/**', Hash[payload[1].map{ |k, v| [k.to_s, v]}])
169
+ check_policy('GET', 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Workers/WT123/Reservations/**', Hash[payload[2].map{ |k, v| [k.to_s, v]}])
170
+ check_policy('GET', 'https://taskrouter.twilio.com/v1/Workspaces/WK123/Workers/WT123', Hash[payload[3].map{ |k, v| [k.to_s, v]}])
171
+ end
172
+ end
108
173
  end
109
174
  end
110
- end
175
+ end
176
+
177
+