twilio-ruby 5.6.0 → 5.33.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (848) 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 +34 -11
  7. data/CHANGES.md +1163 -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 +8 -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 +473 -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 +225 -0
  358. data/lib/twilio-ruby/rest/studio/v2/flow/execution/execution_step/execution_step_context.rb +242 -0
  359. data/lib/twilio-ruby/rest/studio/v2/flow/execution/execution_step.rb +388 -0
  360. data/lib/twilio-ruby/rest/studio/v2/flow/execution.rb +474 -0
  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 +507 -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 +63 -12
  460. data/lib/twilio-ruby/twiml/voice_response.rb +678 -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 +12 -16
  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 +217 -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 +214 -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 +254 -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 +22 -12
  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 +11 -7
  822. metadata +528 -92
  823. data/lib/twilio-ruby/rest/notify/v1/service/user/segment_memberships.rb +0 -260
  824. data/lib/twilio-ruby/rest/notify/v1/service/user/user_binding.rb +0 -431
  825. data/lib/twilio-ruby/rest/notify/v1/service/user.rb +0 -419
  826. data/lib/twilio-ruby/rest/preview/acc_security/service/verification.rb +0 -183
  827. data/lib/twilio-ruby/rest/preview/proxy/service/session/interaction.rb +0 -435
  828. data/lib/twilio-ruby/rest/preview/proxy/service/session.rb +0 -495
  829. data/lib/twilio-ruby/rest/preview/proxy/service.rb +0 -462
  830. data/spec/integration/notify/v1/service/segment_spec.rb +0 -84
  831. data/spec/integration/notify/v1/service/user/segment_memberships_spec.rb +0 -116
  832. data/spec/integration/notify/v1/service/user/user_binding_spec.rb +0 -266
  833. data/spec/integration/notify/v1/service/user_spec.rb +0 -211
  834. data/spec/integration/preview/acc_security/service/verification_check_spec.rb +0 -50
  835. data/spec/integration/preview/acc_security/service/verification_spec.rb +0 -50
  836. data/spec/integration/preview/acc_security/service_spec.rb +0 -183
  837. data/spec/integration/preview/proxy/service/phone_number_spec.rb +0 -171
  838. data/spec/integration/preview/proxy/service/session/interaction_spec.rb +0 -104
  839. data/spec/integration/preview/proxy/service/session/participant/message_interaction_spec.rb +0 -164
  840. data/spec/integration/preview/proxy/service/session/participant_spec.rb +0 -224
  841. data/spec/integration/preview/proxy/service/session_spec.rb +0 -216
  842. data/spec/integration/preview/proxy/service/short_code_spec.rb +0 -171
  843. data/spec/integration/preview/proxy/service_spec.rb +0 -200
  844. data/spec/integration/preview/studio/flow/engagement/step_spec.rb +0 -96
  845. data/spec/integration/preview/understand/service/field_type/field_value_spec.rb +0 -205
  846. data/spec/integration/preview/understand/service/intent/sample_spec.rb +0 -247
  847. data/spec/integration/preview/understand/service/intent_spec.rb +0 -252
  848. 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