twilio-ruby 5.47.0 → 5.52.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (516) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +125 -0
  3. data/README.md +7 -6
  4. data/lib/twilio-ruby/rest/api.rb +1 -1
  5. data/lib/twilio-ruby/rest/api/v2010.rb +5 -4
  6. data/lib/twilio-ruby/rest/api/v2010/account/call.rb +7 -1
  7. data/lib/twilio-ruby/rest/api/v2010/account/call/event.rb +4 -4
  8. data/lib/twilio-ruby/rest/api/v2010/account/call/feedback.rb +4 -4
  9. data/lib/twilio-ruby/rest/api/v2010/account/conference/participant.rb +2 -2
  10. data/lib/twilio-ruby/rest/autopilot/v1.rb +5 -4
  11. data/lib/twilio-ruby/rest/bulkexports/v1.rb +10 -8
  12. data/lib/twilio-ruby/rest/bulkexports/v1/export/export_custom_job.rb +15 -1
  13. data/lib/twilio-ruby/rest/bulkexports/v1/export/job.rb +15 -1
  14. data/lib/twilio-ruby/rest/chat/v1.rb +10 -8
  15. data/lib/twilio-ruby/rest/chat/v2.rb +10 -8
  16. data/lib/twilio-ruby/rest/client.rb +8 -1
  17. data/lib/twilio-ruby/rest/conversations/v1.rb +25 -20
  18. data/lib/twilio-ruby/rest/events/v1.rb +20 -16
  19. data/lib/twilio-ruby/rest/events/v1/event_type.rb +4 -4
  20. data/lib/twilio-ruby/rest/events/v1/schema.rb +16 -16
  21. data/lib/twilio-ruby/rest/events/v1/schema/{schema_version.rb → version.rb} +41 -41
  22. data/lib/twilio-ruby/rest/events/v1/sink.rb +4 -4
  23. data/lib/twilio-ruby/rest/events/v1/sink/sink_test.rb +3 -3
  24. data/lib/twilio-ruby/rest/events/v1/sink/sink_validate.rb +3 -3
  25. data/lib/twilio-ruby/rest/events/v1/subscription.rb +14 -8
  26. data/lib/twilio-ruby/rest/events/v1/subscription/subscribed_event.rb +139 -9
  27. data/lib/twilio-ruby/rest/fax/v1.rb +5 -4
  28. data/lib/twilio-ruby/rest/flex_api/v1.rb +15 -12
  29. data/lib/twilio-ruby/rest/insights.rb +1 -1
  30. data/lib/twilio-ruby/rest/insights/v1.rb +11 -9
  31. data/lib/twilio-ruby/rest/insights/v1/room.rb +55 -43
  32. data/lib/twilio-ruby/rest/insights/v1/room/participant.rb +22 -22
  33. data/lib/twilio-ruby/rest/ip_messaging/v1.rb +10 -8
  34. data/lib/twilio-ruby/rest/ip_messaging/v2.rb +10 -8
  35. data/lib/twilio-ruby/rest/lookups/v1.rb +5 -4
  36. data/lib/twilio-ruby/rest/messaging.rb +9 -11
  37. data/lib/twilio-ruby/rest/messaging/v1.rb +20 -26
  38. data/lib/twilio-ruby/rest/messaging/v1/external_campaign.rb +143 -0
  39. data/lib/twilio-ruby/rest/messaging/v1/service.rb +112 -26
  40. data/lib/twilio-ruby/rest/messaging/v1/service/us_app_to_person.rb +266 -0
  41. data/lib/twilio-ruby/rest/messaging/v1/service/us_app_to_person_usecase.rb +125 -0
  42. data/lib/twilio-ruby/rest/messaging/v1/usecase.rb +111 -0
  43. data/lib/twilio-ruby/rest/monitor/v1.rb +10 -8
  44. data/lib/twilio-ruby/rest/notify/v1.rb +10 -8
  45. data/lib/twilio-ruby/rest/preview/bulk_exports.rb +10 -8
  46. data/lib/twilio-ruby/rest/preview/deployed_devices.rb +5 -4
  47. data/lib/twilio-ruby/rest/preview/hosted_numbers.rb +10 -8
  48. data/lib/twilio-ruby/rest/preview/marketplace.rb +10 -8
  49. data/lib/twilio-ruby/rest/preview/sync.rb +5 -4
  50. data/lib/twilio-ruby/rest/preview/trusted_comms.rb +5 -4
  51. data/lib/twilio-ruby/rest/preview/understand.rb +5 -4
  52. data/lib/twilio-ruby/rest/preview/wireless.rb +15 -12
  53. data/lib/twilio-ruby/rest/proxy/v1.rb +5 -4
  54. data/lib/twilio-ruby/rest/proxy/v1/service/session/participant.rb +1 -1
  55. data/lib/twilio-ruby/rest/serverless/v1.rb +5 -4
  56. data/lib/twilio-ruby/rest/studio/v1.rb +5 -4
  57. data/lib/twilio-ruby/rest/studio/v2.rb +5 -4
  58. data/lib/twilio-ruby/rest/supersim.rb +9 -0
  59. data/lib/twilio-ruby/rest/supersim/v1.rb +41 -20
  60. data/lib/twilio-ruby/rest/supersim/v1/fleet.rb +55 -3
  61. data/lib/twilio-ruby/rest/supersim/v1/sim.rb +16 -0
  62. data/lib/twilio-ruby/rest/supersim/v1/sms_command.rb +371 -0
  63. data/lib/twilio-ruby/rest/sync/v1.rb +5 -4
  64. data/lib/twilio-ruby/rest/sync/v1/service/document.rb +9 -16
  65. data/lib/twilio-ruby/rest/sync/v1/service/sync_list.rb +9 -15
  66. data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_item.rb +22 -33
  67. data/lib/twilio-ruby/rest/sync/v1/service/sync_map.rb +9 -15
  68. data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_item.rb +22 -35
  69. data/lib/twilio-ruby/rest/sync/v1/service/sync_stream.rb +9 -15
  70. data/lib/twilio-ruby/rest/taskrouter/v1.rb +5 -4
  71. data/lib/twilio-ruby/rest/taskrouter/v1/workspace.rb +12 -13
  72. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task.rb +31 -7
  73. data/lib/twilio-ruby/rest/trunking/v1.rb +5 -4
  74. data/lib/twilio-ruby/rest/trusthub.rb +100 -0
  75. data/lib/twilio-ruby/rest/trusthub/v1.rb +146 -0
  76. data/lib/twilio-ruby/rest/trusthub/v1/customer_profiles.rb +523 -0
  77. data/lib/twilio-ruby/rest/trusthub/v1/customer_profiles/customer_profiles_channel_endpoint_assignment.rb +359 -0
  78. data/lib/twilio-ruby/rest/trusthub/v1/customer_profiles/customer_profiles_entity_assignments.rb +330 -0
  79. data/lib/twilio-ruby/rest/trusthub/v1/customer_profiles/customer_profiles_evaluations.rb +328 -0
  80. data/lib/twilio-ruby/rest/trusthub/v1/end_user.rb +356 -0
  81. data/lib/twilio-ruby/rest/trusthub/v1/end_user_type.rb +271 -0
  82. data/lib/twilio-ruby/rest/{messaging/v1/use_case.rb → trusthub/v1/policies.rb} +110 -46
  83. data/lib/twilio-ruby/rest/{messaging/v1/campaign.rb → trusthub/v1/supporting_document.rb} +125 -143
  84. data/lib/twilio-ruby/rest/trusthub/v1/supporting_document_type.rb +271 -0
  85. data/lib/twilio-ruby/rest/trusthub/v1/trust_products.rb +523 -0
  86. data/lib/twilio-ruby/rest/trusthub/v1/trust_products/trust_products_channel_endpoint_assignment.rb +359 -0
  87. data/lib/twilio-ruby/rest/trusthub/v1/trust_products/trust_products_entity_assignments.rb +330 -0
  88. data/lib/twilio-ruby/rest/trusthub/v1/trust_products/trust_products_evaluations.rb +328 -0
  89. data/lib/twilio-ruby/rest/verify.rb +9 -0
  90. data/lib/twilio-ruby/rest/verify/v2.rb +26 -8
  91. data/lib/twilio-ruby/rest/verify/v2/service.rb +61 -3
  92. data/lib/twilio-ruby/rest/verify/v2/service/entity.rb +24 -0
  93. data/lib/twilio-ruby/rest/verify/v2/service/entity/challenge.rb +43 -4
  94. data/lib/twilio-ruby/rest/verify/v2/service/entity/challenge/notification.rb +202 -0
  95. data/lib/twilio-ruby/rest/verify/v2/service/entity/factor.rb +41 -52
  96. data/lib/twilio-ruby/rest/verify/v2/service/entity/new_factor.rb +274 -0
  97. data/lib/twilio-ruby/rest/verify/v2/verification_attempt.rb +329 -0
  98. data/lib/twilio-ruby/rest/video/v1.rb +20 -16
  99. data/lib/twilio-ruby/rest/video/v1/room.rb +4 -1
  100. data/lib/twilio-ruby/rest/video/v1/room/room_recording_rule.rb +0 -6
  101. data/lib/twilio-ruby/rest/voice/v1.rb +20 -16
  102. data/lib/twilio-ruby/rest/wireless/v1.rb +15 -12
  103. data/lib/twilio-ruby/twiml/voice_response.rb +22 -0
  104. data/lib/twilio-ruby/version.rb +1 -1
  105. data/twilio-ruby.gemspec +1 -1
  106. metadata +27 -826
  107. data/spec/framework/request_spec.rb +0 -36
  108. data/spec/framework/serialize_spec.rb +0 -80
  109. data/spec/framework/version_spec.rb +0 -219
  110. data/spec/holodeck/holodeck.rb +0 -66
  111. data/spec/holodeck/hologram.rb +0 -4
  112. data/spec/http/http_client_spec.rb +0 -122
  113. data/spec/integration/accounts/v1/auth_token_promotion_spec.rb +0 -44
  114. data/spec/integration/accounts/v1/credential/aws_spec.rb +0 -222
  115. data/spec/integration/accounts/v1/credential/public_key_spec.rb +0 -222
  116. data/spec/integration/accounts/v1/credential_spec.rb +0 -12
  117. data/spec/integration/accounts/v1/secondary_auth_token_spec.rb +0 -69
  118. data/spec/integration/api/v2010/account/address/dependent_phone_number_spec.rb +0 -106
  119. data/spec/integration/api/v2010/account/address_spec.rb +0 -269
  120. data/spec/integration/api/v2010/account/application_spec.rb +0 -274
  121. data/spec/integration/api/v2010/account/authorized_connect_app_spec.rb +0 -137
  122. data/spec/integration/api/v2010/account/available_phone_number/local_spec.rb +0 -102
  123. data/spec/integration/api/v2010/account/available_phone_number/machine_to_machine_spec.rb +0 -102
  124. data/spec/integration/api/v2010/account/available_phone_number/mobile_spec.rb +0 -101
  125. data/spec/integration/api/v2010/account/available_phone_number/national_spec.rb +0 -102
  126. data/spec/integration/api/v2010/account/available_phone_number/shared_cost_spec.rb +0 -102
  127. data/spec/integration/api/v2010/account/available_phone_number/toll_free_spec.rb +0 -101
  128. data/spec/integration/api/v2010/account/available_phone_number/voip_spec.rb +0 -102
  129. data/spec/integration/api/v2010/account/available_phone_number_spec.rb +0 -128
  130. data/spec/integration/api/v2010/account/balance_spec.rb +0 -44
  131. data/spec/integration/api/v2010/account/call/event_spec.rb +0 -102
  132. data/spec/integration/api/v2010/account/call/feedback_spec.rb +0 -138
  133. data/spec/integration/api/v2010/account/call/feedback_summary_spec.rb +0 -149
  134. data/spec/integration/api/v2010/account/call/notification_spec.rb +0 -143
  135. data/spec/integration/api/v2010/account/call/payment_spec.rb +0 -135
  136. data/spec/integration/api/v2010/account/call/recording_spec.rb +0 -287
  137. data/spec/integration/api/v2010/account/call_spec.rb +0 -660
  138. data/spec/integration/api/v2010/account/conference/participant_spec.rb +0 -768
  139. data/spec/integration/api/v2010/account/conference/recording_spec.rb +0 -234
  140. data/spec/integration/api/v2010/account/conference_spec.rb +0 -716
  141. data/spec/integration/api/v2010/account/connect_app_spec.rb +0 -197
  142. data/spec/integration/api/v2010/account/incoming_phone_number/assigned_add_on/assigned_add_on_extension_spec.rb +0 -135
  143. data/spec/integration/api/v2010/account/incoming_phone_number/assigned_add_on_spec.rb +0 -220
  144. data/spec/integration/api/v2010/account/incoming_phone_number/local_spec.rb +0 -189
  145. data/spec/integration/api/v2010/account/incoming_phone_number/mobile_spec.rb +0 -189
  146. data/spec/integration/api/v2010/account/incoming_phone_number/toll_free_spec.rb +0 -189
  147. data/spec/integration/api/v2010/account/incoming_phone_number_spec.rb +0 -370
  148. data/spec/integration/api/v2010/account/key_spec.rb +0 -176
  149. data/spec/integration/api/v2010/account/message/feedback_spec.rb +0 -49
  150. data/spec/integration/api/v2010/account/message/media_spec.rb +0 -161
  151. data/spec/integration/api/v2010/account/message_spec.rb +0 -507
  152. data/spec/integration/api/v2010/account/new_key_spec.rb +0 -46
  153. data/spec/integration/api/v2010/account/new_signing_key_spec.rb +0 -46
  154. data/spec/integration/api/v2010/account/notification_spec.rb +0 -138
  155. data/spec/integration/api/v2010/account/outgoing_caller_id_spec.rb +0 -185
  156. data/spec/integration/api/v2010/account/queue/member_spec.rb +0 -208
  157. data/spec/integration/api/v2010/account/queue_spec.rb +0 -244
  158. data/spec/integration/api/v2010/account/recording/add_on_result/payload_spec.rb +0 -174
  159. data/spec/integration/api/v2010/account/recording/add_on_result_spec.rb +0 -165
  160. data/spec/integration/api/v2010/account/recording/transcription_spec.rb +0 -173
  161. data/spec/integration/api/v2010/account/recording_spec.rb +0 -184
  162. data/spec/integration/api/v2010/account/short_code_spec.rb +0 -179
  163. data/spec/integration/api/v2010/account/signing_key_spec.rb +0 -176
  164. data/spec/integration/api/v2010/account/sip/credential_list/credential_spec.rb +0 -252
  165. data/spec/integration/api/v2010/account/sip/credential_list_spec.rb +0 -241
  166. data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_calls_mapping/auth_calls_credential_list_mapping_spec.rb +0 -217
  167. data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_calls_mapping/auth_calls_ip_access_control_list_mapping_spec.rb +0 -217
  168. data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_calls_mapping_spec.rb +0 -12
  169. data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_registrations_mapping/auth_registrations_credential_list_mapping_spec.rb +0 -217
  170. data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_registrations_mapping_spec.rb +0 -12
  171. data/spec/integration/api/v2010/account/sip/domain/auth_types_spec.rb +0 -12
  172. data/spec/integration/api/v2010/account/sip/domain/credential_list_mapping_spec.rb +0 -207
  173. data/spec/integration/api/v2010/account/sip/domain/ip_access_control_list_mapping_spec.rb +0 -217
  174. data/spec/integration/api/v2010/account/sip/domain_spec.rb +0 -303
  175. data/spec/integration/api/v2010/account/sip/ip_access_control_list/ip_address_spec.rb +0 -254
  176. data/spec/integration/api/v2010/account/sip/ip_access_control_list_spec.rb +0 -251
  177. data/spec/integration/api/v2010/account/sip_spec.rb +0 -12
  178. data/spec/integration/api/v2010/account/token_spec.rb +0 -71
  179. data/spec/integration/api/v2010/account/transcription_spec.rb +0 -166
  180. data/spec/integration/api/v2010/account/usage/record/all_time_spec.rb +0 -113
  181. data/spec/integration/api/v2010/account/usage/record/daily_spec.rb +0 -113
  182. data/spec/integration/api/v2010/account/usage/record/last_month_spec.rb +0 -113
  183. data/spec/integration/api/v2010/account/usage/record/monthly_spec.rb +0 -113
  184. data/spec/integration/api/v2010/account/usage/record/this_month_spec.rb +0 -113
  185. data/spec/integration/api/v2010/account/usage/record/today_spec.rb +0 -113
  186. data/spec/integration/api/v2010/account/usage/record/yearly_spec.rb +0 -113
  187. data/spec/integration/api/v2010/account/usage/record/yesterday_spec.rb +0 -113
  188. data/spec/integration/api/v2010/account/usage/record_spec.rb +0 -110
  189. data/spec/integration/api/v2010/account/usage/trigger_spec.rb +0 -281
  190. data/spec/integration/api/v2010/account/usage_spec.rb +0 -12
  191. data/spec/integration/api/v2010/account/validation_request_spec.rb +0 -48
  192. data/spec/integration/api/v2010/account_spec.rb +0 -327
  193. data/spec/integration/autopilot/v1/assistant/defaults_spec.rb +0 -79
  194. data/spec/integration/autopilot/v1/assistant/dialogue_spec.rb +0 -46
  195. data/spec/integration/autopilot/v1/assistant/field_type/field_value_spec.rb +0 -207
  196. data/spec/integration/autopilot/v1/assistant/field_type_spec.rb +0 -242
  197. data/spec/integration/autopilot/v1/assistant/model_build_spec.rb +0 -236
  198. data/spec/integration/autopilot/v1/assistant/query_spec.rb +0 -290
  199. data/spec/integration/autopilot/v1/assistant/style_sheet_spec.rb +0 -79
  200. data/spec/integration/autopilot/v1/assistant/task/field_spec.rb +0 -204
  201. data/spec/integration/autopilot/v1/assistant/task/sample_spec.rb +0 -249
  202. data/spec/integration/autopilot/v1/assistant/task/task_actions_spec.rb +0 -85
  203. data/spec/integration/autopilot/v1/assistant/task/task_statistics_spec.rb +0 -49
  204. data/spec/integration/autopilot/v1/assistant/task_spec.rb +0 -258
  205. data/spec/integration/autopilot/v1/assistant/webhook_spec.rb +0 -242
  206. data/spec/integration/autopilot/v1/assistant_spec.rb +0 -277
  207. data/spec/integration/autopilot/v1/restore_assistant_spec.rb +0 -53
  208. data/spec/integration/bulkexports/v1/export/day_spec.rb +0 -115
  209. data/spec/integration/bulkexports/v1/export/export_custom_job_spec.rb +0 -129
  210. data/spec/integration/bulkexports/v1/export/job_spec.rb +0 -78
  211. data/spec/integration/bulkexports/v1/export_configuration_spec.rb +0 -77
  212. data/spec/integration/bulkexports/v1/export_spec.rb +0 -44
  213. data/spec/integration/chat/v1/credential_spec.rb +0 -219
  214. data/spec/integration/chat/v1/service/channel/invite_spec.rb +0 -207
  215. data/spec/integration/chat/v1/service/channel/member_spec.rb +0 -280
  216. data/spec/integration/chat/v1/service/channel/message_spec.rb +0 -290
  217. data/spec/integration/chat/v1/service/channel_spec.rb +0 -272
  218. data/spec/integration/chat/v1/service/role_spec.rb +0 -260
  219. data/spec/integration/chat/v1/service/user/user_channel_spec.rb +0 -93
  220. data/spec/integration/chat/v1/service/user_spec.rb +0 -262
  221. data/spec/integration/chat/v1/service_spec.rb +0 -295
  222. data/spec/integration/chat/v2/credential_spec.rb +0 -219
  223. data/spec/integration/chat/v2/service/binding_spec.rb +0 -174
  224. data/spec/integration/chat/v2/service/channel/invite_spec.rb +0 -207
  225. data/spec/integration/chat/v2/service/channel/member_spec.rb +0 -263
  226. data/spec/integration/chat/v2/service/channel/message_spec.rb +0 -406
  227. data/spec/integration/chat/v2/service/channel/webhook_spec.rb +0 -303
  228. data/spec/integration/chat/v2/service/channel_spec.rb +0 -282
  229. data/spec/integration/chat/v2/service/role_spec.rb +0 -260
  230. data/spec/integration/chat/v2/service/user/user_binding_spec.rb +0 -177
  231. data/spec/integration/chat/v2/service/user/user_channel_spec.rb +0 -247
  232. data/spec/integration/chat/v2/service/user_spec.rb +0 -270
  233. data/spec/integration/chat/v2/service_spec.rb +0 -350
  234. data/spec/integration/conversations/v1/configuration/webhook_spec.rb +0 -90
  235. data/spec/integration/conversations/v1/configuration_spec.rb +0 -87
  236. data/spec/integration/conversations/v1/conversation/message/delivery_receipt_spec.rb +0 -136
  237. data/spec/integration/conversations/v1/conversation/message_spec.rb +0 -409
  238. data/spec/integration/conversations/v1/conversation/participant_spec.rb +0 -402
  239. data/spec/integration/conversations/v1/conversation/webhook_spec.rb +0 -282
  240. data/spec/integration/conversations/v1/conversation_spec.rb +0 -278
  241. data/spec/integration/conversations/v1/credential_spec.rb +0 -219
  242. data/spec/integration/conversations/v1/role_spec.rb +0 -249
  243. data/spec/integration/conversations/v1/service/binding_spec.rb +0 -166
  244. data/spec/integration/conversations/v1/service/configuration/notification_spec.rb +0 -115
  245. data/spec/integration/conversations/v1/service/configuration_spec.rb +0 -89
  246. data/spec/integration/conversations/v1/service/conversation/message/delivery_receipt_spec.rb +0 -144
  247. data/spec/integration/conversations/v1/service/conversation/message_spec.rb +0 -429
  248. data/spec/integration/conversations/v1/service/conversation/participant_spec.rb +0 -427
  249. data/spec/integration/conversations/v1/service/conversation/webhook_spec.rb +0 -299
  250. data/spec/integration/conversations/v1/service/conversation_spec.rb +0 -289
  251. data/spec/integration/conversations/v1/service/role_spec.rb +0 -260
  252. data/spec/integration/conversations/v1/service/user_spec.rb +0 -241
  253. data/spec/integration/conversations/v1/service_spec.rb +0 -174
  254. data/spec/integration/conversations/v1/user_spec.rb +0 -231
  255. data/spec/integration/events/v1/event_type_spec.rb +0 -133
  256. data/spec/integration/events/v1/schema/schema_version_spec.rb +0 -126
  257. data/spec/integration/events/v1/schema_spec.rb +0 -46
  258. data/spec/integration/events/v1/sink/sink_test_spec.rb +0 -42
  259. data/spec/integration/events/v1/sink/sink_validate_spec.rb +0 -44
  260. data/spec/integration/events/v1/sink_spec.rb +0 -231
  261. data/spec/integration/events/v1/subscription/subscribed_event_spec.rb +0 -91
  262. data/spec/integration/events/v1/subscription_spec.rb +0 -292
  263. data/spec/integration/fax/v1/fax/fax_media_spec.rb +0 -125
  264. data/spec/integration/fax/v1/fax_spec.rb +0 -267
  265. data/spec/integration/flex_api/v1/channel_spec.rb +0 -188
  266. data/spec/integration/flex_api/v1/configuration_spec.rb +0 -578
  267. data/spec/integration/flex_api/v1/flex_flow_spec.rb +0 -259
  268. data/spec/integration/flex_api/v1/web_channel_spec.rb +0 -216
  269. data/spec/integration/insights/v1/call/event_spec.rb +0 -166
  270. data/spec/integration/insights/v1/call/metric_spec.rb +0 -154
  271. data/spec/integration/insights/v1/call/summary_spec.rb +0 -64
  272. data/spec/integration/insights/v1/call_spec.rb +0 -46
  273. data/spec/integration/insights/v1/room/participant_spec.rb +0 -147
  274. data/spec/integration/insights/v1/room_spec.rb +0 -164
  275. data/spec/integration/ip_messaging/v1/credential_spec.rb +0 -219
  276. data/spec/integration/ip_messaging/v1/service/channel/invite_spec.rb +0 -207
  277. data/spec/integration/ip_messaging/v1/service/channel/member_spec.rb +0 -280
  278. data/spec/integration/ip_messaging/v1/service/channel/message_spec.rb +0 -290
  279. data/spec/integration/ip_messaging/v1/service/channel_spec.rb +0 -272
  280. data/spec/integration/ip_messaging/v1/service/role_spec.rb +0 -260
  281. data/spec/integration/ip_messaging/v1/service/user/user_channel_spec.rb +0 -93
  282. data/spec/integration/ip_messaging/v1/service/user_spec.rb +0 -262
  283. data/spec/integration/ip_messaging/v1/service_spec.rb +0 -295
  284. data/spec/integration/ip_messaging/v2/credential_spec.rb +0 -219
  285. data/spec/integration/ip_messaging/v2/service/binding_spec.rb +0 -174
  286. data/spec/integration/ip_messaging/v2/service/channel/invite_spec.rb +0 -207
  287. data/spec/integration/ip_messaging/v2/service/channel/member_spec.rb +0 -263
  288. data/spec/integration/ip_messaging/v2/service/channel/message_spec.rb +0 -406
  289. data/spec/integration/ip_messaging/v2/service/channel/webhook_spec.rb +0 -303
  290. data/spec/integration/ip_messaging/v2/service/channel_spec.rb +0 -282
  291. data/spec/integration/ip_messaging/v2/service/role_spec.rb +0 -260
  292. data/spec/integration/ip_messaging/v2/service/user/user_binding_spec.rb +0 -177
  293. data/spec/integration/ip_messaging/v2/service/user/user_channel_spec.rb +0 -247
  294. data/spec/integration/ip_messaging/v2/service/user_spec.rb +0 -270
  295. data/spec/integration/ip_messaging/v2/service_spec.rb +0 -350
  296. data/spec/integration/lookups/v1/phone_number_spec.rb +0 -336
  297. data/spec/integration/messaging/v1/brand_registration_spec.rb +0 -143
  298. data/spec/integration/messaging/v1/campaign_spec.rb +0 -194
  299. data/spec/integration/messaging/v1/deactivation_spec.rb +0 -40
  300. data/spec/integration/messaging/v1/service/alpha_sender_spec.rb +0 -173
  301. data/spec/integration/messaging/v1/service/phone_number_spec.rb +0 -198
  302. data/spec/integration/messaging/v1/service/short_code_spec.rb +0 -176
  303. data/spec/integration/messaging/v1/service_spec.rb +0 -267
  304. data/spec/integration/messaging/v1/use_case_spec.rb +0 -55
  305. data/spec/integration/monitor/v1/alert_spec.rb +0 -138
  306. data/spec/integration/monitor/v1/event_spec.rb +0 -148
  307. data/spec/integration/notify/v1/credential_spec.rb +0 -219
  308. data/spec/integration/notify/v1/service/binding_spec.rb +0 -222
  309. data/spec/integration/notify/v1/service/notification_spec.rb +0 -98
  310. data/spec/integration/notify/v1/service_spec.rb +0 -289
  311. data/spec/integration/numbers/v2/regulatory_compliance/bundle/evaluation_spec.rb +0 -620
  312. data/spec/integration/numbers/v2/regulatory_compliance/bundle/item_assignment_spec.rb +0 -195
  313. data/spec/integration/numbers/v2/regulatory_compliance/bundle_spec.rb +0 -258
  314. data/spec/integration/numbers/v2/regulatory_compliance/end_user_spec.rb +0 -238
  315. data/spec/integration/numbers/v2/regulatory_compliance/end_user_type_spec.rb +0 -141
  316. data/spec/integration/numbers/v2/regulatory_compliance/regulation_spec.rb +0 -181
  317. data/spec/integration/numbers/v2/regulatory_compliance/supporting_document_spec.rb +0 -250
  318. data/spec/integration/numbers/v2/regulatory_compliance/supporting_document_type_spec.rb +0 -131
  319. data/spec/integration/numbers/v2/regulatory_compliance_spec.rb +0 -12
  320. data/spec/integration/preview/bulk_exports/export/day_spec.rb +0 -115
  321. data/spec/integration/preview/bulk_exports/export/export_custom_job_spec.rb +0 -129
  322. data/spec/integration/preview/bulk_exports/export/job_spec.rb +0 -78
  323. data/spec/integration/preview/bulk_exports/export_configuration_spec.rb +0 -77
  324. data/spec/integration/preview/bulk_exports/export_spec.rb +0 -44
  325. data/spec/integration/preview/deployed_devices/fleet/certificate_spec.rb +0 -234
  326. data/spec/integration/preview/deployed_devices/fleet/deployment_spec.rb +0 -228
  327. data/spec/integration/preview/deployed_devices/fleet/device_spec.rb +0 -244
  328. data/spec/integration/preview/deployed_devices/fleet/key_spec.rb +0 -232
  329. data/spec/integration/preview/deployed_devices/fleet_spec.rb +0 -241
  330. data/spec/integration/preview/hosted_numbers/authorization_document/dependent_hosted_number_order_spec.rb +0 -110
  331. data/spec/integration/preview/hosted_numbers/authorization_document_spec.rb +0 -224
  332. data/spec/integration/preview/hosted_numbers/hosted_number_order_spec.rb +0 -389
  333. data/spec/integration/preview/marketplace/available_add_on/available_add_on_extension_spec.rb +0 -121
  334. data/spec/integration/preview/marketplace/available_add_on_spec.rb +0 -142
  335. data/spec/integration/preview/marketplace/installed_add_on/installed_add_on_extension_spec.rb +0 -162
  336. data/spec/integration/preview/marketplace/installed_add_on_spec.rb +0 -250
  337. data/spec/integration/preview/sync/service/document/document_permission_spec.rb +0 -201
  338. data/spec/integration/preview/sync/service/document_spec.rb +0 -252
  339. data/spec/integration/preview/sync/service/sync_list/sync_list_item_spec.rb +0 -255
  340. data/spec/integration/preview/sync/service/sync_list/sync_list_permission_spec.rb +0 -201
  341. data/spec/integration/preview/sync/service/sync_list_spec.rb +0 -205
  342. data/spec/integration/preview/sync/service/sync_map/sync_map_item_spec.rb +0 -255
  343. data/spec/integration/preview/sync/service/sync_map/sync_map_permission_spec.rb +0 -201
  344. data/spec/integration/preview/sync/service/sync_map_spec.rb +0 -205
  345. data/spec/integration/preview/sync/service_spec.rb +0 -241
  346. data/spec/integration/preview/trusted_comms/branded_channel/channel_spec.rb +0 -50
  347. data/spec/integration/preview/trusted_comms/branded_channel_spec.rb +0 -47
  348. data/spec/integration/preview/trusted_comms/brands_information_spec.rb +0 -45
  349. data/spec/integration/preview/trusted_comms/cps_spec.rb +0 -44
  350. data/spec/integration/preview/trusted_comms/current_call_spec.rb +0 -58
  351. data/spec/integration/preview/understand/assistant/assistant_fallback_actions_spec.rb +0 -79
  352. data/spec/integration/preview/understand/assistant/assistant_initiation_actions_spec.rb +0 -79
  353. data/spec/integration/preview/understand/assistant/dialogue_spec.rb +0 -46
  354. data/spec/integration/preview/understand/assistant/field_type/field_value_spec.rb +0 -207
  355. data/spec/integration/preview/understand/assistant/field_type_spec.rb +0 -242
  356. data/spec/integration/preview/understand/assistant/model_build_spec.rb +0 -236
  357. data/spec/integration/preview/understand/assistant/query_spec.rb +0 -302
  358. data/spec/integration/preview/understand/assistant/style_sheet_spec.rb +0 -79
  359. data/spec/integration/preview/understand/assistant/task/field_spec.rb +0 -204
  360. data/spec/integration/preview/understand/assistant/task/sample_spec.rb +0 -249
  361. data/spec/integration/preview/understand/assistant/task/task_actions_spec.rb +0 -85
  362. data/spec/integration/preview/understand/assistant/task/task_statistics_spec.rb +0 -49
  363. data/spec/integration/preview/understand/assistant/task_spec.rb +0 -258
  364. data/spec/integration/preview/understand/assistant_spec.rb +0 -269
  365. data/spec/integration/preview/wireless/command_spec.rb +0 -167
  366. data/spec/integration/preview/wireless/rate_plan_spec.rb +0 -257
  367. data/spec/integration/preview/wireless/sim/usage_spec.rb +0 -50
  368. data/spec/integration/preview/wireless/sim_spec.rb +0 -207
  369. data/spec/integration/pricing/v1/messaging/country_spec.rb +0 -137
  370. data/spec/integration/pricing/v1/messaging_spec.rb +0 -12
  371. data/spec/integration/pricing/v1/phone_number/country_spec.rb +0 -128
  372. data/spec/integration/pricing/v1/phone_number_spec.rb +0 -12
  373. data/spec/integration/pricing/v1/voice/country_spec.rb +0 -138
  374. data/spec/integration/pricing/v1/voice/number_spec.rb +0 -55
  375. data/spec/integration/pricing/v1/voice_spec.rb +0 -12
  376. data/spec/integration/pricing/v2/voice/country_spec.rb +0 -179
  377. data/spec/integration/pricing/v2/voice/number_spec.rb +0 -61
  378. data/spec/integration/pricing/v2/voice_spec.rb +0 -12
  379. data/spec/integration/proxy/v1/service/phone_number_spec.rb +0 -231
  380. data/spec/integration/proxy/v1/service/session/interaction_spec.rb +0 -133
  381. data/spec/integration/proxy/v1/service/session/participant/message_interaction_spec.rb +0 -163
  382. data/spec/integration/proxy/v1/service/session/participant_spec.rb +0 -240
  383. data/spec/integration/proxy/v1/service/session_spec.rb +0 -225
  384. data/spec/integration/proxy/v1/service/short_code_spec.rb +0 -225
  385. data/spec/integration/proxy/v1/service_spec.rb +0 -214
  386. data/spec/integration/serverless/v1/service/asset/asset_version_spec.rb +0 -93
  387. data/spec/integration/serverless/v1/service/asset_spec.rb +0 -202
  388. data/spec/integration/serverless/v1/service/build/build_status_spec.rb +0 -48
  389. data/spec/integration/serverless/v1/service/build_spec.rb +0 -224
  390. data/spec/integration/serverless/v1/service/environment/deployment_spec.rb +0 -133
  391. data/spec/integration/serverless/v1/service/environment/log_spec.rb +0 -97
  392. data/spec/integration/serverless/v1/service/environment/variable_spec.rb +0 -207
  393. data/spec/integration/serverless/v1/service/environment_spec.rb +0 -170
  394. data/spec/integration/serverless/v1/service/function/function_version/function_version_content_spec.rb +0 -51
  395. data/spec/integration/serverless/v1/service/function/function_version_spec.rb +0 -96
  396. data/spec/integration/serverless/v1/service/function_spec.rb +0 -202
  397. data/spec/integration/serverless/v1/service_spec.rb +0 -205
  398. data/spec/integration/studio/v1/flow/engagement/engagement_context_spec.rb +0 -50
  399. data/spec/integration/studio/v1/flow/engagement/step/step_context_spec.rb +0 -53
  400. data/spec/integration/studio/v1/flow/engagement/step_spec.rb +0 -99
  401. data/spec/integration/studio/v1/flow/engagement_spec.rb +0 -168
  402. data/spec/integration/studio/v1/flow/execution/execution_context_spec.rb +0 -50
  403. data/spec/integration/studio/v1/flow/execution/execution_step/execution_step_context_spec.rb +0 -53
  404. data/spec/integration/studio/v1/flow/execution/execution_step_spec.rb +0 -100
  405. data/spec/integration/studio/v1/flow/execution_spec.rb +0 -214
  406. data/spec/integration/studio/v1/flow_spec.rb +0 -114
  407. data/spec/integration/studio/v2/flow/execution/execution_context_spec.rb +0 -50
  408. data/spec/integration/studio/v2/flow/execution/execution_step/execution_step_context_spec.rb +0 -53
  409. data/spec/integration/studio/v2/flow/execution/execution_step_spec.rb +0 -100
  410. data/spec/integration/studio/v2/flow/execution_spec.rb +0 -211
  411. data/spec/integration/studio/v2/flow/flow_revision_spec.rb +0 -110
  412. data/spec/integration/studio/v2/flow/test_user_spec.rb +0 -85
  413. data/spec/integration/studio/v2/flow_spec.rb +0 -251
  414. data/spec/integration/studio/v2/flow_validate_spec.rb +0 -46
  415. data/spec/integration/supersim/v1/command_spec.rb +0 -184
  416. data/spec/integration/supersim/v1/fleet_spec.rb +0 -222
  417. data/spec/integration/supersim/v1/network_access_profile/network_access_profile_network_spec.rb +0 -176
  418. data/spec/integration/supersim/v1/network_access_profile_spec.rb +0 -219
  419. data/spec/integration/supersim/v1/network_spec.rb +0 -137
  420. data/spec/integration/supersim/v1/sim_spec.rb +0 -323
  421. data/spec/integration/supersim/v1/usage_record_spec.rb +0 -647
  422. data/spec/integration/sync/v1/service/document/document_permission_spec.rb +0 -201
  423. data/spec/integration/sync/v1/service/document_spec.rb +0 -254
  424. data/spec/integration/sync/v1/service/sync_list/sync_list_item_spec.rb +0 -257
  425. data/spec/integration/sync/v1/service/sync_list/sync_list_permission_spec.rb +0 -201
  426. data/spec/integration/sync/v1/service/sync_list_spec.rb +0 -252
  427. data/spec/integration/sync/v1/service/sync_map/sync_map_item_spec.rb +0 -257
  428. data/spec/integration/sync/v1/service/sync_map/sync_map_permission_spec.rb +0 -201
  429. data/spec/integration/sync/v1/service/sync_map_spec.rb +0 -252
  430. data/spec/integration/sync/v1/service/sync_stream/stream_message_spec.rb +0 -47
  431. data/spec/integration/sync/v1/service/sync_stream_spec.rb +0 -244
  432. data/spec/integration/sync/v1/service_spec.rb +0 -261
  433. data/spec/integration/taskrouter/v1/workspace/activity_spec.rb +0 -232
  434. data/spec/integration/taskrouter/v1/workspace/event_spec.rb +0 -163
  435. data/spec/integration/taskrouter/v1/workspace/task/reservation_spec.rb +0 -222
  436. data/spec/integration/taskrouter/v1/workspace/task_channel_spec.rb +0 -312
  437. data/spec/integration/taskrouter/v1/workspace/task_queue/task_queue_cumulative_statistics_spec.rb +0 -101
  438. data/spec/integration/taskrouter/v1/workspace/task_queue/task_queue_real_time_statistics_spec.rb +0 -83
  439. data/spec/integration/taskrouter/v1/workspace/task_queue/task_queue_statistics_spec.rb +0 -107
  440. data/spec/integration/taskrouter/v1/workspace/task_queue/task_queues_statistics_spec.rb +0 -145
  441. data/spec/integration/taskrouter/v1/workspace/task_queue_spec.rb +0 -290
  442. data/spec/integration/taskrouter/v1/workspace/task_spec.rb +0 -325
  443. data/spec/integration/taskrouter/v1/workspace/worker/reservation_spec.rb +0 -191
  444. data/spec/integration/taskrouter/v1/workspace/worker/worker_channel_spec.rb +0 -185
  445. data/spec/integration/taskrouter/v1/workspace/worker/worker_statistics_spec.rb +0 -91
  446. data/spec/integration/taskrouter/v1/workspace/worker/workers_cumulative_statistics_spec.rb +0 -88
  447. data/spec/integration/taskrouter/v1/workspace/worker/workers_real_time_statistics_spec.rb +0 -69
  448. data/spec/integration/taskrouter/v1/workspace/worker/workers_statistics_spec.rb +0 -115
  449. data/spec/integration/taskrouter/v1/workspace/worker_spec.rb +0 -290
  450. data/spec/integration/taskrouter/v1/workspace/workflow/workflow_cumulative_statistics_spec.rb +0 -96
  451. data/spec/integration/taskrouter/v1/workspace/workflow/workflow_real_time_statistics_spec.rb +0 -57
  452. data/spec/integration/taskrouter/v1/workspace/workflow/workflow_statistics_spec.rb +0 -70
  453. data/spec/integration/taskrouter/v1/workspace/workflow_spec.rb +0 -266
  454. data/spec/integration/taskrouter/v1/workspace/workspace_cumulative_statistics_spec.rb +0 -93
  455. data/spec/integration/taskrouter/v1/workspace/workspace_real_time_statistics_spec.rb +0 -72
  456. data/spec/integration/taskrouter/v1/workspace/workspace_statistics_spec.rb +0 -104
  457. data/spec/integration/taskrouter/v1/workspace_spec.rb +0 -291
  458. data/spec/integration/trunking/v1/trunk/credential_list_spec.rb +0 -189
  459. data/spec/integration/trunking/v1/trunk/ip_access_control_list_spec.rb +0 -189
  460. data/spec/integration/trunking/v1/trunk/origination_url_spec.rb +0 -248
  461. data/spec/integration/trunking/v1/trunk/phone_number_spec.rb +0 -264
  462. data/spec/integration/trunking/v1/trunk/recording_spec.rb +0 -75
  463. data/spec/integration/trunking/v1/trunk_spec.rb +0 -281
  464. data/spec/integration/verify/v2/form_spec.rb +0 -47
  465. data/spec/integration/verify/v2/service/access_token_spec.rb +0 -44
  466. data/spec/integration/verify/v2/service/entity/challenge_spec.rb +0 -288
  467. data/spec/integration/verify/v2/service/entity/factor_spec.rb +0 -277
  468. data/spec/integration/verify/v2/service/entity_spec.rb +0 -201
  469. data/spec/integration/verify/v2/service/messaging_configuration_spec.rb +0 -228
  470. data/spec/integration/verify/v2/service/rate_limit/bucket_spec.rb +0 -245
  471. data/spec/integration/verify/v2/service/rate_limit_spec.rb +0 -217
  472. data/spec/integration/verify/v2/service/verification_check_spec.rb +0 -80
  473. data/spec/integration/verify/v2/service/verification_spec.rb +0 -318
  474. data/spec/integration/verify/v2/service/webhook_spec.rb +0 -258
  475. data/spec/integration/verify/v2/service_spec.rb +0 -279
  476. data/spec/integration/video/v1/composition_hook_spec.rb +0 -407
  477. data/spec/integration/video/v1/composition_settings_spec.rb +0 -85
  478. data/spec/integration/video/v1/composition_spec.rb +0 -347
  479. data/spec/integration/video/v1/recording_settings_spec.rb +0 -85
  480. data/spec/integration/video/v1/recording_spec.rb +0 -176
  481. data/spec/integration/video/v1/room/recording_spec.rb +0 -185
  482. data/spec/integration/video/v1/room/room_participant/room_participant_published_track_spec.rb +0 -94
  483. data/spec/integration/video/v1/room/room_participant/room_participant_subscribe_rule_spec.rb +0 -103
  484. data/spec/integration/video/v1/room/room_participant/room_participant_subscribed_track_spec.rb +0 -95
  485. data/spec/integration/video/v1/room/room_participant_spec.rb +0 -187
  486. data/spec/integration/video/v1/room/room_recording_rule_spec.rb +0 -89
  487. data/spec/integration/video/v1/room_spec.rb +0 -301
  488. data/spec/integration/voice/v1/byoc_trunk_spec.rb +0 -245
  489. data/spec/integration/voice/v1/connection_policy/connection_policy_target_spec.rb +0 -242
  490. data/spec/integration/voice/v1/connection_policy_spec.rb +0 -221
  491. data/spec/integration/voice/v1/dialing_permissions/bulk_country_update_spec.rb +0 -45
  492. data/spec/integration/voice/v1/dialing_permissions/country/highrisk_special_prefix_spec.rb +0 -60
  493. data/spec/integration/voice/v1/dialing_permissions/country_spec.rb +0 -110
  494. data/spec/integration/voice/v1/dialing_permissions/settings_spec.rb +0 -75
  495. data/spec/integration/voice/v1/dialing_permissions_spec.rb +0 -12
  496. data/spec/integration/voice/v1/ip_record_spec.rb +0 -219
  497. data/spec/integration/voice/v1/source_ip_mapping_spec.rb +0 -216
  498. data/spec/integration/wireless/v1/command_spec.rb +0 -286
  499. data/spec/integration/wireless/v1/rate_plan_spec.rb +0 -277
  500. data/spec/integration/wireless/v1/sim/data_session_spec.rb +0 -88
  501. data/spec/integration/wireless/v1/sim/usage_record_spec.rb +0 -114
  502. data/spec/integration/wireless/v1/sim_spec.rb +0 -325
  503. data/spec/integration/wireless/v1/usage_record_spec.rb +0 -110
  504. data/spec/jwt/access_token_spec.rb +0 -159
  505. data/spec/jwt/client_capability_spec.rb +0 -104
  506. data/spec/jwt/task_router_spec.rb +0 -172
  507. data/spec/rack/twilio_webhook_authentication_spec.rb +0 -106
  508. data/spec/rest/client_spec.rb +0 -255
  509. data/spec/security/request_validator_spec.rb +0 -125
  510. data/spec/spec_helper.rb +0 -38
  511. data/spec/support/fakeweb.rb +0 -2
  512. data/spec/twilio_spec.rb +0 -17
  513. data/spec/twiml/messaging_response_spec.rb +0 -235
  514. data/spec/twiml/voice_response_spec.rb +0 -847
  515. data/spec/util/configuration_spec.rb +0 -33
  516. data/spec/util/url_encode_spec.rb +0 -12
@@ -1,125 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::Security::RequestValidator do
4
- describe 'configuration' do
5
- after(:each) do
6
- Twilio.instance_variable_set('@configuration', nil)
7
- end
8
-
9
- it 'should set the auth token from a configuration block' do
10
- Twilio.configure do |config|
11
- config.auth_token = 'someToken'
12
- end
13
-
14
- validator = Twilio::Security::RequestValidator.new
15
- expect(validator.instance_variable_get('@auth_token')).to eq('someToken')
16
- end
17
-
18
- it 'should overwrite the auth token if passed to initializer' do
19
- Twilio.configure do |config|
20
- config.auth_token = 'someToken'
21
- end
22
-
23
- validator = Twilio::Security::RequestValidator.new 'otherToken'
24
- expect(validator.instance_variable_get('@auth_token')).to eq('otherToken')
25
- end
26
-
27
- it 'should throw an argument error if the auth token isn\'t set' do
28
- expect { Twilio::Security::RequestValidator.new }.to raise_error(ArgumentError)
29
- end
30
- end
31
-
32
- describe 'validations' do
33
- let(:token) { '12345' }
34
-
35
- let(:validator) { Twilio::Security::RequestValidator.new token }
36
-
37
- let(:url) { 'https://mycompany.com/myapp.php?foo=1&bar=2' }
38
-
39
- let(:default_signature) { 'RSOYDt4T1cUTdK1PDd93/VVr8B8=' }
40
-
41
- let(:body) { '{"property": "value", "boolean": true}' }
42
-
43
- let(:body_hash) { '0a1ff7634d9ab3b95db5c9a2dfe9416e41502b283a80c7cf19632632f96e6620' }
44
-
45
- let(:params) do
46
- {
47
- 'From' => '+14158675309',
48
- 'To' => '+18005551212',
49
- 'CallSid' => 'CA1234567890ABCDE',
50
- 'Caller' => '+14158675309',
51
- 'Digits' => '1234'
52
- }
53
- end
54
-
55
- it 'should build a correct signature' do
56
- expect(validator.build_signature_for(url, params)).to eq(default_signature)
57
- end
58
- it 'should validate an authentic Twilio request' do
59
- expect(validator.validate(url, params, default_signature)).to eq(true)
60
- end
61
-
62
- it 'should not validate a request with wrong signature' do
63
- expect(validator.validate(url, params, 'fake_signature')).to eq(false)
64
- end
65
-
66
- it 'should hash body correctly' do
67
- expect(validator.build_hash_for(body)).to eq(body_hash)
68
- end
69
-
70
- it 'should validate requests with body correctly' do
71
- url_with_hash = "#{url}&bodySHA256=#{body_hash}"
72
- expect(validator.validate(url_with_hash, body, 'a9nBmqA0ju/hNViExpshrM61xv4=')).to eq(true)
73
- end
74
-
75
- it 'should validate with no other GET parameters' do
76
- url_with_hash = "https://mycompany.com/myapp.php?bodySHA256=#{body_hash}"
77
- expect(validator.validate(url_with_hash, body, 'y77kIzt2vzLz71DgmJGsen2scGs=')).to eq(true)
78
- end
79
-
80
- it 'should fail validation with body but no signature' do
81
- expect(validator.validate(url, body, default_signature)).to eq(false)
82
- end
83
-
84
- it 'should validate https urls with ports by stripping them' do
85
- url_with_port = url.sub('.com', '.com:1234')
86
- expect(validator.validate(url_with_port, params, default_signature)).to eq(true)
87
- end
88
-
89
- it 'should validate http urls with ports' do
90
- http_url_with_port = url.sub('.com', '.com:1234')
91
- http_url_with_port = http_url_with_port.sub('https', 'http')
92
- signature = 'Zmvh+3yNM1Phv2jhDCwEM3q5ebU=' # hash of http url with port 1234
93
- expect(validator.validate(http_url_with_port, params, signature)).to eq(true)
94
- end
95
-
96
- it 'should validate https urls without ports by adding standard port 443' do
97
- signature = 'kvajT1Ptam85bY51eRf/AJRuM3w=' # hash of https url with port 443
98
- expect(validator.validate(url, params, signature)).to eq(true)
99
- end
100
-
101
- it 'should validate http urls without ports by adding standard port 80' do
102
- http_url = url.sub('https', 'http')
103
- signature = '0ZXoZLH/DfblKGATFgpif+LLRf4=' # hash of http url with port 80
104
- expect(validator.validate(http_url, params, signature)).to eq(true)
105
- end
106
-
107
- it 'should validate urls with credentials' do
108
- url_with_creds = 'https://user:pass@mycompany.com/myapp.php?foo=1&bar=2'
109
- signature = 'CukzLTc1tT5dXEDIHm/tKBanW10=' # expected hash of the url
110
- expect(validator.validate(url_with_creds, params, signature)).to eq(true)
111
- end
112
-
113
- it 'should validate urls with just username' do
114
- url_with_creds = 'https://user@mycompany.com/myapp.php?foo=1&bar=2'
115
- signature = '2YRLlVAflCqxaNicjMpJcSTgzSs=' # expected hash of the url
116
- expect(validator.validate(url_with_creds, params, signature)).to eq(true)
117
- end
118
-
119
- it 'should validate urls with credentials by adding port' do
120
- url_with_creds = 'https://user:pass@mycompany.com/myapp.php?foo=1&bar=2'
121
- signature = 'ZQFR1PTIZXF2MXB8ZnKCvnnA+rI=' # expected hash of the url with port 443
122
- expect(validator.validate(url_with_creds, params, signature)).to eq(true)
123
- end
124
- end
125
- end
data/spec/spec_helper.rb DELETED
@@ -1,38 +0,0 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
-
3
- require 'bundler'
4
- Bundler.setup
5
-
6
- Dir.glob(File.expand_path('../support/**/*.rb', __FILE__)).sort.each(&method(:require))
7
-
8
- require_relative './holodeck/holodeck.rb'
9
- require_relative './holodeck/hologram.rb'
10
-
11
- require 'twilio-ruby'
12
- require 'rack'
13
- require 'rspec/matchers'
14
- require 'equivalent-xml'
15
-
16
- RSpec.configure do |config|
17
- config.expect_with :rspec do |c|
18
- c.syntax = :expect
19
- end
20
-
21
- config.before(:each) do
22
- @client = Twilio::REST::Client.new('AC' + 'a' * 32, 'AUTHTOKEN')
23
- @holodeck = Holodeck.new
24
- @client.http_client = @holodeck
25
- end
26
- end
27
-
28
- def account_sid
29
- ENV['ACCOUNT_SID']
30
- end
31
-
32
- def auth_token
33
- ENV['AUTH_TOKEN']
34
- end
35
-
36
- def parse(twiml_response)
37
- Nokogiri::XML::Document.parse(twiml_response.to_s, &:noblanks)
38
- end
@@ -1,2 +0,0 @@
1
- require 'fakeweb'
2
- FakeWeb.allow_net_connect = false
data/spec/twilio_spec.rb DELETED
@@ -1,17 +0,0 @@
1
- describe Twilio do
2
- after(:each) do
3
- Twilio.instance_variable_set('@configuration', nil)
4
- end
5
-
6
- it 'should set the configuration with a config block' do
7
- Twilio.configure do |config|
8
- config.account_sid = 'someSid'
9
- config.auth_token = 'someToken'
10
- config.http_client = 'someClient'
11
- end
12
-
13
- expect(Twilio.account_sid).to eq('someSid')
14
- expect(Twilio.auth_token).to eq('someToken')
15
- expect(Twilio.http_client).to eq('someClient')
16
- end
17
- end
@@ -1,235 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::TwiML::MessagingResponse do
4
- context 'Testing Response' do
5
- it 'should allow empty response' do
6
- expected_doc = parse <<-XML
7
- <Response/>
8
- XML
9
- response = Twilio::TwiML::MessagingResponse.new.to_s
10
- doc = parse(response)
11
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
12
- end
13
-
14
- it 'should allow using to_xml instead of to_s' do
15
- expected_doc = parse <<-XML
16
- <Response/>
17
- XML
18
- response = Twilio::TwiML::MessagingResponse.new.to_xml
19
- doc = parse(response)
20
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
21
- end
22
-
23
- it 'should allow comments' do
24
- twiml = Twilio::TwiML::MessagingResponse.new
25
- twiml.comment 'This is awesome'
26
- expect(twiml.to_xml).to match(/<!--This is awesome-->/)
27
- end
28
-
29
- it 'should allow text nodes' do
30
- expected_doc = parse <<-XML
31
- <Response>Look no tags</Response>
32
- XML
33
- twiml = Twilio::TwiML::MessagingResponse.new
34
- twiml.add_text 'Look no tags'
35
- expect(parse(twiml)).to be_equivalent_to(expected_doc).respecting_element_order
36
- end
37
-
38
- it 'should allow generic child nodes' do
39
- expected_doc = parse <<-XML
40
- <Response>
41
- <message tag="global">
42
- <bold>Hello</bold>
43
- </alexa>
44
- </Response>
45
- XML
46
-
47
- twiml = Twilio::TwiML::MessagingResponse.new
48
- twiml.add_child('message', tag: 'global') do |custom|
49
- custom.add_child('bold', 'Hello')
50
- end
51
-
52
- expect(parse(twiml)).to be_equivalent_to(expected_doc).respecting_element_order
53
- end
54
-
55
- it 'should allow mixed text and generic nodes' do
56
- expected_doc = parse <<-XML
57
- <Response>
58
- before
59
- <Child>content</Child>
60
- after
61
- </Response>
62
- XML
63
-
64
- twiml = Twilio::TwiML::MessagingResponse.new
65
- twiml.add_text('before')
66
- .add_child('Child', 'content')
67
- .add_text('after')
68
-
69
- expect(parse(twiml)).to be_equivalent_to(expected_doc).respecting_element_order
70
- end
71
-
72
- it 'should allow populated response' do
73
- expected_doc = parse <<-XML
74
- <Response>
75
- <Message>Hello</Message>
76
- <Redirect>example.com</Redirect>
77
- </Response>
78
- XML
79
- response = Twilio::TwiML::MessagingResponse.new
80
- response.message(body: 'Hello')
81
- response.redirect('example.com')
82
- doc = parse(response)
83
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
84
- end
85
-
86
- it 'should allow chaining' do
87
- expected_doc = parse <<-XML
88
- <Response>
89
- <Message>Hello</Message>
90
- <Redirect>example.com</Redirect>
91
- </Response>
92
- XML
93
- response = Twilio::TwiML::MessagingResponse.new.message(body: 'Hello').redirect('example.com')
94
- doc = parse(response)
95
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
96
- end
97
-
98
- it 'should allow nesting' do
99
- expected_doc = parse <<-XML
100
- <Response>
101
- <Message>
102
- Hello
103
- <Media>foobar</Media>
104
- </Message>
105
- </Response>
106
- XML
107
- response = Twilio::TwiML::MessagingResponse.new
108
- response.message(body: 'Hello') do |message|
109
- message.media('foobar')
110
- end
111
- doc = parse(response)
112
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
113
- end
114
-
115
- it 'should allow nesting and chaining' do
116
- expected_doc = parse <<-XML
117
- <Response>
118
- <Message>
119
- Hello
120
- <Media>foobar</Media>
121
- </Message>
122
- <Redirect>example.com</Redirec>
123
- </Response>
124
- XML
125
- response = Twilio::TwiML::MessagingResponse.new
126
- response.message(body: 'Hello') do |message|
127
- message.media('foobar')
128
- end
129
-
130
- response.redirect('example.com')
131
-
132
- doc = parse(response)
133
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
134
- end
135
-
136
- it 'should allow nesting from the initializer' do
137
- expected_doc = parse <<-XML
138
- <Response>
139
- <Message>Hello</Message>
140
- <Redirect>example.com</Redirec>
141
- </Response>
142
- XML
143
- response = Twilio::TwiML::MessagingResponse.new do |res|
144
- res.message(body: 'Hello')
145
- res.redirect('example.com')
146
- end
147
- doc = parse(response)
148
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
149
- end
150
- end
151
-
152
- context 'Testing Message' do
153
- it 'should allow a body' do
154
- expected_doc = parse <<-XML
155
- <Response>
156
- <Message>Hello</Message>
157
- </Response>
158
- XML
159
- response = Twilio::TwiML::MessagingResponse.new
160
- response.message(body: 'Hello')
161
- doc = parse(response)
162
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
163
- end
164
-
165
- it 'should allow appending Body' do
166
- expected_doc = parse <<-XML
167
- <Response>
168
- <Message><Body>Hello World</Body></Message>
169
- </Response>
170
- XML
171
- body = Twilio::TwiML::Body.new('Hello World')
172
- message = Twilio::TwiML::Message.new
173
-
174
- response = Twilio::TwiML::MessagingResponse.new
175
- message.append(body)
176
- response.append(message)
177
-
178
- doc = parse(response)
179
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
180
- end
181
-
182
- it 'should allow appending Body and Media' do
183
- expected_doc = parse <<-XML
184
- <Response>
185
- <Message>
186
- <Body>Hello World</Body>
187
- <Media>hey.jpg</Media>
188
- </Message>
189
- </Response>
190
- XML
191
- body = Twilio::TwiML::Body.new('Hello World')
192
- media = Twilio::TwiML::Media.new('hey.jpg')
193
- message = Twilio::TwiML::Message.new
194
-
195
- response = Twilio::TwiML::MessagingResponse.new
196
- message.append(body)
197
- message.append(media)
198
- response.append(message)
199
-
200
- doc = parse(response)
201
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
202
- end
203
-
204
- it 'should allow and preserve new lines in messages' do
205
- expected_doc = parse <<-XML
206
- <Response>
207
- <Message>Hello
208
- World
209
- </Message>
210
- </Response>
211
- XML
212
-
213
- response = Twilio::TwiML::MessagingResponse.new
214
- response.message(body: "Hello\nWorld")
215
-
216
- doc = parse(response)
217
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
218
- end
219
- end
220
-
221
- context 'Testing Redirect' do
222
- it 'should allow MessagingResponse.redirect' do
223
- expected_doc = parse <<-XML
224
- <Response>
225
- <Redirect>example.com</Redirect>
226
- </Response>
227
- XML
228
- response = Twilio::TwiML::MessagingResponse.new
229
- response.redirect('example.com')
230
-
231
- doc = parse(response)
232
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
233
- end
234
- end
235
- end
@@ -1,847 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Twilio::TwiML::VoiceResponse do
4
- context 'Testing Response' do
5
- it 'should allow empty response' do
6
- expected_doc = parse <<-XML
7
- <Response/>
8
- XML
9
- response = Twilio::TwiML::VoiceResponse.new.to_s
10
- doc = parse(response)
11
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
12
- end
13
-
14
- it 'should allow using to_xml instead of to_s' do
15
- expected_doc = parse <<-XML
16
- <Response/>
17
- XML
18
- response = Twilio::TwiML::VoiceResponse.new.to_xml
19
- doc = parse(response)
20
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
21
- end
22
-
23
- it 'should have an xml declaration by default' do
24
- twiml = Twilio::TwiML::VoiceResponse.new.to_xml
25
- expect(twiml).to match(/\A<\?xml version="1.0" encoding="UTF-8"\?>/)
26
- end
27
-
28
- it 'should allow no xml_declaration' do
29
- twiml = Twilio::TwiML::VoiceResponse.new.to_xml(false)
30
- expect(twiml).not_to match(/\A<\?xml version="1.0" encoding="UTF-8"\?>/)
31
- end
32
-
33
- it 'should allow comments' do
34
- twiml = Twilio::TwiML::VoiceResponse.new
35
- twiml.comment 'This is awesome'
36
- expect(twiml.to_xml).to match(/<!--This is awesome-->/)
37
- end
38
-
39
- it 'should allow text nodes' do
40
- expected_doc = parse <<-XML
41
- <Response>Look no tags</Response>
42
- XML
43
- twiml = Twilio::TwiML::VoiceResponse.new
44
- twiml.add_text 'Look no tags'
45
- expect(parse(twiml)).to be_equivalent_to(expected_doc).respecting_element_order
46
- end
47
-
48
- it 'should allow generic child nodes' do
49
- expected_doc = parse <<-XML
50
- <Response>
51
- <alexa omnipresent="true">
52
- <purchase>Kindle</purchase>
53
- </alexa>
54
- </Response>
55
- XML
56
-
57
- twiml = Twilio::TwiML::VoiceResponse.new
58
- twiml.add_child('alexa', omnipresent: 'true') do |alexa|
59
- alexa.add_child('purchase', 'Kindle')
60
- end
61
-
62
- expect(parse(twiml)).to be_equivalent_to(expected_doc).respecting_element_order
63
- end
64
- it 'should allow populated response' do
65
- expected_doc = parse <<-XML
66
- <Response>
67
- <Hangup/>
68
- <Leave/>
69
- <Sms to="+11234567890" from="+10987654321">twilio sms</Sms>
70
- </Response>
71
- XML
72
- response = Twilio::TwiML::VoiceResponse.new
73
- response.hangup
74
- response.leave
75
- response.sms('twilio sms', to: '+11234567890', from: '+10987654321')
76
-
77
- doc = parse(response)
78
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
79
- end
80
-
81
- it 'should allow chaining' do
82
- expected_doc = parse <<-XML
83
- <Response>
84
- <Hangup/>
85
- <Leave/>
86
- <Sms to="+11234567890" from="+10987654321">twilio sms</Sms>
87
- </Response>
88
- XML
89
- response = Twilio::TwiML::VoiceResponse.new.hangup.leave.sms(
90
- 'twilio sms',
91
- to: '+11234567890',
92
- from: '+10987654321'
93
- )
94
-
95
- doc = parse(response)
96
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
97
- end
98
-
99
- it 'should allow nesting' do
100
- expected_doc = parse <<-XML
101
- <Response>
102
- <Hangup/>
103
- <Leave/>
104
- <Sms to="+11234567890" from="+10987654321">twilio sms</Sms>
105
- </Response>
106
- XML
107
- response = Twilio::TwiML::VoiceResponse.new do |r|
108
- r.hangup
109
- r.leave
110
- r.sms('twilio sms', to: '+11234567890', from: '+10987654321')
111
- end
112
-
113
- doc = parse(response)
114
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
115
- end
116
- end
117
-
118
- context 'Testing Say' do
119
- it 'should allow empty say' do
120
- expected_doc = parse <<-XML
121
- <Response>
122
- <Say></Say>
123
- </Response>
124
- XML
125
- response = Twilio::TwiML::VoiceResponse.new
126
- response.say(message: '')
127
-
128
- doc = parse(response)
129
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
130
- end
131
-
132
- it 'should allow populated say' do
133
- expected_doc = parse <<-XML
134
- <Response>
135
- <Say>Hello World</Say>
136
- </Response>
137
- XML
138
- response = Twilio::TwiML::VoiceResponse.new
139
- response.say(message: 'Hello World')
140
-
141
- doc = parse(response)
142
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
143
- end
144
-
145
- it 'should allow unicode say' do
146
- expected_doc = parse <<-XML
147
- <Response>
148
- <Say>nécessaire et d'autres</Say>
149
- </Response>
150
- XML
151
- response = Twilio::TwiML::VoiceResponse.new
152
- response.say(message: 'nécessaire et d\'autres')
153
-
154
- doc = parse(response)
155
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
156
- end
157
-
158
- it 'should allow looping' do
159
- expected_doc = parse <<-XML
160
- <Response>
161
- <Say loop="3">Hello Monkey</Say>
162
- </Response>
163
- XML
164
- response = Twilio::TwiML::VoiceResponse.new
165
- response.say(message: 'Hello Monkey', loop: 3)
166
-
167
- doc = parse(response)
168
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
169
- end
170
-
171
- it 'should allow languages' do
172
- expected_doc = parse <<-XML
173
- <Response>
174
- <Say language="en-gb">Hello Monkey</Say>
175
- </Response>
176
- XML
177
- response = Twilio::TwiML::VoiceResponse.new
178
- response.say(message: 'Hello Monkey', language: 'en-gb')
179
-
180
- doc = parse(response)
181
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
182
- end
183
-
184
- it 'should allow all attributes' do
185
- expected_doc = parse <<-XML
186
- <Response>
187
- <Say loop="3" voice="man" language="fr">Hello Monkey</Say>
188
- </Response>
189
- XML
190
- response = Twilio::TwiML::VoiceResponse.new
191
- response.say(message: 'Hello Monkey', loop: 3, voice: 'man', language: 'fr')
192
-
193
- doc = parse(response)
194
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
195
- end
196
- end
197
-
198
- context 'Testing Play' do
199
- it 'should allow empty play' do
200
- expected_doc = parse <<-XML
201
- <Response>
202
- <Play></Play>
203
- </Response>
204
- XML
205
- response = Twilio::TwiML::VoiceResponse.new
206
- response.play
207
-
208
- doc = parse(response)
209
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
210
- end
211
-
212
- it 'should play hello' do
213
- expected_doc = parse <<-XML
214
- <Response>
215
- <Play>http://hellomonkey.mp3</Play>
216
- </Response>
217
- XML
218
- response = Twilio::TwiML::VoiceResponse.new
219
- response.play(url: 'http://hellomonkey.mp3')
220
- doc = parse(response)
221
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
222
- end
223
-
224
- it 'should play hello on loop' do
225
- expected_doc = parse <<-XML
226
- <Response>
227
- <Play loop="3">http://hellomonkey.mp3</Play>
228
- </Response>
229
- XML
230
- response = Twilio::TwiML::VoiceResponse.new
231
- response.play(url: 'http://hellomonkey.mp3', loop: 3)
232
-
233
- doc = parse(response)
234
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
235
- end
236
-
237
- it 'should play digits' do
238
- expected_doc = parse <<-XML
239
- <Response>
240
- <Play digits="w123"></Play>
241
- </Response>
242
- XML
243
- response = Twilio::TwiML::VoiceResponse.new
244
- response.play(digits: 'w123')
245
-
246
- doc = parse(response)
247
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
248
- end
249
- end
250
-
251
- context 'Testing Record' do
252
- it 'should allow empty record' do
253
- expected_doc = parse <<-XML
254
- <Response>
255
- <Record/>
256
- </Response>
257
- XML
258
- response = Twilio::TwiML::VoiceResponse.new
259
- response.record
260
- doc = parse(response)
261
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
262
- end
263
-
264
- it 'should allow action and method' do
265
- expected_doc = parse <<-XML
266
- <Response>
267
- <Record action="example.com" method="GET" />
268
- </Response>
269
- XML
270
- response = Twilio::TwiML::VoiceResponse.new
271
- response.record(action: 'example.com', method: 'GET')
272
- doc = parse(response)
273
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
274
- end
275
-
276
- it 'should allow max_length, finish_on_key, and timeout' do
277
- expected_doc = parse <<-XML
278
- <Response>
279
- <Record timeout="4" finishOnKey="#" maxLength="30" />
280
- </Response>
281
- XML
282
- response = Twilio::TwiML::VoiceResponse.new
283
- response.record(timeout: 4, finish_on_key: '#', max_length: 30)
284
- doc = parse(response)
285
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
286
- end
287
-
288
- it 'should allow transcribe' do
289
- expected_doc = parse <<-XML
290
- <Response>
291
- <Record transcribeCallback="example.com" />
292
- </Response>
293
- XML
294
- response = Twilio::TwiML::VoiceResponse.new
295
- response.record(transcribe_callback: 'example.com')
296
- doc = parse(response)
297
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
298
- end
299
- end
300
-
301
- context 'Testing Redirect' do
302
- it 'should allow empty redirect' do
303
- expected_doc = parse <<-XML
304
- <Response>
305
- <Redirect/>
306
- </Response>
307
- XML
308
- response = Twilio::TwiML::VoiceResponse.new
309
- response.redirect ''
310
- doc = parse(response)
311
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
312
- end
313
-
314
- it 'should allow method' do
315
- expected_doc = parse <<-XML
316
- <Response>
317
- <Redirect method="POST">example.com</Redirect>
318
- </Response>
319
- XML
320
- response = Twilio::TwiML::VoiceResponse.new
321
- response.redirect('example.com', method: 'POST')
322
- doc = parse(response)
323
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
324
- end
325
-
326
- it 'should allow method and params' do
327
- expected_doc = parse <<-XML
328
- <Response>
329
- <Redirect method="POST">example.com?id=34&amp;action=hey</Redirect>
330
- </Response>
331
- XML
332
- response = Twilio::TwiML::VoiceResponse.new
333
- response.redirect('example.com?id=34&action=hey', method: 'POST')
334
- doc = parse(response)
335
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
336
- end
337
- end
338
-
339
- context 'Testing Hangup' do
340
- it 'should allow hangup' do
341
- expected_doc = parse <<-XML
342
- <Response>
343
- <Hangup/>
344
- </Response>
345
- XML
346
- response = Twilio::TwiML::VoiceResponse.new
347
- response.hangup
348
- doc = parse(response)
349
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
350
- end
351
-
352
- it 'should not allow content in the hangup' do
353
- response = Twilio::TwiML::VoiceResponse.new
354
- expect { response.hangup 'Goodbye' }.to raise_error(ArgumentError)
355
- end
356
- end
357
-
358
- context 'Testing Leave' do
359
- it 'should allow leave' do
360
- expected_doc = parse <<-XML
361
- <Response>
362
- <Leave/>
363
- </Response>
364
- XML
365
- response = Twilio::TwiML::VoiceResponse.new
366
- response.leave
367
- doc = parse(response)
368
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
369
- end
370
-
371
- it 'should not allow content in the leave' do
372
- response = Twilio::TwiML::VoiceResponse.new
373
- expect { response.leave 'Goodbye' }.to raise_error(ArgumentError)
374
- end
375
- end
376
-
377
- context 'Testing Reject' do
378
- it 'should reject with a default reason' do
379
- expected_doc = parse <<-XML
380
- <Response>
381
- <Reject/>
382
- </Response>
383
- XML
384
- response = Twilio::TwiML::VoiceResponse.new
385
- response.reject
386
- doc = parse(response)
387
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
388
- end
389
-
390
- it 'should not allow content in the reject' do
391
- response = Twilio::TwiML::VoiceResponse.new
392
- expect { response.reject 'Goodbye' }.to raise_error(ArgumentError)
393
- end
394
- end
395
-
396
- context 'Testing SMS' do
397
- it 'should allow empty SMS' do
398
- expected_doc = parse <<-XML
399
- <Response>
400
- <Sms/>
401
- </Response>
402
- XML
403
- response = Twilio::TwiML::VoiceResponse.new
404
- response.sms ''
405
- doc = parse(response)
406
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
407
- end
408
-
409
- it 'should allow SMS body' do
410
- expected_doc = parse <<-XML
411
- <Response>
412
- <Sms>Hello, World</Sms>
413
- </Response>
414
- XML
415
- response = Twilio::TwiML::VoiceResponse.new
416
- response.sms 'Hello, World'
417
- doc = parse(response)
418
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
419
- end
420
-
421
- it 'should allow to, from, action, and status_callback' do
422
- expected_doc = parse <<-XML
423
- <Response>
424
- <Sms to="1231231234" from="3453453456" statusCallback="example.com?id=34&amp;action=hey">Hello, World</Sms>
425
- </Response>
426
- XML
427
- response = Twilio::TwiML::VoiceResponse.new
428
- response.sms('Hello, World', to: 1_231_231_234, from: 3_453_453_456, status_callback: 'example.com?id=34&action=hey')
429
- doc = parse(response)
430
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
431
- end
432
-
433
- it 'should allow action and method' do
434
- expected_doc = parse <<-XML
435
- <Response>
436
- <Sms method="POST" action="example.com?id=34&amp;action=hey">Hello</Sms>
437
- </Response>
438
- XML
439
- response = Twilio::TwiML::VoiceResponse.new
440
- response.sms('Hello', method: 'POST', action: 'example.com?id=34&action=hey')
441
- doc = parse(response)
442
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
443
- end
444
- end
445
-
446
- context 'Testing Conference' do
447
- it 'should allow basic conferencing' do
448
- expected_doc = parse <<-XML
449
- <Response>
450
- <Dial>
451
- <Conference beep="false" waitUrl="" startConferenceOnEnter="true" endConferenceOnExit="true">
452
- TestConferenceAttributes
453
- </Conference>
454
- </Dial>
455
- </Response>
456
- XML
457
- dial = Twilio::TwiML::Dial.new
458
- dial.conference(
459
- 'TestConferenceAttributes',
460
- beep: false,
461
- wait_url: '',
462
- start_conference_on_enter: true,
463
- end_conference_on_exit: true
464
- )
465
-
466
- response = Twilio::TwiML::VoiceResponse.new
467
- response.append(dial)
468
- doc = parse(response)
469
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
470
- end
471
-
472
- it 'should allow muted conferencing' do
473
- expected_doc = parse <<-XML
474
- <Response>
475
- <Dial>
476
- <Conference beep="false" waitUrl="" startConferenceOnEnter="true" endConferenceOnExit="true" muted="true">
477
- TestConferenceMutedAttribute
478
- </Conference>
479
- </Dial>
480
- </Response>
481
- XML
482
- dial = Twilio::TwiML::Dial.new
483
- dial.conference(
484
- 'TestConferenceMutedAttribute',
485
- beep: false,
486
- muted: true,
487
- wait_url: '',
488
- start_conference_on_enter: true,
489
- end_conference_on_exit: true
490
- )
491
-
492
- response = Twilio::TwiML::VoiceResponse.new
493
- response.append(dial)
494
- doc = parse(response)
495
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
496
- end
497
- end
498
-
499
- context 'Testing Queue' do
500
- it 'should allow queues in VoiceResponse' do
501
- expected_doc = parse <<-XML
502
- <Response>
503
- <Dial>
504
- <Queue url="" method="GET">TestQueueAttribute</Queue>
505
- </Dial>
506
- </Response>
507
- XML
508
- dial = Twilio::TwiML::Dial.new
509
- dial.queue('TestQueueAttribute', url: '', method: 'GET')
510
-
511
- response = Twilio::TwiML::VoiceResponse.new
512
- response.append(dial)
513
- doc = parse(response)
514
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
515
- end
516
- end
517
-
518
- context 'Testing Echo' do
519
- it 'should allow VoiceResponse Echo' do
520
- expected_doc = parse <<-XML
521
- <Response>
522
- <Echo/>
523
- </Response>
524
- XML
525
- response = Twilio::TwiML::VoiceResponse.new
526
- response.echo
527
- doc = parse(response)
528
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
529
- end
530
- end
531
-
532
- context 'Testing Enqueue' do
533
- it 'should allow VoiceResponse.enqueue' do
534
- expected_doc = parse <<-XML
535
- <Response>
536
- <Enqueue action="act" method="GET" waitUrl="wait" waitUrlMethod="POST">TestEnqueueAttribute</Enqueue>
537
- </Response>
538
- XML
539
- response = Twilio::TwiML::VoiceResponse.new
540
- response.enqueue(
541
- name: 'TestEnqueueAttribute',
542
- action: 'act',
543
- method: 'GET',
544
- wait_url: 'wait',
545
- wait_url_method: 'POST'
546
- )
547
- doc = parse(response)
548
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
549
- end
550
-
551
- it 'should allow Enqueue.task and appending Enqueue' do
552
- task_json = '{"account_sid": "AC123123123"}'
553
- expected_doc = parse <<-XML
554
- <Response>
555
- <Enqueue workflowSid="123123123">
556
- <Task>#{task_json}</Task>
557
- </Enqueue>
558
- </Response>
559
- XML
560
- enqueue_elem = Twilio::TwiML::Enqueue.new(name: nil, workflow_sid: '123123123')
561
- enqueue_elem.task(task_json)
562
-
563
- response = Twilio::TwiML::VoiceResponse.new
564
- response.append(enqueue_elem)
565
- doc = parse(response)
566
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
567
- end
568
-
569
- it 'should allow Enqueue.task with a dictionary and appending Enqueue' do
570
- expected_doc = parse <<-XML
571
- <Response>
572
- <Enqueue workflowSid="123123123">
573
- <Task>{"account_sid":"AC123123123"}</Task>
574
- </Enqueue>
575
- </Response>
576
- XML
577
- enqueue_elem = Twilio::TwiML::Enqueue.new(name: nil, workflow_sid: '123123123')
578
- enqueue_elem.task({ account_sid: 'AC123123123' })
579
-
580
- response = Twilio::TwiML::VoiceResponse.new
581
- response.append(enqueue_elem)
582
-
583
- doc = parse(response)
584
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
585
- end
586
- end
587
-
588
- context 'Testing Dial' do
589
- it 'should allow VoiceResponse.dial' do
590
- expected_doc = parse <<-XML
591
- <Response>
592
- <Dial>1231231234</Dial>
593
- </Response>
594
- XML
595
- response = Twilio::TwiML::VoiceResponse.new
596
- response.dial(number: '1231231234')
597
- doc = parse(response)
598
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
599
- end
600
-
601
- it 'should allow Dial.sim' do
602
- expected_doc = parse <<-XML
603
- <Response>
604
- <Dial>
605
- <Sim>123123123</Sim>
606
- </Dial>
607
- </Response>
608
- XML
609
- dial = Twilio::TwiML::Dial.new
610
- dial.sim '123123123'
611
-
612
- response = Twilio::TwiML::VoiceResponse.new
613
- response.append(dial)
614
-
615
- doc = parse(response)
616
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
617
- end
618
-
619
- it 'should allow Dial.sip' do
620
- expected_doc = parse <<-XML
621
- <Response>
622
- <Dial>
623
- <Sip>foo@example.com</Sip>
624
- </Dial>
625
- </Response>
626
- XML
627
- dial = Twilio::TwiML::Dial.new
628
- dial.sip 'foo@example.com'
629
-
630
- response = Twilio::TwiML::VoiceResponse.new
631
- response.append(dial)
632
- doc = parse(response)
633
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
634
- end
635
-
636
- it 'should allow Dial.sip with username, password' do
637
- expected_doc = parse <<-XML
638
- <Response>
639
- <Dial>
640
- <Sip username="foo" password="bar">foo@example.com</Sip>
641
- </Dial>
642
- </Response>
643
- XML
644
- dial = Twilio::TwiML::Dial.new
645
- dial.sip('foo@example.com', username: 'foo', password: 'bar')
646
-
647
- response = Twilio::TwiML::VoiceResponse.new
648
- response.append(dial)
649
- doc = parse(response)
650
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
651
- end
652
-
653
- it 'should allow Dial.number' do
654
- expected_doc = parse <<-XML
655
- <Response>
656
- <Dial>
657
- <Number>1231231234</Number>
658
- </Dial>
659
- </Response>
660
- XML
661
- dial = Twilio::TwiML::Dial.new
662
- dial.number '1231231234'
663
-
664
- response = Twilio::TwiML::VoiceResponse.new
665
- response.append(dial)
666
- doc = parse(response)
667
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
668
- end
669
-
670
- it 'should allow Dial.number with params' do
671
- expected_doc = parse <<-XML
672
- <Response>
673
- <Dial>
674
- <Number statusCallback="http://example.com" statusCallbackEvent="initiated completed">1231231234</Number>
675
- </Dial>
676
- </Response>
677
- XML
678
- dial = Twilio::TwiML::Dial.new
679
- dial.number('1231231234', status_callback: 'http://example.com', status_callback_event: 'initiated completed')
680
-
681
- response = Twilio::TwiML::VoiceResponse.new
682
- response.append(dial)
683
- doc = parse(response)
684
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
685
- end
686
-
687
- it 'should allow Dial.conference' do
688
- expected_doc = parse <<-XML
689
- <Response>
690
- <Dial>
691
- <Conference>My Room</Conference>
692
- </Dial>
693
- </Response>
694
- XML
695
- dial = Twilio::TwiML::Dial.new
696
- dial.conference 'My Room'
697
-
698
- response = Twilio::TwiML::VoiceResponse.new
699
- response.append(dial)
700
- doc = parse(response)
701
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
702
- end
703
-
704
- it 'should allow Dial.queue' do
705
- expected_doc = parse <<-XML
706
- <Response>
707
- <Dial>
708
- <Queue>The Cute Queue</Queue>
709
- </Dial>
710
- </Response>
711
- XML
712
- dial = Twilio::TwiML::Dial.new
713
- dial.queue 'The Cute Queue'
714
-
715
- response = Twilio::TwiML::VoiceResponse.new
716
- response.append(dial)
717
- doc = parse(response)
718
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
719
- end
720
-
721
- it 'should allow empty Dial.client' do
722
- expected_doc = parse <<-XML
723
- <Response>
724
- <Dial>
725
- <Client></Client>
726
- </Dial>
727
- </Response>
728
- XML
729
- dial = Twilio::TwiML::Dial.new
730
- dial.client
731
-
732
- response = Twilio::TwiML::VoiceResponse.new
733
- response.append(dial)
734
- doc = parse(response)
735
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
736
- end
737
-
738
- it 'should allow populated Dial.client' do
739
- expected_doc = parse <<-XML
740
- <Response>
741
- <Dial>
742
- <Client>alice</Client>
743
- </Dial>
744
- </Response>
745
- XML
746
- dial = Twilio::TwiML::Dial.new
747
- dial.client identity: 'alice'
748
-
749
- response = Twilio::TwiML::VoiceResponse.new
750
- response.append(dial)
751
- doc = parse(response)
752
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
753
- end
754
-
755
- it 'should allow client identity and parameters' do
756
- expected_doc = parse <<-XML
757
- <Response>
758
- <Dial>
759
- <Client>
760
- <Identity>alice</Identity>
761
- <Parameter name="hello" value="world"/>
762
- </Client>
763
- </Dial>
764
- </Response>
765
- XML
766
- dial = Twilio::TwiML::Dial.new
767
- client = Twilio::TwiML::Client.new
768
- client.identity 'alice'
769
- client.parameter name: 'hello', value: 'world'
770
-
771
- response = Twilio::TwiML::VoiceResponse.new
772
- dial.append(client)
773
- response.append(dial)
774
- doc = parse(response)
775
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
776
- end
777
- end
778
-
779
- context 'Testing Gather' do
780
- it 'should allow empty Gather' do
781
- expected_doc = parse <<-XML
782
- <Response>
783
- <Gather></Gather>
784
- </Response>
785
- XML
786
- response = Twilio::TwiML::VoiceResponse.new
787
- response.gather
788
- doc = parse(response)
789
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
790
- end
791
-
792
- it 'should allow nested Say in Gather' do
793
- expected_doc = parse <<-XML
794
- <Response>
795
- <Gather>
796
- <Say>Hello</Say>
797
- </Gather>
798
- </Response>
799
- XML
800
- gather_elem = Twilio::TwiML::Gather.new
801
- gather_elem.say(message: 'Hello')
802
-
803
- response = Twilio::TwiML::VoiceResponse.new
804
- response.append(gather_elem)
805
- doc = parse(response)
806
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
807
- end
808
-
809
- it 'should allow nested play and pause' do
810
- expected_doc = parse <<-XML
811
- <Response>
812
- <Gather>
813
- <Say>Hey</Say>
814
- <Play>hey.mp3</Play>
815
- <Pause/>
816
- </Gather>
817
- </Response>
818
- XML
819
- gather = Twilio::TwiML::Gather.new
820
- gather.say(message: 'Hey')
821
- gather.play(url: 'hey.mp3')
822
- gather.pause
823
-
824
- response = Twilio::TwiML::VoiceResponse.new
825
- response.append(gather)
826
- doc = parse(response)
827
- expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
828
- end
829
-
830
- it 'should render ssml attributes correctly' do
831
- expected_doc = parse <<-XML
832
- <Response>
833
- <Say>
834
- <say-as interpret-as="spell-out">Twilio</say-as>
835
- </Say>
836
- </Response>
837
- XML
838
-
839
- response = Twilio::TwiML::VoiceResponse.new
840
- response.say do |s|
841
- s.say_as('Twilio', interpretAs: 'spell-out')
842
- end
843
-
844
- expect(parse(response)).to be_equivalent_to(expected_doc).respecting_element_order
845
- end
846
- end
847
- end