twilio-ruby 5.6.0 → 5.33.0

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 (846) hide show
  1. checksums.yaml +5 -5
  2. data/.dockerignore +1 -0
  3. data/.gitignore +3 -0
  4. data/.rubocop.yml +14 -3
  5. data/.rubocop_todo.yml +87 -55
  6. data/.travis.yml +25 -10
  7. data/CHANGES.md +1134 -0
  8. data/CODE_OF_CONDUCT.md +73 -0
  9. data/CONTRIBUTING.md +2 -0
  10. data/Dockerfile +9 -0
  11. data/Gemfile +0 -8
  12. data/ISSUE_TEMPLATE.md +13 -13
  13. data/LICENSE.md +2 -2
  14. data/Makefile +17 -13
  15. data/PULL_REQUEST_TEMPLATE.md +31 -0
  16. data/README.md +59 -52
  17. data/Rakefile +0 -54
  18. data/VERSIONS.md +9 -10
  19. data/examples/print_call_log.rb +1 -1
  20. data/githooks/pre-commit +0 -0
  21. data/lib/rack/twilio_webhook_authentication.rb +2 -0
  22. data/lib/twilio-ruby/framework/domain.rb +3 -1
  23. data/lib/twilio-ruby/framework/error.rb +33 -15
  24. data/lib/twilio-ruby/framework/helper.rb +2 -0
  25. data/lib/twilio-ruby/framework/obsolete_client.rb +2 -0
  26. data/lib/twilio-ruby/framework/page.rb +3 -1
  27. data/lib/twilio-ruby/framework/request.rb +2 -0
  28. data/lib/twilio-ruby/framework/resource.rb +2 -0
  29. data/lib/twilio-ruby/framework/response.rb +2 -0
  30. data/lib/twilio-ruby/framework/serialize.rb +2 -0
  31. data/lib/twilio-ruby/framework/twilio_response.rb +2 -0
  32. data/lib/twilio-ruby/framework/values.rb +2 -0
  33. data/lib/twilio-ruby/framework/version.rb +3 -10
  34. data/lib/twilio-ruby/http/http_client.rb +17 -12
  35. data/lib/twilio-ruby/jwt/access_token.rb +5 -1
  36. data/lib/twilio-ruby/jwt/client_capability.rb +3 -1
  37. data/lib/twilio-ruby/jwt/jwt.rb +2 -0
  38. data/lib/twilio-ruby/jwt/task_router.rb +4 -2
  39. data/lib/twilio-ruby/rest/accounts/v1/credential/aws.rb +44 -26
  40. data/lib/twilio-ruby/rest/accounts/v1/credential/public_key.rb +43 -32
  41. data/lib/twilio-ruby/rest/accounts/v1/credential.rb +11 -8
  42. data/lib/twilio-ruby/rest/accounts/v1.rb +2 -0
  43. data/lib/twilio-ruby/rest/accounts.rb +2 -0
  44. data/lib/twilio-ruby/rest/api/v2010/account/address/dependent_phone_number.rb +40 -32
  45. data/lib/twilio-ruby/rest/api/v2010/account/address.rb +111 -63
  46. data/lib/twilio-ruby/rest/api/v2010/account/application.rb +167 -147
  47. data/lib/twilio-ruby/rest/api/v2010/account/authorized_connect_app.rb +34 -21
  48. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/local.rb +177 -80
  49. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/machine_to_machine.rb +177 -80
  50. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/mobile.rb +177 -80
  51. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/national.rb +177 -80
  52. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/shared_cost.rb +177 -80
  53. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/toll_free.rb +177 -80
  54. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number/voip.rb +177 -80
  55. data/lib/twilio-ruby/rest/api/v2010/account/available_phone_number.rb +27 -12
  56. data/lib/twilio-ruby/rest/api/v2010/account/balance.rb +131 -0
  57. data/lib/twilio-ruby/rest/api/v2010/account/call/feedback.rb +58 -25
  58. data/lib/twilio-ruby/rest/api/v2010/account/call/feedback_summary.rb +54 -33
  59. data/lib/twilio-ruby/rest/api/v2010/account/call/notification.rb +70 -55
  60. data/lib/twilio-ruby/rest/api/v2010/account/call/payment.rb +359 -0
  61. data/lib/twilio-ruby/rest/api/v2010/account/call/recording.rb +163 -37
  62. data/lib/twilio-ruby/rest/api/v2010/account/call.rb +340 -167
  63. data/lib/twilio-ruby/rest/api/v2010/account/conference/participant.rb +272 -91
  64. data/lib/twilio-ruby/rest/api/v2010/account/conference/recording.rb +481 -0
  65. data/lib/twilio-ruby/rest/api/v2010/account/conference.rb +134 -61
  66. data/lib/twilio-ruby/rest/api/v2010/account/connect_app.rb +92 -53
  67. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/assigned_add_on/assigned_add_on_extension.rb +45 -28
  68. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/assigned_add_on.rb +46 -32
  69. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/local.rb +156 -66
  70. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/mobile.rb +155 -66
  71. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number/toll_free.rb +155 -66
  72. data/lib/twilio-ruby/rest/api/v2010/account/incoming_phone_number.rb +291 -229
  73. data/lib/twilio-ruby/rest/api/v2010/account/key.rb +36 -21
  74. data/lib/twilio-ruby/rest/api/v2010/account/message/feedback.rb +22 -12
  75. data/lib/twilio-ruby/rest/api/v2010/account/message/media.rb +45 -29
  76. data/lib/twilio-ruby/rest/api/v2010/account/message.rb +137 -68
  77. data/lib/twilio-ruby/rest/api/v2010/account/new_key.rb +12 -9
  78. data/lib/twilio-ruby/rest/api/v2010/account/new_signing_key.rb +12 -9
  79. data/lib/twilio-ruby/rest/api/v2010/account/notification.rb +53 -41
  80. data/lib/twilio-ruby/rest/api/v2010/account/outgoing_caller_id.rb +54 -39
  81. data/lib/twilio-ruby/rest/api/v2010/account/queue/member.rb +52 -23
  82. data/lib/twilio-ruby/rest/api/v2010/account/queue.rb +61 -37
  83. data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result/payload.rb +49 -32
  84. data/lib/twilio-ruby/rest/api/v2010/account/recording/add_on_result.rb +43 -27
  85. data/lib/twilio-ruby/rest/api/v2010/account/recording/transcription.rb +49 -26
  86. data/lib/twilio-ruby/rest/api/v2010/account/recording.rb +91 -50
  87. data/lib/twilio-ruby/rest/api/v2010/account/short_code.rb +81 -59
  88. data/lib/twilio-ruby/rest/api/v2010/account/signing_key.rb +31 -12
  89. data/lib/twilio-ruby/rest/api/v2010/account/sip/credential_list/credential.rb +50 -27
  90. data/lib/twilio-ruby/rest/api/v2010/account/sip/credential_list.rb +36 -21
  91. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/auth_types/auth_calls_mapping/auth_calls_credential_list_mapping.rb +361 -0
  92. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/auth_types/auth_calls_mapping/auth_calls_ip_access_control_list_mapping.rb +361 -0
  93. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/auth_types/auth_calls_mapping.rb +163 -0
  94. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/auth_types/auth_registrations_mapping/auth_registrations_credential_list_mapping.rb +361 -0
  95. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/auth_types/auth_registrations_mapping.rb +137 -0
  96. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/auth_types.rb +135 -0
  97. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/credential_list_mapping.rb +41 -24
  98. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain/ip_access_control_list_mapping.rb +40 -24
  99. data/lib/twilio-ruby/rest/api/v2010/account/sip/domain.rb +169 -73
  100. data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list/ip_address.rb +87 -32
  101. data/lib/twilio-ruby/rest/api/v2010/account/sip/ip_access_control_list.rb +32 -21
  102. data/lib/twilio-ruby/rest/api/v2010/account/sip.rb +15 -11
  103. data/lib/twilio-ruby/rest/api/v2010/account/token.rb +16 -12
  104. data/lib/twilio-ruby/rest/api/v2010/account/transcription.rb +41 -26
  105. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/all_time.rb +79 -28
  106. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/daily.rb +79 -28
  107. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/last_month.rb +79 -28
  108. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/monthly.rb +79 -28
  109. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/this_month.rb +79 -28
  110. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/today.rb +79 -28
  111. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yearly.rb +79 -28
  112. data/lib/twilio-ruby/rest/api/v2010/account/usage/record/yesterday.rb +79 -28
  113. data/lib/twilio-ruby/rest/api/v2010/account/usage/record.rb +82 -49
  114. data/lib/twilio-ruby/rest/api/v2010/account/usage/trigger.rb +103 -74
  115. data/lib/twilio-ruby/rest/api/v2010/account/usage.rb +8 -5
  116. data/lib/twilio-ruby/rest/api/v2010/account/validation_request.rb +31 -15
  117. data/lib/twilio-ruby/rest/api/v2010/account.rb +104 -65
  118. data/lib/twilio-ruby/rest/api/v2010.rb +6 -0
  119. data/lib/twilio-ruby/rest/api.rb +39 -26
  120. data/lib/twilio-ruby/rest/authy/v1/form.rb +197 -0
  121. data/lib/twilio-ruby/rest/{preview/proxy/service/session/participant/message_interaction.rb → authy/v1/service/entity/factor/challenge.rb} +204 -163
  122. data/lib/twilio-ruby/rest/{preview/proxy/service/session/participant.rb → authy/v1/service/entity/factor.rb} +196 -208
  123. data/lib/twilio-ruby/rest/{preview/proxy/service/short_code.rb → authy/v1/service/entity.rb} +122 -83
  124. data/lib/twilio-ruby/rest/{preview/acc_security → authy/v1}/service.rb +97 -79
  125. data/lib/twilio-ruby/rest/authy/v1.rb +59 -0
  126. data/lib/twilio-ruby/rest/authy.rb +55 -0
  127. data/lib/twilio-ruby/rest/autopilot/v1/assistant/defaults.rb +230 -0
  128. data/lib/twilio-ruby/rest/autopilot/v1/assistant/dialogue.rb +220 -0
  129. data/lib/twilio-ruby/rest/autopilot/v1/assistant/export_assistant.rb +222 -0
  130. data/lib/twilio-ruby/rest/autopilot/v1/assistant/field_type/field_value.rb +408 -0
  131. data/lib/twilio-ruby/rest/autopilot/v1/assistant/field_type.rb +435 -0
  132. data/lib/twilio-ruby/rest/autopilot/v1/assistant/model_build.rb +409 -0
  133. data/lib/twilio-ruby/rest/autopilot/v1/assistant/query.rb +470 -0
  134. data/lib/twilio-ruby/rest/autopilot/v1/assistant/style_sheet.rb +228 -0
  135. data/lib/twilio-ruby/rest/autopilot/v1/assistant/task/field.rb +399 -0
  136. data/lib/twilio-ruby/rest/autopilot/v1/assistant/task/sample.rb +466 -0
  137. data/lib/twilio-ruby/rest/autopilot/v1/assistant/task/task_actions.rb +265 -0
  138. data/lib/twilio-ruby/rest/autopilot/v1/assistant/task/task_statistics.rb +243 -0
  139. data/lib/twilio-ruby/rest/autopilot/v1/assistant/task.rb +524 -0
  140. data/lib/twilio-ruby/rest/autopilot/v1/assistant/webhook.rb +437 -0
  141. data/lib/twilio-ruby/rest/autopilot/v1/assistant.rb +683 -0
  142. data/lib/twilio-ruby/rest/autopilot/v1.rb +44 -0
  143. data/lib/twilio-ruby/rest/autopilot.rb +47 -0
  144. data/lib/twilio-ruby/rest/bulkexports/v1/export/day.rb +316 -0
  145. data/lib/twilio-ruby/rest/bulkexports/v1/export/export_custom_job.rb +298 -0
  146. data/lib/twilio-ruby/rest/bulkexports/v1/export/job.rb +253 -0
  147. data/lib/twilio-ruby/rest/bulkexports/v1/export.rb +254 -0
  148. data/lib/twilio-ruby/rest/bulkexports/v1/export_configuration.rb +242 -0
  149. data/lib/twilio-ruby/rest/bulkexports/v1.rb +58 -0
  150. data/lib/twilio-ruby/rest/bulkexports.rb +54 -0
  151. data/lib/twilio-ruby/rest/chat/v1/credential.rb +88 -40
  152. data/lib/twilio-ruby/rest/chat/v1/service/channel/invite.rb +70 -29
  153. data/lib/twilio-ruby/rest/chat/v1/service/channel/member.rb +87 -35
  154. data/lib/twilio-ruby/rest/chat/v1/service/channel/message.rb +76 -39
  155. data/lib/twilio-ruby/rest/chat/v1/service/channel.rb +83 -47
  156. data/lib/twilio-ruby/rest/chat/v1/service/role.rb +61 -32
  157. data/lib/twilio-ruby/rest/chat/v1/service/user/user_channel.rb +22 -14
  158. data/lib/twilio-ruby/rest/chat/v1/service/user.rb +72 -41
  159. data/lib/twilio-ruby/rest/chat/v1/service.rb +342 -312
  160. data/lib/twilio-ruby/rest/chat/v1.rb +6 -2
  161. data/lib/twilio-ruby/rest/chat/v2/credential.rb +86 -40
  162. data/lib/twilio-ruby/rest/chat/v2/service/binding.rb +74 -33
  163. data/lib/twilio-ruby/rest/chat/v2/service/channel/invite.rb +65 -29
  164. data/lib/twilio-ruby/rest/chat/v2/service/channel/member.rb +144 -46
  165. data/lib/twilio-ruby/rest/chat/v2/service/channel/message.rb +118 -51
  166. data/lib/twilio-ruby/rest/chat/v2/service/channel/webhook.rb +492 -0
  167. data/lib/twilio-ruby/rest/chat/v2/service/channel.rb +144 -55
  168. data/lib/twilio-ruby/rest/chat/v2/service/role.rb +63 -32
  169. data/lib/twilio-ruby/rest/chat/v2/service/user/user_binding.rb +68 -29
  170. data/lib/twilio-ruby/rest/chat/v2/service/user/user_channel.rb +213 -17
  171. data/lib/twilio-ruby/rest/chat/v2/service/user.rb +83 -44
  172. data/lib/twilio-ruby/rest/chat/v2/service.rb +238 -136
  173. data/lib/twilio-ruby/rest/chat/v2.rb +4 -2
  174. data/lib/twilio-ruby/rest/chat.rb +6 -2
  175. data/lib/twilio-ruby/rest/client.rb +142 -36
  176. data/lib/twilio-ruby/rest/conversations/v1/conversation/message.rb +456 -0
  177. data/lib/twilio-ruby/rest/conversations/v1/conversation/participant.rb +431 -0
  178. data/lib/twilio-ruby/rest/conversations/v1/conversation/webhook.rb +432 -0
  179. data/lib/twilio-ruby/rest/conversations/v1/conversation.rb +505 -0
  180. data/lib/twilio-ruby/rest/conversations/v1/webhook.rb +272 -0
  181. data/lib/twilio-ruby/rest/conversations/v1.rb +51 -0
  182. data/lib/twilio-ruby/rest/conversations.rb +53 -0
  183. data/lib/twilio-ruby/rest/fax/v1/fax/fax_media.rb +34 -25
  184. data/lib/twilio-ruby/rest/fax/v1/fax.rb +114 -84
  185. data/lib/twilio-ruby/rest/fax/v1.rb +4 -1
  186. data/lib/twilio-ruby/rest/fax.rb +4 -1
  187. data/lib/twilio-ruby/rest/flex_api/v1/channel.rb +352 -0
  188. data/lib/twilio-ruby/rest/flex_api/v1/configuration.rb +466 -0
  189. data/lib/twilio-ruby/rest/flex_api/v1/flex_flow.rb +555 -0
  190. data/lib/twilio-ruby/rest/flex_api/v1/web_channel.rb +358 -0
  191. data/lib/twilio-ruby/rest/flex_api/v1.rb +80 -0
  192. data/lib/twilio-ruby/rest/flex_api.rb +71 -0
  193. data/lib/twilio-ruby/rest/{notify/v1/service/segment.rb → insights/v1/call/event.rb} +103 -62
  194. data/lib/twilio-ruby/rest/insights/v1/call/metric.rb +254 -0
  195. data/lib/twilio-ruby/rest/insights/v1/call/summary.rb +305 -0
  196. data/lib/twilio-ruby/rest/insights/v1/call.rb +242 -0
  197. data/lib/twilio-ruby/rest/insights/v1.rb +43 -0
  198. data/lib/twilio-ruby/rest/insights.rb +46 -0
  199. data/lib/twilio-ruby/rest/ip_messaging/v1/credential.rb +88 -40
  200. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/invite.rb +70 -29
  201. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/member.rb +87 -35
  202. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel/message.rb +76 -39
  203. data/lib/twilio-ruby/rest/ip_messaging/v1/service/channel.rb +83 -47
  204. data/lib/twilio-ruby/rest/ip_messaging/v1/service/role.rb +61 -32
  205. data/lib/twilio-ruby/rest/ip_messaging/v1/service/user/user_channel.rb +22 -14
  206. data/lib/twilio-ruby/rest/ip_messaging/v1/service/user.rb +72 -41
  207. data/lib/twilio-ruby/rest/ip_messaging/v1/service.rb +342 -312
  208. data/lib/twilio-ruby/rest/ip_messaging/v1.rb +6 -2
  209. data/lib/twilio-ruby/rest/ip_messaging/v2/credential.rb +86 -40
  210. data/lib/twilio-ruby/rest/ip_messaging/v2/service/binding.rb +74 -33
  211. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/invite.rb +65 -29
  212. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/member.rb +144 -46
  213. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/message.rb +118 -51
  214. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel/webhook.rb +492 -0
  215. data/lib/twilio-ruby/rest/ip_messaging/v2/service/channel.rb +144 -55
  216. data/lib/twilio-ruby/rest/ip_messaging/v2/service/role.rb +63 -32
  217. data/lib/twilio-ruby/rest/ip_messaging/v2/service/user/user_binding.rb +68 -29
  218. data/lib/twilio-ruby/rest/ip_messaging/v2/service/user/user_channel.rb +213 -17
  219. data/lib/twilio-ruby/rest/ip_messaging/v2/service/user.rb +83 -44
  220. data/lib/twilio-ruby/rest/ip_messaging/v2/service.rb +238 -136
  221. data/lib/twilio-ruby/rest/ip_messaging/v2.rb +4 -2
  222. data/lib/twilio-ruby/rest/ip_messaging.rb +8 -4
  223. data/lib/twilio-ruby/rest/lookups/v1/phone_number.rb +63 -24
  224. data/lib/twilio-ruby/rest/lookups/v1.rb +5 -1
  225. data/lib/twilio-ruby/rest/lookups.rb +5 -1
  226. data/lib/twilio-ruby/rest/messaging/v1/service/alpha_sender.rb +47 -25
  227. data/lib/twilio-ruby/rest/messaging/v1/service/phone_number.rb +47 -26
  228. data/lib/twilio-ruby/rest/messaging/v1/service/short_code.rb +42 -26
  229. data/lib/twilio-ruby/rest/messaging/v1/service.rb +150 -84
  230. data/lib/twilio-ruby/rest/messaging/v1.rb +3 -1
  231. data/lib/twilio-ruby/rest/messaging.rb +4 -1
  232. data/lib/twilio-ruby/rest/monitor/v1/alert.rb +74 -50
  233. data/lib/twilio-ruby/rest/monitor/v1/event.rb +78 -42
  234. data/lib/twilio-ruby/rest/monitor/v1.rb +4 -2
  235. data/lib/twilio-ruby/rest/monitor.rb +6 -2
  236. data/lib/twilio-ruby/rest/notify/v1/credential.rb +79 -40
  237. data/lib/twilio-ruby/rest/notify/v1/service/binding.rb +100 -47
  238. data/lib/twilio-ruby/rest/notify/v1/service/notification.rb +118 -42
  239. data/lib/twilio-ruby/rest/notify/v1/service.rb +158 -132
  240. data/lib/twilio-ruby/rest/notify/v1.rb +6 -2
  241. data/lib/twilio-ruby/rest/notify.rb +6 -2
  242. data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/bundle/item_assignment.rb +333 -0
  243. data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/bundle.rb +482 -0
  244. data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/end_user.rb +361 -0
  245. data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/end_user_type.rb +281 -0
  246. data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/regulation.rb +322 -0
  247. data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/supporting_document.rb +374 -0
  248. data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance/supporting_document_type.rb +281 -0
  249. data/lib/twilio-ruby/rest/numbers/v2/regulatory_compliance.rb +189 -0
  250. data/lib/twilio-ruby/rest/numbers/v2.rb +35 -0
  251. data/lib/twilio-ruby/rest/numbers.rb +44 -0
  252. data/lib/twilio-ruby/rest/preview/bulk_exports/export/day.rb +122 -15
  253. data/lib/twilio-ruby/rest/preview/bulk_exports/export/export_custom_job.rb +298 -0
  254. data/lib/twilio-ruby/rest/preview/bulk_exports/export/job.rb +253 -0
  255. data/lib/twilio-ruby/rest/preview/bulk_exports/export.rb +66 -13
  256. data/lib/twilio-ruby/rest/preview/bulk_exports/export_configuration.rb +37 -20
  257. data/lib/twilio-ruby/rest/preview/bulk_exports.rb +4 -2
  258. data/lib/twilio-ruby/rest/preview/deployed_devices/fleet/certificate.rb +22 -13
  259. data/lib/twilio-ruby/rest/preview/deployed_devices/fleet/deployment.rb +23 -14
  260. data/lib/twilio-ruby/rest/preview/deployed_devices/fleet/device.rb +20 -11
  261. data/lib/twilio-ruby/rest/preview/deployed_devices/fleet/key.rb +23 -14
  262. data/lib/twilio-ruby/rest/preview/deployed_devices/fleet.rb +30 -21
  263. data/lib/twilio-ruby/rest/preview/deployed_devices.rb +2 -0
  264. data/lib/twilio-ruby/rest/preview/hosted_numbers/authorization_document/dependent_hosted_number_order.rb +402 -0
  265. data/lib/twilio-ruby/rest/preview/hosted_numbers/authorization_document.rb +97 -35
  266. data/lib/twilio-ruby/rest/preview/hosted_numbers/hosted_number_order.rb +97 -36
  267. data/lib/twilio-ruby/rest/preview/hosted_numbers.rb +2 -0
  268. data/lib/twilio-ruby/rest/preview/marketplace/available_add_on/available_add_on_extension.rb +27 -15
  269. data/lib/twilio-ruby/rest/preview/marketplace/available_add_on.rb +27 -20
  270. data/lib/twilio-ruby/rest/preview/marketplace/installed_add_on/installed_add_on_extension.rb +32 -20
  271. data/lib/twilio-ruby/rest/preview/marketplace/installed_add_on.rb +52 -44
  272. data/lib/twilio-ruby/rest/preview/marketplace.rb +4 -4
  273. data/lib/twilio-ruby/rest/preview/sync/service/document/document_permission.rb +16 -7
  274. data/lib/twilio-ruby/rest/preview/sync/service/document.rb +24 -15
  275. data/lib/twilio-ruby/rest/preview/sync/service/sync_list/sync_list_item.rb +17 -8
  276. data/lib/twilio-ruby/rest/preview/sync/service/sync_list/sync_list_permission.rb +16 -7
  277. data/lib/twilio-ruby/rest/preview/sync/service/sync_list.rb +22 -13
  278. data/lib/twilio-ruby/rest/preview/sync/service/sync_map/sync_map_item.rb +18 -9
  279. data/lib/twilio-ruby/rest/preview/sync/service/sync_map/sync_map_permission.rb +16 -7
  280. data/lib/twilio-ruby/rest/preview/sync/service/sync_map.rb +22 -13
  281. data/lib/twilio-ruby/rest/preview/sync/service.rb +26 -17
  282. data/lib/twilio-ruby/rest/preview/sync.rb +2 -0
  283. data/lib/twilio-ruby/rest/preview/trusted_comms/branded_call.rb +248 -0
  284. data/lib/twilio-ruby/rest/preview/trusted_comms/business/insights/impressions_rate.rb +264 -0
  285. data/lib/twilio-ruby/rest/preview/trusted_comms/business/insights.rb +111 -0
  286. data/lib/twilio-ruby/rest/preview/trusted_comms/business.rb +219 -0
  287. data/lib/twilio-ruby/rest/preview/trusted_comms/cps.rb +186 -0
  288. data/lib/twilio-ruby/rest/preview/trusted_comms/current_call.rb +263 -0
  289. data/lib/twilio-ruby/rest/preview/trusted_comms/phone_call.rb +347 -0
  290. data/lib/twilio-ruby/rest/preview/trusted_comms.rb +72 -0
  291. data/lib/twilio-ruby/rest/preview/understand/assistant/assistant_fallback_actions.rb +222 -0
  292. data/lib/twilio-ruby/rest/preview/understand/assistant/assistant_initiation_actions.rb +222 -0
  293. data/lib/twilio-ruby/rest/preview/understand/assistant/dialogue.rb +212 -0
  294. data/lib/twilio-ruby/rest/preview/understand/{service → assistant}/field_type/field_value.rb +64 -40
  295. data/lib/twilio-ruby/rest/preview/understand/{service → assistant}/field_type.rb +67 -42
  296. data/lib/twilio-ruby/rest/preview/understand/{service → assistant}/model_build.rb +76 -37
  297. data/lib/twilio-ruby/rest/preview/understand/{service → assistant}/query.rb +92 -60
  298. data/lib/twilio-ruby/rest/preview/understand/assistant/style_sheet.rb +222 -0
  299. data/lib/twilio-ruby/rest/preview/understand/{service/intent → assistant/task}/field.rb +63 -48
  300. data/lib/twilio-ruby/rest/preview/understand/{service/intent → assistant/task}/sample.rb +100 -62
  301. data/lib/twilio-ruby/rest/preview/understand/assistant/task/task_actions.rb +251 -0
  302. data/lib/twilio-ruby/rest/preview/understand/assistant/task/task_statistics.rb +231 -0
  303. data/lib/twilio-ruby/rest/preview/understand/assistant/task.rb +512 -0
  304. data/lib/twilio-ruby/rest/preview/understand/assistant.rb +646 -0
  305. data/lib/twilio-ruby/rest/preview/understand.rb +10 -7
  306. data/lib/twilio-ruby/rest/preview/wireless/command.rb +16 -7
  307. data/lib/twilio-ruby/rest/preview/wireless/rate_plan.rb +22 -13
  308. data/lib/twilio-ruby/rest/preview/wireless/sim/usage.rb +16 -7
  309. data/lib/twilio-ruby/rest/preview/wireless/sim.rb +17 -8
  310. data/lib/twilio-ruby/rest/preview/wireless.rb +2 -0
  311. data/lib/twilio-ruby/rest/preview.rb +58 -34
  312. data/lib/twilio-ruby/rest/pricing/v1/messaging/country.rb +29 -16
  313. data/lib/twilio-ruby/rest/pricing/v1/messaging.rb +9 -5
  314. data/lib/twilio-ruby/rest/pricing/v1/phone_number/country.rb +28 -15
  315. data/lib/twilio-ruby/rest/pricing/v1/phone_number.rb +9 -5
  316. data/lib/twilio-ruby/rest/pricing/v1/voice/country.rb +29 -16
  317. data/lib/twilio-ruby/rest/pricing/v1/voice/number.rb +24 -15
  318. data/lib/twilio-ruby/rest/pricing/v1/voice.rb +12 -8
  319. data/lib/twilio-ruby/rest/pricing/v1.rb +2 -0
  320. data/lib/twilio-ruby/rest/pricing/v2/voice/country.rb +290 -0
  321. data/lib/twilio-ruby/rest/pricing/v2/voice/number.rb +231 -0
  322. data/lib/twilio-ruby/rest/pricing/v2/voice.rb +146 -0
  323. data/lib/twilio-ruby/rest/pricing/v2.rb +35 -0
  324. data/lib/twilio-ruby/rest/pricing.rb +11 -2
  325. data/lib/twilio-ruby/rest/proxy/v1/service/phone_number.rb +106 -32
  326. data/lib/twilio-ruby/rest/proxy/v1/service/session/interaction.rb +55 -79
  327. data/lib/twilio-ruby/rest/proxy/v1/service/session/participant/message_interaction.rb +58 -38
  328. data/lib/twilio-ruby/rest/proxy/v1/service/session/participant.rb +57 -92
  329. data/lib/twilio-ruby/rest/proxy/v1/service/session.rb +88 -101
  330. data/lib/twilio-ruby/rest/proxy/v1/service/short_code.rb +80 -29
  331. data/lib/twilio-ruby/rest/proxy/v1/service.rb +170 -71
  332. data/lib/twilio-ruby/rest/proxy/v1.rb +4 -1
  333. data/lib/twilio-ruby/rest/proxy.rb +4 -1
  334. data/lib/twilio-ruby/rest/serverless/v1/service/asset/asset_version.rb +342 -0
  335. data/lib/twilio-ruby/rest/{preview/understand/service/intent.rb → serverless/v1/service/asset.rb} +132 -149
  336. data/lib/twilio-ruby/rest/{preview/proxy/service/phone_number.rb → serverless/v1/service/build.rb} +130 -101
  337. data/lib/twilio-ruby/rest/serverless/v1/service/environment/deployment.rb +362 -0
  338. data/lib/twilio-ruby/rest/serverless/v1/service/environment/log.rb +395 -0
  339. data/lib/twilio-ruby/rest/serverless/v1/service/environment/variable.rb +424 -0
  340. data/lib/twilio-ruby/rest/serverless/v1/service/environment.rb +469 -0
  341. data/lib/twilio-ruby/rest/serverless/v1/service/function/function_version/function_version_content.rb +247 -0
  342. data/lib/twilio-ruby/rest/serverless/v1/service/function/function_version.rb +372 -0
  343. data/lib/twilio-ruby/rest/serverless/v1/service/function.rb +404 -0
  344. data/lib/twilio-ruby/rest/{preview/understand → serverless/v1}/service.rb +159 -149
  345. data/lib/twilio-ruby/rest/{preview/proxy.rb → serverless/v1.rb} +10 -8
  346. data/lib/twilio-ruby/rest/serverless.rb +47 -0
  347. data/lib/twilio-ruby/rest/studio/v1/flow/engagement/engagement_context.rb +216 -0
  348. data/lib/twilio-ruby/rest/studio/v1/flow/engagement/step/step_context.rb +231 -0
  349. data/lib/twilio-ruby/rest/{preview/studio → studio/v1}/flow/engagement/step.rb +63 -37
  350. data/lib/twilio-ruby/rest/{preview/studio → studio/v1}/flow/engagement.rb +82 -52
  351. data/lib/twilio-ruby/rest/studio/v1/flow/execution/execution_context.rb +217 -0
  352. data/lib/twilio-ruby/rest/studio/v1/flow/execution/execution_step/execution_step_context.rb +234 -0
  353. data/lib/twilio-ruby/rest/studio/v1/flow/execution/execution_step.rb +380 -0
  354. data/lib/twilio-ruby/rest/studio/v1/flow/execution.rb +447 -0
  355. data/lib/twilio-ruby/rest/{preview/studio → studio/v1}/flow.rb +64 -44
  356. data/lib/twilio-ruby/rest/{preview/studio.rb → studio/v1.rb} +10 -8
  357. data/lib/twilio-ruby/rest/studio/v2/flow/execution/execution_context.rb +224 -0
  358. data/lib/twilio-ruby/rest/studio/v2/flow/execution/execution_step/execution_step_context.rb +239 -0
  359. data/lib/twilio-ruby/rest/{notify/v1/service/user/user_binding.rb → studio/v2/flow/execution/execution_step.rb} +126 -170
  360. data/lib/twilio-ruby/rest/{notify/v1/service/user.rb → studio/v2/flow/execution.rb} +167 -159
  361. data/lib/twilio-ruby/rest/studio/v2/flow/flow_revision.rb +343 -0
  362. data/lib/twilio-ruby/rest/studio/v2/flow/test_user.rb +215 -0
  363. data/lib/twilio-ruby/rest/studio/v2/flow.rb +500 -0
  364. data/lib/twilio-ruby/rest/studio/v2/flow_validate.rb +126 -0
  365. data/lib/twilio-ruby/rest/studio/v2.rb +50 -0
  366. data/lib/twilio-ruby/rest/studio.rb +60 -0
  367. data/lib/twilio-ruby/rest/supersim/v1/command.rb +381 -0
  368. data/lib/twilio-ruby/rest/supersim/v1/fleet.rb +390 -0
  369. data/lib/twilio-ruby/rest/supersim/v1/sim.rb +380 -0
  370. data/lib/twilio-ruby/rest/supersim/v1/usage_record.rb +274 -0
  371. data/lib/twilio-ruby/rest/supersim/v1.rb +80 -0
  372. data/lib/twilio-ruby/rest/supersim.rb +70 -0
  373. data/lib/twilio-ruby/rest/sync/v1/service/document/document_permission.rb +56 -42
  374. data/lib/twilio-ruby/rest/sync/v1/service/document.rb +70 -38
  375. data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_item.rb +128 -45
  376. data/lib/twilio-ruby/rest/sync/v1/service/sync_list/sync_list_permission.rb +55 -42
  377. data/lib/twilio-ruby/rest/sync/v1/service/sync_list.rb +79 -39
  378. data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_item.rb +140 -47
  379. data/lib/twilio-ruby/rest/sync/v1/service/sync_map/sync_map_permission.rb +53 -42
  380. data/lib/twilio-ruby/rest/sync/v1/service/sync_map.rb +78 -39
  381. data/lib/twilio-ruby/rest/sync/v1/service/sync_stream/stream_message.rb +18 -10
  382. data/lib/twilio-ruby/rest/sync/v1/service/sync_stream.rb +73 -37
  383. data/lib/twilio-ruby/rest/sync/v1/service.rb +146 -47
  384. data/lib/twilio-ruby/rest/sync/v1.rb +3 -1
  385. data/lib/twilio-ruby/rest/sync.rb +4 -1
  386. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/activity.rb +85 -37
  387. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/event.rb +127 -56
  388. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task/reservation.rb +304 -135
  389. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task.rb +182 -78
  390. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_channel.rb +126 -19
  391. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_cumulative_statistics.rb +79 -39
  392. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_real_time_statistics.rb +63 -23
  393. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queue_statistics.rb +57 -24
  394. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue/task_queues_statistics.rb +61 -27
  395. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/task_queue.rb +124 -62
  396. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/reservation.rb +300 -135
  397. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_channel.rb +55 -37
  398. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/worker_statistics.rb +56 -22
  399. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_cumulative_statistics.rb +58 -29
  400. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_real_time_statistics.rb +33 -17
  401. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker/workers_statistics.rb +56 -27
  402. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/worker.rb +146 -68
  403. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_cumulative_statistics.rb +81 -40
  404. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_real_time_statistics.rb +46 -20
  405. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow/workflow_statistics.rb +65 -24
  406. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workflow.rb +118 -55
  407. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_cumulative_statistics.rb +82 -39
  408. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_real_time_statistics.rb +41 -21
  409. data/lib/twilio-ruby/rest/taskrouter/v1/workspace/workspace_statistics.rb +58 -23
  410. data/lib/twilio-ruby/rest/taskrouter/v1/workspace.rb +141 -68
  411. data/lib/twilio-ruby/rest/taskrouter/v1.rb +3 -1
  412. data/lib/twilio-ruby/rest/taskrouter.rb +4 -1
  413. data/lib/twilio-ruby/rest/trunking/v1/trunk/credential_list.rb +46 -24
  414. data/lib/twilio-ruby/rest/trunking/v1/trunk/ip_access_control_list.rb +36 -23
  415. data/lib/twilio-ruby/rest/trunking/v1/trunk/origination_url.rb +85 -42
  416. data/lib/twilio-ruby/rest/trunking/v1/trunk/phone_number.rb +62 -43
  417. data/lib/twilio-ruby/rest/trunking/v1/trunk.rb +154 -56
  418. data/lib/twilio-ruby/rest/trunking/v1.rb +4 -1
  419. data/lib/twilio-ruby/rest/trunking.rb +4 -1
  420. data/lib/twilio-ruby/rest/verify/v2/service/messaging_configuration.rb +387 -0
  421. data/lib/twilio-ruby/rest/verify/v2/service/rate_limit/bucket.rb +416 -0
  422. data/lib/twilio-ruby/rest/verify/v2/service/rate_limit.rb +408 -0
  423. data/lib/twilio-ruby/rest/verify/v2/service/verification.rb +366 -0
  424. data/lib/twilio-ruby/rest/{preview/acc_security → verify/v2}/service/verification_check.rb +59 -29
  425. data/lib/twilio-ruby/rest/verify/v2/service.rb +574 -0
  426. data/lib/twilio-ruby/rest/{preview/acc_security.rb → verify/v2.rb} +11 -8
  427. data/lib/twilio-ruby/rest/verify.rb +47 -0
  428. data/lib/twilio-ruby/rest/video/v1/composition.rb +512 -0
  429. data/lib/twilio-ruby/rest/video/v1/composition_hook.rb +673 -0
  430. data/lib/twilio-ruby/rest/video/v1/composition_settings.rb +285 -0
  431. data/lib/twilio-ruby/rest/video/v1/recording.rb +92 -42
  432. data/lib/twilio-ruby/rest/video/v1/recording_settings.rb +285 -0
  433. data/lib/twilio-ruby/rest/video/v1/room/recording.rb +92 -43
  434. data/lib/twilio-ruby/rest/video/v1/room/room_participant/room_participant_published_track.rb +37 -20
  435. data/lib/twilio-ruby/rest/video/v1/room/room_participant/room_participant_subscribe_rule.rb +191 -0
  436. data/lib/twilio-ruby/rest/video/v1/room/room_participant/room_participant_subscribed_track.rb +348 -0
  437. data/lib/twilio-ruby/rest/video/v1/room/room_participant.rb +129 -41
  438. data/lib/twilio-ruby/rest/video/v1/room.rb +100 -58
  439. data/lib/twilio-ruby/rest/video/v1.rb +48 -2
  440. data/lib/twilio-ruby/rest/video.rb +36 -2
  441. data/lib/twilio-ruby/rest/voice/v1/dialing_permissions/bulk_country_update.rb +133 -0
  442. data/lib/twilio-ruby/rest/voice/v1/dialing_permissions/country/highrisk_special_prefix.rb +192 -0
  443. data/lib/twilio-ruby/rest/voice/v1/dialing_permissions/country.rb +412 -0
  444. data/lib/twilio-ruby/rest/voice/v1/dialing_permissions/settings.rb +207 -0
  445. data/lib/twilio-ruby/rest/voice/v1/dialing_permissions.rb +132 -0
  446. data/lib/twilio-ruby/rest/voice/v1.rb +35 -0
  447. data/lib/twilio-ruby/rest/voice.rb +44 -0
  448. data/lib/twilio-ruby/rest/wireless/v1/command.rb +125 -48
  449. data/lib/twilio-ruby/rest/wireless/v1/rate_plan.rb +84 -55
  450. data/lib/twilio-ruby/rest/wireless/v1/sim/data_session.rb +45 -32
  451. data/lib/twilio-ruby/rest/wireless/v1/sim/usage_record.rb +43 -25
  452. data/lib/twilio-ruby/rest/wireless/v1/sim.rb +203 -91
  453. data/lib/twilio-ruby/rest/wireless/v1/usage_record.rb +231 -0
  454. data/lib/twilio-ruby/rest/wireless/v1.rb +12 -3
  455. data/lib/twilio-ruby/rest/wireless.rb +14 -3
  456. data/lib/twilio-ruby/security/request_validator.rb +104 -8
  457. data/lib/twilio-ruby/twiml/fax_response.rb +7 -2
  458. data/lib/twilio-ruby/twiml/messaging_response.rb +2 -0
  459. data/lib/twilio-ruby/twiml/twiml.rb +59 -12
  460. data/lib/twilio-ruby/twiml/voice_response.rb +677 -45
  461. data/lib/twilio-ruby/util/configuration.rb +12 -5
  462. data/lib/twilio-ruby/util.rb +2 -0
  463. data/lib/twilio-ruby/version.rb +1 -1
  464. data/lib/twilio-ruby.rb +11 -7
  465. data/spec/http/http_client_spec.rb +2 -2
  466. data/spec/integration/accounts/v1/credential/aws_spec.rb +14 -12
  467. data/spec/integration/accounts/v1/credential/public_key_spec.rb +14 -12
  468. data/spec/integration/accounts/v1/credential_spec.rb +2 -0
  469. data/spec/integration/api/v2010/account/address/dependent_phone_number_spec.rb +9 -7
  470. data/spec/integration/api/v2010/account/address_spec.rb +36 -30
  471. data/spec/integration/api/v2010/account/application_spec.rb +32 -37
  472. data/spec/integration/api/v2010/account/authorized_connect_app_spec.rb +11 -9
  473. data/spec/integration/api/v2010/account/available_phone_number/local_spec.rb +9 -7
  474. data/spec/integration/api/v2010/account/available_phone_number/machine_to_machine_spec.rb +9 -7
  475. data/spec/integration/api/v2010/account/available_phone_number/mobile_spec.rb +9 -7
  476. data/spec/integration/api/v2010/account/available_phone_number/national_spec.rb +9 -7
  477. data/spec/integration/api/v2010/account/available_phone_number/shared_cost_spec.rb +9 -7
  478. data/spec/integration/api/v2010/account/available_phone_number/toll_free_spec.rb +9 -7
  479. data/spec/integration/api/v2010/account/available_phone_number/voip_spec.rb +9 -7
  480. data/spec/integration/api/v2010/account/available_phone_number_spec.rb +11 -9
  481. data/spec/integration/api/v2010/account/balance_spec.rb +45 -0
  482. data/spec/integration/api/v2010/account/call/feedback_spec.rb +19 -17
  483. data/spec/integration/api/v2010/account/call/feedback_summary_spec.rb +15 -13
  484. data/spec/integration/api/v2010/account/call/notification_spec.rb +24 -58
  485. data/spec/integration/api/v2010/account/call/payment_spec.rb +135 -0
  486. data/spec/integration/api/v2010/account/call/recording_spec.rb +124 -23
  487. data/spec/integration/api/v2010/account/call_spec.rb +419 -77
  488. data/spec/integration/api/v2010/account/conference/participant_spec.rb +309 -54
  489. data/spec/integration/api/v2010/account/conference/recording_spec.rb +237 -0
  490. data/spec/integration/api/v2010/account/conference_spec.rb +292 -36
  491. data/spec/integration/api/v2010/account/connect_app_spec.rb +44 -20
  492. data/spec/integration/api/v2010/account/incoming_phone_number/assigned_add_on/assigned_add_on_extension_spec.rb +21 -19
  493. data/spec/integration/api/v2010/account/incoming_phone_number/assigned_add_on_spec.rb +31 -29
  494. data/spec/integration/api/v2010/account/incoming_phone_number/local_spec.rb +20 -12
  495. data/spec/integration/api/v2010/account/incoming_phone_number/mobile_spec.rb +20 -12
  496. data/spec/integration/api/v2010/account/incoming_phone_number/toll_free_spec.rb +20 -12
  497. data/spec/integration/api/v2010/account/incoming_phone_number_spec.rb +32 -26
  498. data/spec/integration/api/v2010/account/key_spec.rb +21 -19
  499. data/spec/integration/api/v2010/account/message/feedback_spec.rb +7 -5
  500. data/spec/integration/api/v2010/account/message/media_spec.rb +23 -21
  501. data/spec/integration/api/v2010/account/message_spec.rb +247 -67
  502. data/spec/integration/api/v2010/account/new_key_spec.rb +5 -3
  503. data/spec/integration/api/v2010/account/new_signing_key_spec.rb +5 -3
  504. data/spec/integration/api/v2010/account/notification_spec.rb +14 -46
  505. data/spec/integration/api/v2010/account/outgoing_caller_id_spec.rb +21 -19
  506. data/spec/integration/api/v2010/account/queue/member_spec.rb +74 -31
  507. data/spec/integration/api/v2010/account/queue_spec.rb +43 -35
  508. data/spec/integration/api/v2010/account/recording/add_on_result/payload_spec.rb +30 -28
  509. data/spec/integration/api/v2010/account/recording/add_on_result_spec.rb +23 -21
  510. data/spec/integration/api/v2010/account/recording/transcription_spec.rb +23 -21
  511. data/spec/integration/api/v2010/account/recording_spec.rb +16 -16
  512. data/spec/integration/api/v2010/account/short_code_spec.rb +16 -14
  513. data/spec/integration/api/v2010/account/signing_key_spec.rb +21 -19
  514. data/spec/integration/api/v2010/account/sip/credential_list/credential_spec.rb +38 -36
  515. data/spec/integration/api/v2010/account/sip/credential_list_spec.rb +28 -26
  516. data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_calls_mapping/auth_calls_credential_list_mapping_spec.rb +220 -0
  517. data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_calls_mapping/auth_calls_ip_access_control_list_mapping_spec.rb +220 -0
  518. data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_calls_mapping_spec.rb +12 -0
  519. data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_registrations_mapping/auth_registrations_credential_list_mapping_spec.rb +220 -0
  520. data/spec/integration/api/v2010/account/sip/domain/auth_types/auth_registrations_mapping_spec.rb +12 -0
  521. data/spec/integration/api/v2010/account/sip/domain/auth_types_spec.rb +12 -0
  522. data/spec/integration/api/v2010/account/sip/domain/credential_list_mapping_spec.rb +31 -29
  523. data/spec/integration/api/v2010/account/sip/domain/ip_access_control_list_mapping_spec.rb +31 -29
  524. data/spec/integration/api/v2010/account/sip/domain_spec.rb +54 -40
  525. data/spec/integration/api/v2010/account/sip/ip_access_control_list/ip_address_spec.rb +50 -50
  526. data/spec/integration/api/v2010/account/sip/ip_access_control_list_spec.rb +28 -26
  527. data/spec/integration/api/v2010/account/sip_spec.rb +2 -0
  528. data/spec/integration/api/v2010/account/token_spec.rb +8 -4
  529. data/spec/integration/api/v2010/account/transcription_spec.rb +16 -14
  530. data/spec/integration/api/v2010/account/usage/record/all_time_spec.rb +7 -4
  531. data/spec/integration/api/v2010/account/usage/record/daily_spec.rb +7 -4
  532. data/spec/integration/api/v2010/account/usage/record/last_month_spec.rb +7 -4
  533. data/spec/integration/api/v2010/account/usage/record/monthly_spec.rb +7 -4
  534. data/spec/integration/api/v2010/account/usage/record/this_month_spec.rb +7 -4
  535. data/spec/integration/api/v2010/account/usage/record/today_spec.rb +7 -4
  536. data/spec/integration/api/v2010/account/usage/record/yearly_spec.rb +7 -4
  537. data/spec/integration/api/v2010/account/usage/record/yesterday_spec.rb +7 -4
  538. data/spec/integration/api/v2010/account/usage/record_spec.rb +7 -4
  539. data/spec/integration/api/v2010/account/usage/trigger_spec.rb +29 -27
  540. data/spec/integration/api/v2010/account/usage_spec.rb +2 -0
  541. data/spec/integration/api/v2010/account/validation_request_spec.rb +8 -6
  542. data/spec/integration/api/v2010/account_spec.rb +152 -75
  543. data/spec/integration/authy/v1/form_spec.rb +48 -0
  544. data/spec/integration/authy/v1/service/entity/factor/challenge_spec.rb +353 -0
  545. data/spec/integration/authy/v1/service/entity/factor_spec.rb +298 -0
  546. data/spec/integration/authy/v1/service/entity_spec.rb +201 -0
  547. data/spec/integration/authy/v1/service_spec.rb +231 -0
  548. data/spec/integration/autopilot/v1/assistant/defaults_spec.rb +81 -0
  549. data/spec/integration/autopilot/v1/assistant/dialogue_spec.rb +47 -0
  550. data/spec/integration/autopilot/v1/assistant/export_assistant_spec.rb +49 -0
  551. data/spec/integration/autopilot/v1/assistant/field_type/field_value_spec.rb +210 -0
  552. data/spec/integration/autopilot/v1/assistant/field_type_spec.rb +246 -0
  553. data/spec/integration/autopilot/v1/assistant/model_build_spec.rb +241 -0
  554. data/spec/integration/autopilot/v1/assistant/query_spec.rb +294 -0
  555. data/spec/integration/autopilot/v1/assistant/style_sheet_spec.rb +81 -0
  556. data/spec/integration/autopilot/v1/assistant/task/field_spec.rb +207 -0
  557. data/spec/integration/autopilot/v1/assistant/task/sample_spec.rb +253 -0
  558. data/spec/integration/autopilot/v1/assistant/task/task_actions_spec.rb +87 -0
  559. data/spec/integration/autopilot/v1/assistant/task/task_statistics_spec.rb +50 -0
  560. data/spec/integration/autopilot/v1/assistant/task_spec.rb +262 -0
  561. data/spec/integration/autopilot/v1/assistant/webhook_spec.rb +246 -0
  562. data/spec/integration/autopilot/v1/assistant_spec.rb +286 -0
  563. data/spec/integration/bulkexports/v1/export/day_spec.rb +117 -0
  564. data/spec/integration/bulkexports/v1/export/export_custom_job_spec.rb +129 -0
  565. data/spec/integration/bulkexports/v1/export/job_spec.rb +80 -0
  566. data/spec/integration/bulkexports/v1/export_configuration_spec.rb +79 -0
  567. data/spec/integration/bulkexports/v1/export_spec.rb +45 -0
  568. data/spec/integration/chat/v1/credential_spec.rb +14 -12
  569. data/spec/integration/chat/v1/service/channel/invite_spec.rb +35 -33
  570. data/spec/integration/chat/v1/service/channel/member_spec.rb +41 -39
  571. data/spec/integration/chat/v1/service/channel/message_spec.rb +41 -39
  572. data/spec/integration/chat/v1/service/channel_spec.rb +24 -22
  573. data/spec/integration/chat/v1/service/role_spec.rb +29 -27
  574. data/spec/integration/chat/v1/service/user/user_channel_spec.rb +9 -7
  575. data/spec/integration/chat/v1/service/user_spec.rb +27 -25
  576. data/spec/integration/chat/v1/service_spec.rb +14 -12
  577. data/spec/integration/chat/v2/credential_spec.rb +14 -12
  578. data/spec/integration/chat/v2/service/binding_spec.rb +16 -14
  579. data/spec/integration/chat/v2/service/channel/invite_spec.rb +35 -33
  580. data/spec/integration/chat/v2/service/channel/member_spec.rb +42 -36
  581. data/spec/integration/chat/v2/service/channel/message_spec.rb +43 -41
  582. data/spec/integration/chat/v2/service/channel/webhook_spec.rb +307 -0
  583. data/spec/integration/chat/v2/service/channel_spec.rb +28 -22
  584. data/spec/integration/chat/v2/service/role_spec.rb +29 -27
  585. data/spec/integration/chat/v2/service/user/user_binding_spec.rb +23 -21
  586. data/spec/integration/chat/v2/service/user/user_channel_spec.rb +166 -7
  587. data/spec/integration/chat/v2/service/user_spec.rb +27 -25
  588. data/spec/integration/chat/v2/service_spec.rb +15 -12
  589. data/spec/integration/conversations/v1/conversation/message_spec.rb +293 -0
  590. data/spec/integration/conversations/v1/conversation/participant_spec.rb +290 -0
  591. data/spec/integration/conversations/v1/conversation/webhook_spec.rb +286 -0
  592. data/spec/integration/conversations/v1/conversation_spec.rb +222 -0
  593. data/spec/integration/conversations/v1/webhook_spec.rb +88 -0
  594. data/spec/integration/fax/v1/fax/fax_media_spec.rb +15 -13
  595. data/spec/integration/fax/v1/fax_spec.rb +18 -16
  596. data/spec/integration/flex_api/v1/channel_spec.rb +191 -0
  597. data/spec/integration/flex_api/v1/configuration_spec.rb +602 -0
  598. data/spec/integration/flex_api/v1/flex_flow_spec.rb +263 -0
  599. data/spec/integration/flex_api/v1/web_channel_spec.rb +220 -0
  600. data/spec/integration/insights/v1/call/event_spec.rb +167 -0
  601. data/spec/integration/insights/v1/call/metric_spec.rb +155 -0
  602. data/spec/integration/insights/v1/call/summary_spec.rb +63 -0
  603. data/spec/integration/insights/v1/call_spec.rb +47 -0
  604. data/spec/integration/ip_messaging/v1/credential_spec.rb +16 -14
  605. data/spec/integration/ip_messaging/v1/service/channel/invite_spec.rb +35 -33
  606. data/spec/integration/ip_messaging/v1/service/channel/member_spec.rb +41 -39
  607. data/spec/integration/ip_messaging/v1/service/channel/message_spec.rb +41 -39
  608. data/spec/integration/ip_messaging/v1/service/channel_spec.rb +24 -22
  609. data/spec/integration/ip_messaging/v1/service/role_spec.rb +29 -27
  610. data/spec/integration/ip_messaging/v1/service/user/user_channel_spec.rb +9 -7
  611. data/spec/integration/ip_messaging/v1/service/user_spec.rb +27 -25
  612. data/spec/integration/ip_messaging/v1/service_spec.rb +16 -14
  613. data/spec/integration/ip_messaging/v2/credential_spec.rb +16 -14
  614. data/spec/integration/ip_messaging/v2/service/binding_spec.rb +16 -14
  615. data/spec/integration/ip_messaging/v2/service/channel/invite_spec.rb +35 -33
  616. data/spec/integration/ip_messaging/v2/service/channel/member_spec.rb +42 -36
  617. data/spec/integration/ip_messaging/v2/service/channel/message_spec.rb +43 -41
  618. data/spec/integration/ip_messaging/v2/service/channel/webhook_spec.rb +307 -0
  619. data/spec/integration/ip_messaging/v2/service/channel_spec.rb +28 -22
  620. data/spec/integration/ip_messaging/v2/service/role_spec.rb +29 -27
  621. data/spec/integration/ip_messaging/v2/service/user/user_binding_spec.rb +23 -21
  622. data/spec/integration/ip_messaging/v2/service/user/user_channel_spec.rb +166 -7
  623. data/spec/integration/ip_messaging/v2/service/user_spec.rb +27 -25
  624. data/spec/integration/ip_messaging/v2/service_spec.rb +17 -14
  625. data/spec/integration/lookups/v1/phone_number_spec.rb +283 -6
  626. data/spec/integration/messaging/v1/service/alpha_sender_spec.rb +30 -22
  627. data/spec/integration/messaging/v1/service/phone_number_spec.rb +23 -21
  628. data/spec/integration/messaging/v1/service/short_code_spec.rb +30 -22
  629. data/spec/integration/messaging/v1/service_spec.rb +26 -16
  630. data/spec/integration/monitor/v1/alert_spec.rb +16 -37
  631. data/spec/integration/monitor/v1/event_spec.rb +5 -3
  632. data/spec/integration/notify/v1/credential_spec.rb +14 -12
  633. data/spec/integration/notify/v1/service/binding_spec.rb +26 -24
  634. data/spec/integration/notify/v1/service/notification_spec.rb +6 -4
  635. data/spec/integration/notify/v1/service_spec.rb +19 -9
  636. data/spec/integration/numbers/v2/regulatory_compliance/bundle/item_assignment_spec.rb +198 -0
  637. data/spec/integration/numbers/v2/regulatory_compliance/bundle_spec.rb +226 -0
  638. data/spec/integration/numbers/v2/regulatory_compliance/end_user_spec.rb +214 -0
  639. data/spec/integration/numbers/v2/regulatory_compliance/end_user_type_spec.rb +143 -0
  640. data/spec/integration/numbers/v2/regulatory_compliance/regulation_spec.rb +183 -0
  641. data/spec/integration/numbers/v2/regulatory_compliance/supporting_document_spec.rb +226 -0
  642. data/spec/integration/numbers/v2/regulatory_compliance/supporting_document_type_spec.rb +133 -0
  643. data/spec/integration/numbers/v2/regulatory_compliance_spec.rb +12 -0
  644. data/spec/integration/preview/bulk_exports/export/day_spec.rb +71 -10
  645. data/spec/integration/preview/bulk_exports/export/export_custom_job_spec.rb +129 -0
  646. data/spec/integration/preview/bulk_exports/export/job_spec.rb +80 -0
  647. data/spec/integration/preview/bulk_exports/export_configuration_spec.rb +6 -4
  648. data/spec/integration/preview/bulk_exports/export_spec.rb +4 -2
  649. data/spec/integration/preview/deployed_devices/fleet/certificate_spec.rb +27 -25
  650. data/spec/integration/preview/deployed_devices/fleet/deployment_spec.rb +24 -22
  651. data/spec/integration/preview/deployed_devices/fleet/device_spec.rb +24 -22
  652. data/spec/integration/preview/deployed_devices/fleet/key_spec.rb +24 -22
  653. data/spec/integration/preview/deployed_devices/fleet_spec.rb +11 -9
  654. data/spec/integration/preview/hosted_numbers/authorization_document/dependent_hosted_number_order_spec.rb +111 -0
  655. data/spec/integration/preview/hosted_numbers/authorization_document_spec.rb +28 -12
  656. data/spec/integration/preview/hosted_numbers/hosted_number_order_spec.rb +69 -28
  657. data/spec/integration/preview/marketplace/available_add_on/available_add_on_extension_spec.rb +11 -9
  658. data/spec/integration/preview/marketplace/available_add_on_spec.rb +5 -3
  659. data/spec/integration/preview/marketplace/installed_add_on/installed_add_on_extension_spec.rb +17 -15
  660. data/spec/integration/preview/marketplace/installed_add_on_spec.rb +14 -12
  661. data/spec/integration/preview/sync/service/document/document_permission_spec.rb +31 -29
  662. data/spec/integration/preview/sync/service/document_spec.rb +25 -23
  663. data/spec/integration/preview/sync/service/sync_list/sync_list_item_spec.rb +39 -37
  664. data/spec/integration/preview/sync/service/sync_list/sync_list_permission_spec.rb +31 -29
  665. data/spec/integration/preview/sync/service/sync_list_spec.rb +19 -17
  666. data/spec/integration/preview/sync/service/sync_map/sync_map_item_spec.rb +43 -41
  667. data/spec/integration/preview/sync/service/sync_map/sync_map_permission_spec.rb +31 -29
  668. data/spec/integration/preview/sync/service/sync_map_spec.rb +19 -17
  669. data/spec/integration/preview/sync/service_spec.rb +11 -9
  670. data/spec/integration/preview/trusted_comms/branded_call_spec.rb +59 -0
  671. data/spec/integration/preview/trusted_comms/business/insights/impressions_rate_spec.rb +57 -0
  672. data/spec/integration/preview/trusted_comms/business/insights_spec.rb +12 -0
  673. data/spec/integration/preview/trusted_comms/business_spec.rb +46 -0
  674. data/spec/integration/preview/trusted_comms/cps_spec.rb +43 -0
  675. data/spec/integration/preview/trusted_comms/current_call_spec.rb +54 -0
  676. data/spec/integration/preview/trusted_comms/phone_call_spec.rb +59 -0
  677. data/spec/integration/preview/understand/assistant/assistant_fallback_actions_spec.rb +81 -0
  678. data/spec/integration/preview/understand/assistant/assistant_initiation_actions_spec.rb +81 -0
  679. data/spec/integration/preview/understand/assistant/dialogue_spec.rb +47 -0
  680. data/spec/integration/preview/understand/assistant/field_type/field_value_spec.rb +210 -0
  681. data/spec/integration/preview/understand/{service → assistant}/field_type_spec.rb +43 -41
  682. data/spec/integration/preview/understand/{service → assistant}/model_build_spec.rb +50 -40
  683. data/spec/integration/preview/understand/{service → assistant}/query_spec.rb +55 -49
  684. data/spec/integration/preview/understand/assistant/style_sheet_spec.rb +81 -0
  685. data/spec/integration/preview/understand/{service/intent → assistant/task}/field_spec.rb +44 -42
  686. data/spec/integration/preview/understand/assistant/task/sample_spec.rb +253 -0
  687. data/spec/integration/preview/understand/assistant/task/task_actions_spec.rb +87 -0
  688. data/spec/integration/preview/understand/assistant/task/task_statistics_spec.rb +50 -0
  689. data/spec/integration/preview/understand/assistant/task_spec.rb +262 -0
  690. data/spec/integration/preview/understand/assistant_spec.rb +274 -0
  691. data/spec/integration/preview/wireless/command_spec.rb +12 -10
  692. data/spec/integration/preview/wireless/rate_plan_spec.rb +11 -9
  693. data/spec/integration/preview/wireless/sim/usage_spec.rb +5 -3
  694. data/spec/integration/preview/wireless/sim_spec.rb +12 -10
  695. data/spec/integration/pricing/v1/messaging/country_spec.rb +16 -14
  696. data/spec/integration/pricing/v1/messaging_spec.rb +2 -0
  697. data/spec/integration/pricing/v1/phone_number/country_spec.rb +21 -19
  698. data/spec/integration/pricing/v1/phone_number_spec.rb +2 -0
  699. data/spec/integration/pricing/v1/voice/country_spec.rb +25 -151
  700. data/spec/integration/pricing/v1/voice/number_spec.rb +9 -7
  701. data/spec/integration/pricing/v1/voice_spec.rb +2 -0
  702. data/spec/integration/pricing/v2/voice/country_spec.rb +181 -0
  703. data/spec/integration/pricing/v2/voice/number_spec.rb +62 -0
  704. data/spec/integration/pricing/v2/voice_spec.rb +12 -0
  705. data/spec/integration/proxy/v1/service/phone_number_spec.rb +75 -21
  706. data/spec/integration/proxy/v1/service/session/interaction_spec.rb +22 -20
  707. data/spec/integration/proxy/v1/service/session/participant/message_interaction_spec.rb +27 -25
  708. data/spec/integration/proxy/v1/service/session/participant_spec.rb +95 -79
  709. data/spec/integration/proxy/v1/service/session_spec.rb +31 -29
  710. data/spec/integration/proxy/v1/service/short_code_spec.rb +71 -22
  711. data/spec/integration/proxy/v1/service_spec.rb +20 -15
  712. data/spec/integration/serverless/v1/service/asset/asset_version_spec.rb +95 -0
  713. data/spec/integration/serverless/v1/service/asset_spec.rb +205 -0
  714. data/spec/integration/serverless/v1/service/build_spec.rb +212 -0
  715. data/spec/integration/serverless/v1/service/environment/deployment_spec.rb +136 -0
  716. data/spec/integration/serverless/v1/service/environment/log_spec.rb +98 -0
  717. data/spec/integration/serverless/v1/service/environment/variable_spec.rb +211 -0
  718. data/spec/integration/serverless/v1/service/environment_spec.rb +173 -0
  719. data/spec/integration/serverless/v1/service/function/function_version/function_version_content_spec.rb +52 -0
  720. data/spec/integration/serverless/v1/service/function/function_version_spec.rb +98 -0
  721. data/spec/integration/serverless/v1/service/function_spec.rb +205 -0
  722. data/spec/integration/serverless/v1/service_spec.rb +209 -0
  723. data/spec/integration/studio/v1/flow/engagement/engagement_context_spec.rb +51 -0
  724. data/spec/integration/studio/v1/flow/engagement/step/step_context_spec.rb +54 -0
  725. data/spec/integration/studio/v1/flow/engagement/step_spec.rb +101 -0
  726. data/spec/integration/{preview/studio → studio/v1}/flow/engagement_spec.rb +32 -32
  727. data/spec/integration/studio/v1/flow/execution/execution_context_spec.rb +51 -0
  728. data/spec/integration/studio/v1/flow/execution/execution_step/execution_step_context_spec.rb +54 -0
  729. data/spec/integration/studio/v1/flow/execution/execution_step_spec.rb +101 -0
  730. data/spec/integration/studio/v1/flow/execution_spec.rb +171 -0
  731. data/spec/integration/{preview/studio → studio/v1}/flow_spec.rb +16 -14
  732. data/spec/integration/studio/v2/flow/execution/execution_context_spec.rb +51 -0
  733. data/spec/integration/studio/v2/flow/execution/execution_step/execution_step_context_spec.rb +54 -0
  734. data/spec/integration/studio/v2/flow/execution/execution_step_spec.rb +101 -0
  735. data/spec/integration/studio/v2/flow/execution_spec.rb +169 -0
  736. data/spec/integration/studio/v2/flow/flow_revision_spec.rb +112 -0
  737. data/spec/integration/studio/v2/flow/test_user_spec.rb +86 -0
  738. data/spec/integration/studio/v2/flow_spec.rb +250 -0
  739. data/spec/integration/studio/v2/flow_validate_spec.rb +46 -0
  740. data/spec/integration/supersim/v1/command_spec.rb +186 -0
  741. data/spec/integration/supersim/v1/fleet_spec.rb +208 -0
  742. data/spec/integration/supersim/v1/sim_spec.rb +231 -0
  743. data/spec/integration/supersim/v1/usage_record_spec.rb +203 -0
  744. data/spec/integration/sync/v1/service/document/document_permission_spec.rb +31 -29
  745. data/spec/integration/sync/v1/service/document_spec.rb +24 -22
  746. data/spec/integration/sync/v1/service/sync_list/sync_list_item_spec.rb +36 -34
  747. data/spec/integration/sync/v1/service/sync_list/sync_list_permission_spec.rb +31 -29
  748. data/spec/integration/sync/v1/service/sync_list_spec.rb +24 -22
  749. data/spec/integration/sync/v1/service/sync_map/sync_map_item_spec.rb +42 -40
  750. data/spec/integration/sync/v1/service/sync_map/sync_map_permission_spec.rb +31 -29
  751. data/spec/integration/sync/v1/service/sync_map_spec.rb +24 -22
  752. data/spec/integration/sync/v1/service/sync_stream/stream_message_spec.rb +10 -8
  753. data/spec/integration/sync/v1/service/sync_stream_spec.rb +24 -22
  754. data/spec/integration/sync/v1/service_spec.rb +27 -13
  755. data/spec/integration/taskrouter/v1/workspace/activity_spec.rb +27 -25
  756. data/spec/integration/taskrouter/v1/workspace/event_spec.rb +21 -13
  757. data/spec/integration/taskrouter/v1/workspace/task/reservation_spec.rb +54 -21
  758. data/spec/integration/taskrouter/v1/workspace/task_channel_spec.rb +208 -19
  759. data/spec/integration/taskrouter/v1/workspace/task_queue/task_queue_cumulative_statistics_spec.rb +13 -5
  760. data/spec/integration/taskrouter/v1/workspace/task_queue/task_queue_real_time_statistics_spec.rb +10 -5
  761. data/spec/integration/taskrouter/v1/workspace/task_queue/task_queue_statistics_spec.rb +8 -6
  762. data/spec/integration/taskrouter/v1/workspace/task_queue/task_queues_statistics_spec.rb +11 -9
  763. data/spec/integration/taskrouter/v1/workspace/task_queue_spec.rb +31 -33
  764. data/spec/integration/taskrouter/v1/workspace/task_spec.rb +35 -29
  765. data/spec/integration/taskrouter/v1/workspace/worker/reservation_spec.rb +23 -21
  766. data/spec/integration/taskrouter/v1/workspace/worker/worker_channel_spec.rb +23 -36
  767. data/spec/integration/taskrouter/v1/workspace/worker/worker_statistics_spec.rb +7 -5
  768. data/spec/integration/taskrouter/v1/workspace/worker/workers_cumulative_statistics_spec.rb +7 -5
  769. data/spec/integration/taskrouter/v1/workspace/worker/workers_real_time_statistics_spec.rb +7 -5
  770. data/spec/integration/taskrouter/v1/workspace/worker/workers_statistics_spec.rb +5 -3
  771. data/spec/integration/taskrouter/v1/workspace/worker_spec.rb +31 -29
  772. data/spec/integration/taskrouter/v1/workspace/workflow/workflow_cumulative_statistics_spec.rb +7 -5
  773. data/spec/integration/taskrouter/v1/workspace/workflow/workflow_real_time_statistics_spec.rb +8 -5
  774. data/spec/integration/taskrouter/v1/workspace/workflow/workflow_statistics_spec.rb +8 -6
  775. data/spec/integration/taskrouter/v1/workspace/workflow_spec.rb +31 -31
  776. data/spec/integration/taskrouter/v1/workspace/workspace_cumulative_statistics_spec.rb +5 -3
  777. data/spec/integration/taskrouter/v1/workspace/workspace_real_time_statistics_spec.rb +6 -3
  778. data/spec/integration/taskrouter/v1/workspace/workspace_statistics_spec.rb +6 -4
  779. data/spec/integration/taskrouter/v1/workspace_spec.rb +18 -16
  780. data/spec/integration/trunking/v1/trunk/credential_list_spec.rb +31 -29
  781. data/spec/integration/trunking/v1/trunk/ip_access_control_list_spec.rb +37 -35
  782. data/spec/integration/trunking/v1/trunk/origination_url_spec.rb +43 -41
  783. data/spec/integration/trunking/v1/trunk/phone_number_spec.rb +22 -20
  784. data/spec/integration/trunking/v1/trunk_spec.rb +43 -37
  785. data/spec/integration/verify/v2/service/messaging_configuration_spec.rb +231 -0
  786. data/spec/integration/verify/v2/service/rate_limit/bucket_spec.rb +249 -0
  787. data/spec/integration/verify/v2/service/rate_limit_spec.rb +221 -0
  788. data/spec/integration/verify/v2/service/verification_check_spec.rb +80 -0
  789. data/spec/integration/verify/v2/service/verification_spec.rb +319 -0
  790. data/spec/integration/verify/v2/service_spec.rb +247 -0
  791. data/spec/integration/video/v1/composition_hook_spec.rb +410 -0
  792. data/spec/integration/video/v1/composition_settings_spec.rb +86 -0
  793. data/spec/integration/video/v1/composition_spec.rb +350 -0
  794. data/spec/integration/video/v1/recording_settings_spec.rb +86 -0
  795. data/spec/integration/video/v1/recording_spec.rb +20 -10
  796. data/spec/integration/video/v1/room/recording_spec.rb +53 -11
  797. data/spec/integration/video/v1/room/room_participant/room_participant_published_track_spec.rb +14 -12
  798. data/spec/integration/video/v1/room/room_participant/room_participant_subscribe_rule_spec.rb +105 -0
  799. data/spec/integration/video/v1/room/room_participant/room_participant_subscribed_track_spec.rb +97 -0
  800. data/spec/integration/video/v1/room/room_participant_spec.rb +27 -19
  801. data/spec/integration/video/v1/room_spec.rb +11 -9
  802. data/spec/integration/voice/v1/dialing_permissions/bulk_country_update_spec.rb +45 -0
  803. data/spec/integration/voice/v1/dialing_permissions/country/highrisk_special_prefix_spec.rb +61 -0
  804. data/spec/integration/voice/v1/dialing_permissions/country_spec.rb +112 -0
  805. data/spec/integration/voice/v1/dialing_permissions/settings_spec.rb +77 -0
  806. data/spec/integration/voice/v1/dialing_permissions_spec.rb +12 -0
  807. data/spec/integration/wireless/v1/command_spec.rb +137 -12
  808. data/spec/integration/wireless/v1/rate_plan_spec.rb +35 -21
  809. data/spec/integration/wireless/v1/sim/data_session_spec.rb +11 -7
  810. data/spec/integration/wireless/v1/sim/usage_record_spec.rb +58 -8
  811. data/spec/integration/wireless/v1/sim_spec.rb +125 -10
  812. data/spec/integration/wireless/v1/usage_record_spec.rb +111 -0
  813. data/spec/jwt/access_token_spec.rb +2 -0
  814. data/spec/rest/client_spec.rb +34 -0
  815. data/spec/security/request_validator_spec.rb +73 -61
  816. data/spec/spec_helper.rb +6 -0
  817. data/spec/twilio_spec.rb +3 -1
  818. data/spec/twiml/messaging_response_spec.rb +186 -46
  819. data/spec/twiml/voice_response_spec.rb +625 -257
  820. data/spec/util/configuration_spec.rb +6 -0
  821. data/twilio-ruby.gemspec +10 -6
  822. metadata +521 -91
  823. data/lib/twilio-ruby/rest/notify/v1/service/user/segment_memberships.rb +0 -260
  824. data/lib/twilio-ruby/rest/preview/acc_security/service/verification.rb +0 -183
  825. data/lib/twilio-ruby/rest/preview/proxy/service/session/interaction.rb +0 -435
  826. data/lib/twilio-ruby/rest/preview/proxy/service/session.rb +0 -495
  827. data/lib/twilio-ruby/rest/preview/proxy/service.rb +0 -462
  828. data/spec/integration/notify/v1/service/segment_spec.rb +0 -84
  829. data/spec/integration/notify/v1/service/user/segment_memberships_spec.rb +0 -116
  830. data/spec/integration/notify/v1/service/user/user_binding_spec.rb +0 -266
  831. data/spec/integration/notify/v1/service/user_spec.rb +0 -211
  832. data/spec/integration/preview/acc_security/service/verification_check_spec.rb +0 -50
  833. data/spec/integration/preview/acc_security/service/verification_spec.rb +0 -50
  834. data/spec/integration/preview/acc_security/service_spec.rb +0 -183
  835. data/spec/integration/preview/proxy/service/phone_number_spec.rb +0 -171
  836. data/spec/integration/preview/proxy/service/session/interaction_spec.rb +0 -104
  837. data/spec/integration/preview/proxy/service/session/participant/message_interaction_spec.rb +0 -164
  838. data/spec/integration/preview/proxy/service/session/participant_spec.rb +0 -224
  839. data/spec/integration/preview/proxy/service/session_spec.rb +0 -216
  840. data/spec/integration/preview/proxy/service/short_code_spec.rb +0 -171
  841. data/spec/integration/preview/proxy/service_spec.rb +0 -200
  842. data/spec/integration/preview/studio/flow/engagement/step_spec.rb +0 -96
  843. data/spec/integration/preview/understand/service/field_type/field_value_spec.rb +0 -205
  844. data/spec/integration/preview/understand/service/intent/sample_spec.rb +0 -247
  845. data/spec/integration/preview/understand/service/intent_spec.rb +0 -252
  846. data/spec/integration/preview/understand/service_spec.rb +0 -256
@@ -3,252 +3,459 @@ require 'spec_helper'
3
3
  describe Twilio::TwiML::VoiceResponse do
4
4
  context 'Testing Response' do
5
5
  it 'should allow empty response' do
6
- r = Twilio::TwiML::VoiceResponse.new
7
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response/>')
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
8
12
  end
9
13
 
10
14
  it 'should allow using to_xml instead of to_s' do
11
- r = Twilio::TwiML::VoiceResponse.new
12
- expect(r.to_xml).to eq('<?xml version="1.0" encoding="UTF-8"?><Response/>')
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
13
21
  end
14
22
 
15
- it 'should allow populated response' do
16
- r = Twilio::TwiML::VoiceResponse.new
17
- r.hangup
18
- r.leave
19
- r.sms('twilio sms', to: '+11234567890', from: '+10987654321')
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
20
47
 
21
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Hangup/><Leave/><Sms from="+10987654321" to="+11234567890">twilio sms</Sms></Response>')
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
22
79
  end
23
80
 
24
81
  it 'should allow chaining' do
25
- r = Twilio::TwiML::VoiceResponse.new.hangup.leave.sms(
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(
26
90
  'twilio sms',
27
91
  to: '+11234567890',
28
92
  from: '+10987654321'
29
93
  )
30
94
 
31
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Hangup/><Leave/><Sms from="+10987654321" to="+11234567890">twilio sms</Sms></Response>')
95
+ doc = parse(response)
96
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
32
97
  end
33
98
 
34
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
35
107
  response = Twilio::TwiML::VoiceResponse.new do |r|
36
108
  r.hangup
37
109
  r.leave
38
110
  r.sms('twilio sms', to: '+11234567890', from: '+10987654321')
39
111
  end
40
- expect(response.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Hangup/><Leave/><Sms from="+10987654321" to="+11234567890">twilio sms</Sms></Response>')
112
+
113
+ doc = parse(response)
114
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
41
115
  end
42
116
  end
43
117
 
44
118
  context 'Testing Say' do
45
119
  it 'should allow empty say' do
46
- r = Twilio::TwiML::VoiceResponse.new
47
- r.say ''
120
+ expected_doc = parse <<-XML
121
+ <Response>
122
+ <Say></Say>
123
+ </Response>
124
+ XML
125
+ response = Twilio::TwiML::VoiceResponse.new
126
+ response.say(message: '')
48
127
 
49
- # For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
50
- # Ruby 2.4 generates an empty tag
51
- expect(r.to_s)
52
- .to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say></Say></Response>')
53
- .or(eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say/></Response>'))
128
+ doc = parse(response)
129
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
54
130
  end
55
131
 
56
132
  it 'should allow populated say' do
57
- r = Twilio::TwiML::VoiceResponse.new
58
- r.say 'Hello World'
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')
59
140
 
60
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say>Hello World</Say></Response>')
141
+ doc = parse(response)
142
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
61
143
  end
62
144
 
63
145
  it 'should allow unicode say' do
64
- r = Twilio::TwiML::VoiceResponse.new
65
- r.say 'nécessaire et d\'autres'
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')
66
153
 
67
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say>nécessaire et d\'autres</Say></Response>')
154
+ doc = parse(response)
155
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
68
156
  end
69
157
 
70
158
  it 'should allow looping' do
71
- r = Twilio::TwiML::VoiceResponse.new
72
- r.say 'Hello Monkey', loop: 3
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)
73
166
 
74
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say loop="3">Hello Monkey</Say></Response>')
167
+ doc = parse(response)
168
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
75
169
  end
76
170
 
77
171
  it 'should allow languages' do
78
- r = Twilio::TwiML::VoiceResponse.new
79
- r.say 'Hello Monkey', language: 'en-gb'
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')
80
179
 
81
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say language="en-gb">Hello Monkey</Say></Response>')
180
+ doc = parse(response)
181
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
82
182
  end
83
183
 
84
184
  it 'should allow all attributes' do
85
- r = Twilio::TwiML::VoiceResponse.new
86
- r.say 'Hello Monkey', loop: 3, voice: 'man', language: 'fr'
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')
87
192
 
88
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Say language="fr" loop="3" voice="man">Hello Monkey</Say></Response>')
193
+ doc = parse(response)
194
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
89
195
  end
90
196
  end
91
197
 
92
198
  context 'Testing Play' do
93
199
  it 'should allow empty play' do
94
- r = Twilio::TwiML::VoiceResponse.new
95
- r.play
200
+ expected_doc = parse <<-XML
201
+ <Response>
202
+ <Play></Play>
203
+ </Response>
204
+ XML
205
+ response = Twilio::TwiML::VoiceResponse.new
206
+ response.play
96
207
 
97
- # For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
98
- # Ruby 2.4 generates an empty tag
99
- expect(r.to_s)
100
- .to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Play></Play></Response>')
101
- .or(eq('<?xml version="1.0" encoding="UTF-8"?><Response><Play/></Response>'))
208
+ doc = parse(response)
209
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
102
210
  end
103
211
 
104
212
  it 'should play hello' do
105
- r = Twilio::TwiML::VoiceResponse.new
106
- r.play(url: 'http://hellomonkey.mp3')
107
-
108
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Play>http://hellomonkey.mp3</Play></Response>')
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
109
222
  end
110
223
 
111
224
  it 'should play hello on loop' do
112
- r = Twilio::TwiML::VoiceResponse.new
113
- r.play(url: 'http://hellomonkey.mp3', loop: 3)
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)
114
232
 
115
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Play loop="3">http://hellomonkey.mp3</Play></Response>')
233
+ doc = parse(response)
234
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
116
235
  end
117
236
 
118
237
  it 'should play digits' do
119
- r = Twilio::TwiML::VoiceResponse.new
120
- r.play(digits: 'w123')
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')
121
245
 
122
- # For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
123
- # Ruby 2.4 generates an empty tag
124
- expect(r.to_s)
125
- .to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Play digits="w123"></Play></Response>')
126
- .or(eq('<?xml version="1.0" encoding="UTF-8"?><Response><Play digits="w123"/></Response>'))
246
+ doc = parse(response)
247
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
127
248
  end
128
249
  end
129
250
 
130
251
  context 'Testing Record' do
131
252
  it 'should allow empty record' do
132
- r = Twilio::TwiML::VoiceResponse.new
133
- r.record
134
-
135
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Record/></Response>')
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
136
262
  end
137
263
 
138
264
  it 'should allow action and method' do
139
- r = Twilio::TwiML::VoiceResponse.new
140
- r.record(action: 'example.com', method: 'GET')
141
-
142
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Record action="example.com" method="GET"/></Response>')
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
143
274
  end
144
275
 
145
276
  it 'should allow max_length, finish_on_key, and timeout' do
146
- r = Twilio::TwiML::VoiceResponse.new
147
- r.record(timeout: 4, finish_on_key: '#', max_length: 30)
148
-
149
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Record finishOnKey="#" maxLength="30" timeout="4"/></Response>')
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
150
286
  end
151
287
 
152
288
  it 'should allow transcribe' do
153
- r = Twilio::TwiML::VoiceResponse.new
154
- r.record(transcribe_callback: 'example.com')
155
-
156
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Record transcribeCallback="example.com"/></Response>')
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
157
298
  end
158
299
  end
159
300
 
160
301
  context 'Testing Redirect' do
161
302
  it 'should allow empty redirect' do
162
- r = Twilio::TwiML::VoiceResponse.new
163
- r.redirect ''
164
-
165
- # For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
166
- # Ruby 2.4 generates an empty tag
167
- expect(r.to_s)
168
- .to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Redirect></Redirect></Response>')
169
- .or(eq('<?xml version="1.0" encoding="UTF-8"?><Response><Redirect/></Response>'))
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
170
312
  end
171
313
 
172
314
  it 'should allow method' do
173
- r = Twilio::TwiML::VoiceResponse.new
174
- r.redirect('example.com', method: 'POST')
175
-
176
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Redirect method="POST">example.com</Redirect></Response>')
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
177
324
  end
178
325
 
179
326
  it 'should allow method and params' do
180
- r = Twilio::TwiML::VoiceResponse.new
181
- r.redirect('example.com?id=34&action=hey', method: 'POST')
182
-
183
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Redirect method="POST">example.com?id=34&amp;action=hey</Redirect></Response>')
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
184
336
  end
185
337
  end
186
338
 
187
339
  context 'Testing Hangup' do
188
340
  it 'should allow hangup' do
189
- r = Twilio::TwiML::VoiceResponse.new
190
- r.hangup
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
191
351
 
192
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Hangup/></Response>')
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)
193
355
  end
194
356
  end
195
357
 
196
358
  context 'Testing Leave' do
197
359
  it 'should allow leave' do
198
- r = Twilio::TwiML::VoiceResponse.new
199
- r.leave
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
200
370
 
201
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Leave/></Response>')
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)
202
374
  end
203
375
  end
204
376
 
205
377
  context 'Testing Reject' do
206
378
  it 'should reject with a default reason' do
207
- r = Twilio::TwiML::VoiceResponse.new
208
- r.reject
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
209
389
 
210
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Reject/></Response>')
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)
211
393
  end
212
394
  end
213
395
 
214
396
  context 'Testing SMS' do
215
397
  it 'should allow empty SMS' do
216
- r = Twilio::TwiML::VoiceResponse.new
217
- r.sms ''
218
-
219
- # For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
220
- # Ruby 2.4 generates an empty tag
221
- expect(r.to_s)
222
- .to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Sms></Sms></Response>')
223
- .or(eq('<?xml version="1.0" encoding="UTF-8"?><Response><Sms/></Response>'))
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
224
407
  end
225
408
 
226
409
  it 'should allow SMS body' do
227
- r = Twilio::TwiML::VoiceResponse.new
228
- r.sms 'Hello, World'
229
-
230
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Sms>Hello, World</Sms></Response>')
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
231
419
  end
232
420
 
233
421
  it 'should allow to, from, action, and status_callback' do
234
- r = Twilio::TwiML::VoiceResponse.new
235
- r.sms('Hello, World', to: 1_231_231_234, from: 3_453_453_456, status_callback: 'example.com?id=34&action=hey')
236
-
237
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Sms from="3453453456" statusCallback="example.com?id=34&amp;action=hey" to="1231231234">Hello, World</Sms></Response>')
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
238
431
  end
239
432
 
240
433
  it 'should allow action and method' do
241
- r = Twilio::TwiML::VoiceResponse.new
242
- r.sms('Hello', method: 'POST', action: 'example.com?id=34&action=hey')
243
-
244
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Sms action="example.com?id=34&amp;action=hey" method="POST">Hello</Sms></Response>')
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
245
443
  end
246
444
  end
247
445
 
248
446
  context 'Testing Conference' do
249
447
  it 'should allow basic conferencing' do
250
- d = Twilio::TwiML::Dial.new
251
- d.conference(
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(
252
459
  'TestConferenceAttributes',
253
460
  beep: false,
254
461
  wait_url: '',
@@ -256,15 +463,24 @@ describe Twilio::TwiML::VoiceResponse do
256
463
  end_conference_on_exit: true
257
464
  )
258
465
 
259
- r = Twilio::TwiML::VoiceResponse.new
260
- r.append(d)
261
-
262
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Conference beep="false" endConferenceOnExit="true" startConferenceOnEnter="true" waitUrl="">TestConferenceAttributes</Conference></Dial></Response>')
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
263
470
  end
264
471
 
265
472
  it 'should allow muted conferencing' do
266
- d = Twilio::TwiML::Dial.new
267
- d.conference(
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(
268
484
  'TestConferenceMutedAttribute',
269
485
  beep: false,
270
486
  muted: true,
@@ -273,207 +489,359 @@ describe Twilio::TwiML::VoiceResponse do
273
489
  end_conference_on_exit: true
274
490
  )
275
491
 
276
- r = Twilio::TwiML::VoiceResponse.new
277
- r.append(d)
278
-
279
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Conference beep="false" endConferenceOnExit="true" muted="true" startConferenceOnEnter="true" waitUrl="">TestConferenceMutedAttribute</Conference></Dial></Response>')
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
280
496
  end
281
497
  end
282
498
 
283
499
  context 'Testing Queue' do
284
500
  it 'should allow queues in VoiceResponse' do
285
- d = Twilio::TwiML::Dial.new
286
- d.queue('TestQueueAttribute', url: '', method: 'GET')
287
-
288
- r = Twilio::TwiML::VoiceResponse.new
289
- r.append(d)
290
-
291
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Queue method="GET" url="">TestQueueAttribute</Queue></Dial></Response>')
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
292
515
  end
293
516
  end
294
517
 
295
518
  context 'Testing Echo' do
296
519
  it 'should allow VoiceResponse Echo' do
297
- r = Twilio::TwiML::VoiceResponse.new
298
- r.echo
299
-
300
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Echo/></Response>')
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
301
529
  end
302
530
  end
303
531
 
304
532
  context 'Testing Enqueue' do
305
533
  it 'should allow VoiceResponse.enqueue' do
306
- r = Twilio::TwiML::VoiceResponse.new
307
- r.enqueue(
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(
308
541
  name: 'TestEnqueueAttribute',
309
542
  action: 'act',
310
543
  method: 'GET',
311
544
  wait_url: 'wait',
312
545
  wait_url_method: 'POST'
313
546
  )
314
-
315
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Enqueue action="act" method="GET" waitUrl="wait" waitUrlMethod="POST">TestEnqueueAttribute</Enqueue></Response>')
547
+ doc = parse(response)
548
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
316
549
  end
317
550
 
318
551
  it 'should allow Enqueue.task and appending Enqueue' do
319
- e = Twilio::TwiML::Enqueue.new(name: nil, workflow_sid: '123123123')
320
- e.task('{"account_sid": "AC123123123"}')
321
-
322
- r = Twilio::TwiML::VoiceResponse.new
323
- r.append(e)
324
-
325
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Enqueue workflowSid="123123123"><Task>{"account_sid": "AC123123123"}</Task></Enqueue></Response>')
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
326
567
  end
327
568
 
328
569
  it 'should allow Enqueue.task with a dictionary and appending Enqueue' do
329
- e = Twilio::TwiML::Enqueue.new(name: nil, workflow_sid: '123123123')
330
- e.task({ account_sid: 'AC123123123' })
331
-
332
- r = Twilio::TwiML::VoiceResponse.new
333
- r.append(e)
334
-
335
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Enqueue workflowSid="123123123"><Task>{"account_sid":"AC123123123"}</Task></Enqueue></Response>')
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
336
585
  end
337
586
  end
338
587
 
339
588
  context 'Testing Dial' do
340
589
  it 'should allow VoiceResponse.dial' do
341
- r = Twilio::TwiML::VoiceResponse.new
342
- r.dial(number: '1231231234')
343
-
344
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial>1231231234</Dial></Response>')
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
345
599
  end
346
600
 
347
601
  it 'should allow Dial.sim' do
348
- d = Twilio::TwiML::Dial.new
349
- d.sim '123123123'
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'
350
611
 
351
- r = Twilio::TwiML::VoiceResponse.new
352
- r.append(d)
612
+ response = Twilio::TwiML::VoiceResponse.new
613
+ response.append(dial)
353
614
 
354
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Sim>123123123</Sim></Dial></Response>')
615
+ doc = parse(response)
616
+ expect(doc).to be_equivalent_to(expected_doc).respecting_element_order
355
617
  end
356
618
 
357
619
  it 'should allow Dial.sip' do
358
- d = Twilio::TwiML::Dial.new
359
- d.sip 'foo@example.com'
360
-
361
- r = Twilio::TwiML::VoiceResponse.new
362
- r.append(d)
363
-
364
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Sip>foo@example.com</Sip></Dial></Response>')
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
365
634
  end
366
635
 
367
636
  it 'should allow Dial.sip with username, password' do
368
- d = Twilio::TwiML::Dial.new
369
- d.sip('foo@example.com', username: 'foo', password: 'bar')
370
-
371
- r = Twilio::TwiML::VoiceResponse.new
372
- r.append(d)
373
-
374
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Sip password="bar" username="foo">foo@example.com</Sip></Dial></Response>')
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
375
651
  end
376
652
 
377
653
  it 'should allow Dial.number' do
378
- d = Twilio::TwiML::Dial.new
379
- d.number '1231231234'
380
-
381
- r = Twilio::TwiML::VoiceResponse.new
382
- r.append(d)
383
-
384
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Number>1231231234</Number></Dial></Response>')
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
385
668
  end
386
669
 
387
670
  it 'should allow Dial.number with params' do
388
- d = Twilio::TwiML::Dial.new
389
- d.number('1231231234', status_callback: 'http://example.com', status_callback_event: 'initiated completed')
390
-
391
- r = Twilio::TwiML::VoiceResponse.new
392
- r.append(d)
393
-
394
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Number statusCallback="http://example.com" statusCallbackEvent="initiated completed">1231231234</Number></Dial></Response>')
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
395
685
  end
396
686
 
397
687
  it 'should allow Dial.conference' do
398
- d = Twilio::TwiML::Dial.new
399
- d.conference 'My Room'
400
-
401
- r = Twilio::TwiML::VoiceResponse.new
402
- r.append(d)
403
-
404
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Conference>My Room</Conference></Dial></Response>')
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
405
702
  end
406
703
 
407
704
  it 'should allow Dial.queue' do
408
- d = Twilio::TwiML::Dial.new
409
- d.queue 'The Cute Queue'
410
-
411
- r = Twilio::TwiML::VoiceResponse.new
412
- r.append(d)
413
-
414
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Queue>The Cute Queue</Queue></Dial></Response>')
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
415
719
  end
416
720
 
417
721
  it 'should allow empty Dial.client' do
418
- d = Twilio::TwiML::Dial.new
419
- d.client ''
420
-
421
- r = Twilio::TwiML::VoiceResponse.new
422
- r.append(d)
423
-
424
- # For Ruby 2.0, 2.1, 2.2 both opening and closing tags are generated
425
- # Ruby 2.4 generates an empty tag
426
- expect(r.to_s)
427
- .to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Client></Client></Dial></Response>')
428
- .or(eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Client/></Dial></Response>'))
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
429
736
  end
430
737
 
431
738
  it 'should allow populated Dial.client' do
432
- d = Twilio::TwiML::Dial.new
433
- d.client 'alice'
434
-
435
- r = Twilio::TwiML::VoiceResponse.new
436
- r.append(d)
437
-
438
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Dial><Client>alice</Client></Dial></Response>')
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
439
776
  end
440
777
  end
441
778
 
442
779
  context 'Testing Gather' do
443
780
  it 'should allow empty Gather' do
444
- r = Twilio::TwiML::VoiceResponse.new
445
- r.gather
446
-
447
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Gather/></Response>')
448
- end
449
-
450
- it 'should allow Gather.say' do
451
- g = Twilio::TwiML::Gather.new
452
- g.say 'Hello'
453
-
454
- r = Twilio::TwiML::VoiceResponse.new
455
- r.append(g)
456
-
457
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?><Response><Gather><Say>Hello</Say></Gather></Response>')
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
458
807
  end
459
808
 
460
809
  it 'should allow nested play and pause' do
461
- g = Twilio::TwiML::Gather.new
462
- g.say 'Hey'
463
- g.play(url: 'hey.mp3')
464
- g.pause
465
-
466
- r = Twilio::TwiML::VoiceResponse.new
467
- r.append(g)
468
-
469
- expect(r.to_s).to eq('<?xml version="1.0" encoding="UTF-8"?>' \
470
- '<Response>' \
471
- '<Gather>' \
472
- '<Say>Hey</Say>' \
473
- '<Play>hey.mp3</Play>' \
474
- '<Pause/>' \
475
- '</Gather>' \
476
- '</Response>')
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
477
845
  end
478
846
  end
479
847
  end