slack-ruby-client 0.7.9 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (358) hide show
  1. checksums.yaml +5 -5
  2. data/.github/FUNDING.yml +1 -0
  3. data/.gitignore +2 -0
  4. data/.rubocop.yml +32 -1
  5. data/.rubocop_todo.yml +98 -49
  6. data/.travis.yml +10 -14
  7. data/CHANGELOG.md +172 -24
  8. data/CONTRIBUTING.md +17 -6
  9. data/Dangerfile +2 -0
  10. data/Gemfile +10 -4
  11. data/LICENSE.md +1 -1
  12. data/README.md +276 -54
  13. data/RELEASING.md +19 -11
  14. data/Rakefile +2 -1
  15. data/UPGRADING.md +84 -2
  16. data/bin/commands.rb +43 -1
  17. data/bin/commands/admin_analytics.rb +15 -0
  18. data/bin/commands/admin_apps.rb +40 -0
  19. data/bin/commands/admin_apps_approved.rb +17 -0
  20. data/bin/commands/admin_apps_requests.rb +16 -0
  21. data/bin/commands/admin_apps_restricted.rb +17 -0
  22. data/bin/commands/admin_barriers.rb +47 -0
  23. data/bin/commands/admin_conversations.rb +169 -0
  24. data/bin/commands/admin_conversations_ekm.rb +17 -0
  25. data/bin/commands/admin_conversations_restrictAccess.rb +37 -0
  26. data/bin/commands/admin_conversations_whitelist.rb +37 -0
  27. data/bin/commands/admin_emoji.rb +54 -0
  28. data/bin/commands/admin_inviteRequests.rb +36 -0
  29. data/bin/commands/admin_inviteRequests_approved.rb +16 -0
  30. data/bin/commands/admin_inviteRequests_denied.rb +16 -0
  31. data/bin/commands/admin_teams.rb +27 -0
  32. data/bin/commands/admin_teams_admins.rb +16 -0
  33. data/bin/commands/admin_teams_owners.rb +16 -0
  34. data/bin/commands/admin_teams_settings.rb +64 -0
  35. data/bin/commands/admin_usergroups.rb +48 -0
  36. data/bin/commands/admin_users.rb +97 -0
  37. data/bin/commands/admin_users_session.rb +38 -0
  38. data/bin/commands/api.rb +3 -3
  39. data/bin/commands/apps.rb +15 -0
  40. data/bin/commands/apps_connections.rb +13 -0
  41. data/bin/commands/apps_event_authorizations.rb +16 -0
  42. data/bin/commands/apps_permissions.rb +23 -0
  43. data/bin/commands/apps_permissions_resources.rb +15 -0
  44. data/bin/commands/apps_permissions_scopes.rb +13 -0
  45. data/bin/commands/apps_permissions_users.rb +26 -0
  46. data/bin/commands/auth.rb +5 -4
  47. data/bin/commands/auth_teams.rb +16 -0
  48. data/bin/commands/bots.rb +4 -2
  49. data/bin/commands/calls.rb +52 -0
  50. data/bin/commands/calls_participants.rb +25 -0
  51. data/bin/commands/channels.rb +64 -43
  52. data/bin/commands/chat.rb +114 -24
  53. data/bin/commands/chat_scheduledMessages.rb +19 -0
  54. data/bin/commands/conversations.rb +196 -0
  55. data/bin/commands/dialog.rb +15 -0
  56. data/bin/commands/dnd.rb +9 -8
  57. data/bin/commands/emoji.rb +3 -2
  58. data/bin/commands/files.rb +45 -30
  59. data/bin/commands/files_comments.rb +3 -24
  60. data/bin/commands/files_remote.rb +78 -0
  61. data/bin/commands/groups.rb +53 -53
  62. data/bin/commands/im.rb +17 -13
  63. data/bin/commands/migration.rb +16 -0
  64. data/bin/commands/mpim.rb +16 -13
  65. data/bin/commands/oauth.rb +17 -2
  66. data/bin/commands/oauth_v2.rb +17 -0
  67. data/bin/commands/pins.rb +7 -10
  68. data/bin/commands/reactions.rb +17 -15
  69. data/bin/commands/reminders.rb +11 -10
  70. data/bin/commands/rtm.rb +19 -4
  71. data/bin/commands/search.rb +15 -11
  72. data/bin/commands/stars.rb +11 -8
  73. data/bin/commands/team.rb +15 -10
  74. data/bin/commands/team_profile.rb +3 -2
  75. data/bin/commands/usergroups.rb +22 -16
  76. data/bin/commands/usergroups_users.rb +7 -4
  77. data/bin/commands/users.rb +65 -37
  78. data/bin/commands/users_admin.rb +29 -0
  79. data/bin/commands/users_prefs.rb +13 -0
  80. data/bin/commands/users_profile.rb +8 -7
  81. data/bin/commands/views.rb +48 -0
  82. data/bin/commands/workflows.rb +38 -0
  83. data/bin/slack +3 -4
  84. data/examples/hi_real_time_and_web/Gemfile +1 -0
  85. data/examples/hi_real_time_and_web/hi.rb +8 -4
  86. data/examples/{hi_real_time_async_eventmachine → hi_real_time_async_async}/Gemfile +2 -1
  87. data/examples/{hi_real_time_async_celluloid → hi_real_time_async_async}/Procfile +0 -0
  88. data/examples/{hi_real_time_async_celluloid → hi_real_time_async_async}/hi.rb +13 -8
  89. data/examples/hi_web/Gemfile +1 -0
  90. data/examples/hi_web/hi.rb +2 -1
  91. data/examples/new_ticket/Gemfile +1 -0
  92. data/examples/new_ticket/new_ticket.rb +2 -1
  93. data/lib/slack-ruby-client.rb +40 -26
  94. data/lib/slack.rb +1 -0
  95. data/lib/slack/config.rb +1 -0
  96. data/lib/slack/events/config.rb +32 -0
  97. data/lib/slack/events/request.rb +70 -0
  98. data/lib/slack/logger.rb +6 -5
  99. data/lib/slack/messages/formatting.rb +4 -4
  100. data/lib/slack/messages/message.rb +2 -6
  101. data/lib/slack/real_time/api/message.rb +3 -1
  102. data/lib/slack/real_time/api/message_id.rb +1 -0
  103. data/lib/slack/real_time/api/ping.rb +5 -2
  104. data/lib/slack/real_time/api/templates/event_handler.erb +1 -1
  105. data/lib/slack/real_time/api/typing.rb +3 -1
  106. data/lib/slack/real_time/client.rb +113 -32
  107. data/lib/slack/real_time/concurrency.rb +2 -2
  108. data/lib/slack/real_time/concurrency/async.rb +140 -0
  109. data/lib/slack/real_time/config.rb +20 -12
  110. data/lib/slack/real_time/models.rb +8 -7
  111. data/lib/slack/real_time/models/base.rb +2 -6
  112. data/lib/slack/real_time/models/bot.rb +1 -0
  113. data/lib/slack/real_time/models/channel.rb +1 -0
  114. data/lib/slack/real_time/models/group.rb +1 -0
  115. data/lib/slack/real_time/models/im.rb +1 -0
  116. data/lib/slack/real_time/models/team.rb +1 -0
  117. data/lib/slack/real_time/models/user.rb +1 -0
  118. data/lib/slack/real_time/socket.rb +46 -17
  119. data/lib/slack/real_time/stores.rb +4 -3
  120. data/lib/slack/real_time/stores/base.rb +5 -3
  121. data/lib/slack/real_time/stores/starter.rb +113 -72
  122. data/lib/slack/real_time/stores/store.rb +131 -88
  123. data/lib/slack/version.rb +2 -1
  124. data/lib/slack/web/api/endpoints.rb +110 -26
  125. data/lib/slack/web/api/endpoints/admin_analytics.rb +26 -0
  126. data/lib/slack/web/api/endpoints/admin_apps.rb +62 -0
  127. data/lib/slack/web/api/endpoints/admin_apps_approved.rb +35 -0
  128. data/lib/slack/web/api/endpoints/admin_apps_requests.rb +33 -0
  129. data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -0
  130. data/lib/slack/web/api/endpoints/admin_barriers.rb +82 -0
  131. data/lib/slack/web/api/endpoints/admin_conversations.rb +260 -0
  132. data/lib/slack/web/api/endpoints/admin_conversations_ekm.rb +35 -0
  133. data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +61 -0
  134. data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +64 -0
  135. data/lib/slack/web/api/endpoints/admin_emoji.rb +88 -0
  136. data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +61 -0
  137. data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +33 -0
  138. data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +33 -0
  139. data/lib/slack/web/api/endpoints/admin_teams.rb +50 -0
  140. data/lib/slack/web/api/endpoints/admin_teams_admins.rb +34 -0
  141. data/lib/slack/web/api/endpoints/admin_teams_owners.rb +34 -0
  142. data/lib/slack/web/api/endpoints/admin_teams_settings.rb +99 -0
  143. data/lib/slack/web/api/endpoints/admin_usergroups.rb +77 -0
  144. data/lib/slack/web/api/endpoints/admin_users.rb +161 -0
  145. data/lib/slack/web/api/endpoints/admin_users_session.rb +66 -0
  146. data/lib/slack/web/api/endpoints/api.rb +3 -4
  147. data/lib/slack/web/api/endpoints/apps.rb +27 -0
  148. data/lib/slack/web/api/endpoints/apps_connections.rb +21 -0
  149. data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +34 -0
  150. data/lib/slack/web/api/endpoints/apps_permissions.rb +36 -0
  151. data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +31 -0
  152. data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +21 -0
  153. data/lib/slack/web/api/endpoints/apps_permissions_users.rb +50 -0
  154. data/lib/slack/web/api/endpoints/auth.rb +5 -4
  155. data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
  156. data/lib/slack/web/api/endpoints/bots.rb +5 -2
  157. data/lib/slack/web/api/endpoints/calls.rb +83 -0
  158. data/lib/slack/web/api/endpoints/calls_participants.rb +42 -0
  159. data/lib/slack/web/api/endpoints/channels.rb +105 -49
  160. data/lib/slack/web/api/endpoints/chat.rb +221 -40
  161. data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +40 -0
  162. data/lib/slack/web/api/endpoints/conversations.rb +332 -0
  163. data/lib/slack/web/api/endpoints/dialog.rb +33 -0
  164. data/lib/slack/web/api/endpoints/dnd.rb +11 -9
  165. data/lib/slack/web/api/endpoints/emoji.rb +3 -2
  166. data/lib/slack/web/api/endpoints/files.rb +75 -38
  167. data/lib/slack/web/api/endpoints/files_comments.rb +3 -38
  168. data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
  169. data/lib/slack/web/api/endpoints/groups.rb +76 -53
  170. data/lib/slack/web/api/endpoints/im.rb +38 -21
  171. data/lib/slack/web/api/endpoints/migration.rb +28 -0
  172. data/lib/slack/web/api/endpoints/mpim.rb +37 -22
  173. data/lib/slack/web/api/endpoints/oauth.rb +25 -4
  174. data/lib/slack/web/api/endpoints/oauth_v2.rb +30 -0
  175. data/lib/slack/web/api/endpoints/pins.rb +10 -19
  176. data/lib/slack/web/api/endpoints/presence.rb +1 -1
  177. data/lib/slack/web/api/endpoints/reactions.rb +37 -28
  178. data/lib/slack/web/api/endpoints/reminders.rb +11 -10
  179. data/lib/slack/web/api/endpoints/rtm.rb +28 -7
  180. data/lib/slack/web/api/endpoints/search.rb +21 -14
  181. data/lib/slack/web/api/endpoints/stars.rb +24 -15
  182. data/lib/slack/web/api/endpoints/team.rb +21 -13
  183. data/lib/slack/web/api/endpoints/team_profile.rb +3 -2
  184. data/lib/slack/web/api/endpoints/usergroups.rb +33 -22
  185. data/lib/slack/web/api/endpoints/usergroups_users.rb +9 -4
  186. data/lib/slack/web/api/endpoints/users.rb +78 -29
  187. data/lib/slack/web/api/endpoints/users_admin.rb +49 -0
  188. data/lib/slack/web/api/endpoints/users_prefs.rb +21 -0
  189. data/lib/slack/web/api/endpoints/users_profile.rb +11 -10
  190. data/lib/slack/web/api/endpoints/views.rb +97 -0
  191. data/lib/slack/web/api/endpoints/workflows.rb +61 -0
  192. data/lib/slack/web/api/error.rb +2 -8
  193. data/lib/slack/web/api/errors.rb +850 -0
  194. data/lib/slack/web/api/errors/internal_error.rb +14 -0
  195. data/lib/slack/web/api/errors/slack_error.rb +29 -0
  196. data/lib/slack/web/api/errors/too_many_requests_error.rb +24 -0
  197. data/lib/slack/web/api/mixins.rb +6 -4
  198. data/lib/slack/web/api/mixins/channels.id.rb +6 -7
  199. data/lib/slack/web/api/mixins/conversations.id.rb +25 -0
  200. data/lib/slack/web/api/mixins/groups.id.rb +6 -7
  201. data/lib/slack/web/api/mixins/ids.id.rb +24 -0
  202. data/lib/slack/web/api/mixins/users.id.rb +6 -7
  203. data/lib/slack/web/api/mixins/users.search.rb +39 -36
  204. data/lib/slack/web/api/patches/chat.1.patch +72 -0
  205. data/lib/slack/web/api/patches/dialog.1.open-json-support.patch +17 -0
  206. data/lib/slack/web/api/patches/views.1.view-json.patch +40 -0
  207. data/lib/slack/web/api/patches/views.1.views-published.patch +16 -0
  208. data/lib/slack/web/api/templates/command.erb +5 -3
  209. data/lib/slack/web/api/templates/commands.erb +2 -1
  210. data/lib/slack/web/api/templates/endpoints.erb +5 -3
  211. data/lib/slack/web/api/templates/errors.erb +20 -0
  212. data/lib/slack/web/api/templates/method.erb +26 -4
  213. data/lib/slack/web/api/templates/method_spec.erb +3 -2
  214. data/lib/slack/web/client.rb +2 -1
  215. data/lib/slack/web/config.rb +21 -10
  216. data/lib/slack/web/faraday/connection.rb +25 -16
  217. data/lib/slack/web/faraday/request.rb +2 -0
  218. data/lib/slack/web/faraday/response/raise_error.rb +23 -1
  219. data/lib/slack/web/faraday/response/wrap_error.rb +18 -0
  220. data/lib/slack/web/pagination/cursor.rb +52 -0
  221. data/lib/slack_ruby_client.rb +1 -0
  222. data/lib/tasks/git.rake +2 -1
  223. data/lib/tasks/real_time.rake +16 -6
  224. data/lib/tasks/update.rake +1 -0
  225. data/lib/tasks/web.rake +38 -10
  226. data/screenshots/create-app.png +0 -0
  227. data/slack-ruby-client.gemspec +9 -6
  228. data/spec/fixtures/slack/web/429_error.yml +2 -0
  229. data/spec/fixtures/slack/web/503_error.yml +14 -0
  230. data/spec/fixtures/slack/web/channels_info.yml +108 -15
  231. data/spec/fixtures/slack/web/conversations_setTopic.yml +69 -0
  232. data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +142 -0
  233. data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +208 -0
  234. data/spec/fixtures/slack/web/paginated_users_list.yml +181 -0
  235. data/spec/fixtures/slack/web/rtm_connect.yml +70 -0
  236. data/spec/fixtures/slack/web/rtm_start.yml +1 -1
  237. data/spec/fixtures/slack/web/views_open_error.yml +76 -0
  238. data/spec/integration/integration_spec.rb +116 -48
  239. data/spec/slack/config_spec.rb +2 -0
  240. data/spec/slack/events/config_spec.rb +33 -0
  241. data/spec/slack/events/request_spec.rb +183 -0
  242. data/spec/slack/messages/formatting_spec.rb +25 -14
  243. data/spec/slack/real_time/api/message_spec.rb +6 -1
  244. data/spec/slack/real_time/api/ping_spec.rb +2 -0
  245. data/spec/slack/real_time/api/typing_spec.rb +5 -1
  246. data/spec/slack/real_time/client_spec.rb +462 -134
  247. data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +3 -1
  248. data/spec/slack/real_time/event_handlers/bot_spec.rb +6 -3
  249. data/spec/slack/real_time/event_handlers/channel_spec.rb +9 -6
  250. data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +3 -2
  251. data/spec/slack/real_time/event_handlers/group_spec.rb +5 -4
  252. data/spec/slack/real_time/event_handlers/im_spec.rb +4 -3
  253. data/spec/slack/real_time/event_handlers/team_spec.rb +8 -4
  254. data/spec/slack/real_time/event_handlers/user_spec.rb +5 -2
  255. data/spec/slack/real_time/rtm_connect_spec.rb +14 -0
  256. data/spec/slack/real_time/rtm_start_spec.rb +1 -0
  257. data/spec/slack/real_time/store_spec.rb +2 -1
  258. data/spec/slack/slack_spec.rb +39 -7
  259. data/spec/slack/version_spec.rb +2 -1
  260. data/spec/slack/web/api/endpoints/admin_analytics_spec.rb +13 -0
  261. data/spec/slack/web/api/endpoints/admin_apps_approved_spec.rb +8 -0
  262. data/spec/slack/web/api/endpoints/admin_apps_requests_spec.rb +8 -0
  263. data/spec/slack/web/api/endpoints/admin_apps_restricted_spec.rb +8 -0
  264. data/spec/slack/web/api/endpoints/admin_apps_spec.rb +13 -0
  265. data/spec/slack/web/api/endpoints/admin_barriers_spec.rb +38 -0
  266. data/spec/slack/web/api/endpoints/admin_conversations_ekm_spec.rb +8 -0
  267. data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +32 -0
  268. data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +98 -0
  269. data/spec/slack/web/api/endpoints/admin_conversations_whitelist_spec.rb +32 -0
  270. data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +37 -0
  271. data/spec/slack/web/api/endpoints/admin_inviteRequests_approved_spec.rb +8 -0
  272. data/spec/slack/web/api/endpoints/admin_inviteRequests_denied_spec.rb +8 -0
  273. data/spec/slack/web/api/endpoints/admin_inviteRequests_spec.rb +18 -0
  274. data/spec/slack/web/api/endpoints/admin_teams_admins_spec.rb +13 -0
  275. data/spec/slack/web/api/endpoints/admin_teams_owners_spec.rb +13 -0
  276. data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +53 -0
  277. data/spec/slack/web/api/endpoints/admin_teams_spec.rb +16 -0
  278. data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +37 -0
  279. data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +21 -0
  280. data/spec/slack/web/api/endpoints/admin_users_spec.rb +67 -0
  281. data/spec/slack/web/api/endpoints/api_spec.rb +1 -0
  282. data/spec/slack/web/api/endpoints/apps_connections_spec.rb +8 -0
  283. data/spec/slack/web/api/endpoints/apps_event_authorizations_spec.rb +13 -0
  284. data/spec/slack/web/api/endpoints/apps_permissions_resources_spec.rb +8 -0
  285. data/spec/slack/web/api/endpoints/apps_permissions_scopes_spec.rb +8 -0
  286. data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +16 -0
  287. data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +19 -0
  288. data/spec/slack/web/api/endpoints/apps_spec.rb +16 -0
  289. data/spec/slack/web/api/endpoints/auth_teams_spec.rb +8 -0
  290. data/spec/slack/web/api/endpoints/bots_spec.rb +1 -0
  291. data/spec/slack/web/api/endpoints/calls_participants_spec.rb +24 -0
  292. data/spec/slack/web/api/endpoints/calls_spec.rb +31 -0
  293. data/spec/slack/web/api/endpoints/chat_scheduledMessages_spec.rb +8 -0
  294. data/spec/slack/web/api/endpoints/conversations_spec.rb +109 -0
  295. data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +13 -4
  296. data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +5 -3
  297. data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +140 -24
  298. data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +36 -0
  299. data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +2 -0
  300. data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +21 -6
  301. data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +95 -0
  302. data/spec/slack/web/api/endpoints/dnd_spec.rb +6 -0
  303. data/spec/slack/web/api/endpoints/emoji_spec.rb +1 -0
  304. data/spec/slack/web/api/endpoints/files_comments_spec.rb +3 -21
  305. data/spec/slack/web/api/endpoints/files_remote_spec.rb +24 -0
  306. data/spec/slack/web/api/endpoints/files_spec.rb +17 -5
  307. data/spec/slack/web/api/endpoints/im_spec.rb +5 -4
  308. data/spec/slack/web/api/endpoints/migration_spec.rb +13 -0
  309. data/spec/slack/web/api/endpoints/mpim_spec.rb +5 -4
  310. data/spec/slack/web/api/endpoints/oauth_spec.rb +5 -4
  311. data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +13 -0
  312. data/spec/slack/web/api/endpoints/pins_spec.rb +1 -0
  313. data/spec/slack/web/api/endpoints/reactions_spec.rb +8 -1
  314. data/spec/slack/web/api/endpoints/reminders_spec.rb +3 -2
  315. data/spec/slack/web/api/endpoints/rtm_spec.rb +1 -0
  316. data/spec/slack/web/api/endpoints/search_spec.rb +1 -0
  317. data/spec/slack/web/api/endpoints/stars_spec.rb +1 -0
  318. data/spec/slack/web/api/endpoints/team_profile_spec.rb +1 -0
  319. data/spec/slack/web/api/endpoints/team_spec.rb +1 -0
  320. data/spec/slack/web/api/endpoints/usergroups_spec.rb +1 -0
  321. data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +3 -2
  322. data/spec/slack/web/api/endpoints/users_admin_spec.rb +18 -0
  323. data/spec/slack/web/api/endpoints/users_prefs_spec.rb +8 -0
  324. data/spec/slack/web/api/endpoints/users_profile_spec.rb +1 -0
  325. data/spec/slack/web/api/endpoints/views_spec.rb +29 -0
  326. data/spec/slack/web/api/endpoints/workflows_spec.rb +26 -0
  327. data/spec/slack/web/api/error_spec.rb +5 -3
  328. data/spec/slack/web/api/errors/slack_error_spec.rb +38 -0
  329. data/spec/slack/web/api/mixins/channels_spec.rb +24 -12
  330. data/spec/slack/web/api/mixins/conversations_list_spec.rb +21 -0
  331. data/spec/slack/web/api/mixins/conversations_spec.rb +43 -0
  332. data/spec/slack/web/api/mixins/groups_spec.rb +24 -12
  333. data/spec/slack/web/api/mixins/users_spec.rb +30 -17
  334. data/spec/slack/web/api/pagination/cursor_spec.rb +100 -0
  335. data/spec/slack/web/client_spec.rb +215 -14
  336. data/spec/slack/web/faraday/response/raise_error_spec.rb +85 -0
  337. data/spec/spec_helper.rb +8 -1
  338. data/spec/support/queue_with_timeout.rb +6 -5
  339. data/spec/support/real_time/concurrency/mock.rb +2 -2
  340. data/spec/support/real_time/connected_client.rb +13 -2
  341. data/spec/support/real_time/event.rb +1 -0
  342. data/spec/support/token.rb +1 -0
  343. data/spec/support/vcr.rb +6 -1
  344. metadata +280 -55
  345. data/examples/hi_real_time/Gemfile +0 -5
  346. data/examples/hi_real_time/hi.gif +0 -0
  347. data/examples/hi_real_time/hi.rb +0 -37
  348. data/examples/hi_real_time_async_celluloid/Gemfile +0 -6
  349. data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
  350. data/examples/hi_real_time_async_eventmachine/hi.rb +0 -36
  351. data/lib/slack/real_time/concurrency/celluloid.rb +0 -113
  352. data/lib/slack/real_time/concurrency/eventmachine.rb +0 -60
  353. data/lib/slack/web/api/patches/chat.1.text-attachments-required.patch +0 -13
  354. data/lib/slack/web/api/patches/chat.2.attachments-json.patch +0 -17
  355. data/lib/slack/web/api/patches/chat.3.update-attachments-support.patch +0 -20
  356. data/screenshots/register-bot.png +0 -0
  357. data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -31
  358. data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -47
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # This file was auto-generated by lib/tasks/web.rake
2
3
 
3
4
  require 'spec_helper'
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Slack::Web::Api::Endpoints::AppsConnections do
7
+ let(:client) { Slack::Web::Client.new }
8
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Slack::Web::Api::Endpoints::AppsEventAuthorizations do
7
+ let(:client) { Slack::Web::Client.new }
8
+ context 'apps.event.authorizations_list' do
9
+ it 'requires event_context' do
10
+ expect { client.apps_event_authorizations_list }.to raise_error ArgumentError, /Required arguments :event_context missing/
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Slack::Web::Api::Endpoints::AppsPermissionsResources do
7
+ let(:client) { Slack::Web::Client.new }
8
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Slack::Web::Api::Endpoints::AppsPermissionsScopes do
7
+ let(:client) { Slack::Web::Client.new }
8
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Slack::Web::Api::Endpoints::AppsPermissions do
7
+ let(:client) { Slack::Web::Client.new }
8
+ context 'apps.permissions_request' do
9
+ it 'requires scopes' do
10
+ expect { client.apps_permissions_request(trigger_id: %q[]) }.to raise_error ArgumentError, /Required arguments :scopes missing/
11
+ end
12
+ it 'requires trigger_id' do
13
+ expect { client.apps_permissions_request(scopes: %q[]) }.to raise_error ArgumentError, /Required arguments :trigger_id missing/
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Slack::Web::Api::Endpoints::AppsPermissionsUsers do
7
+ let(:client) { Slack::Web::Client.new }
8
+ context 'apps.permissions.users_request' do
9
+ it 'requires scopes' do
10
+ expect { client.apps_permissions_users_request(trigger_id: %q[], user: %q[]) }.to raise_error ArgumentError, /Required arguments :scopes missing/
11
+ end
12
+ it 'requires trigger_id' do
13
+ expect { client.apps_permissions_users_request(scopes: %q[], user: %q[]) }.to raise_error ArgumentError, /Required arguments :trigger_id missing/
14
+ end
15
+ it 'requires user' do
16
+ expect { client.apps_permissions_users_request(scopes: %q[], trigger_id: %q[]) }.to raise_error ArgumentError, /Required arguments :user missing/
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Slack::Web::Api::Endpoints::Apps do
7
+ let(:client) { Slack::Web::Client.new }
8
+ context 'apps_uninstall' do
9
+ it 'requires client_id' do
10
+ expect { client.apps_uninstall(client_secret: %q[f25b5ceaf8a3c2a2c4f52bb4f0b0499e]) }.to raise_error ArgumentError, /Required arguments :client_id missing/
11
+ end
12
+ it 'requires client_secret' do
13
+ expect { client.apps_uninstall(client_id: %q[56579136444.26251006572]) }.to raise_error ArgumentError, /Required arguments :client_secret missing/
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Slack::Web::Api::Endpoints::AuthTeams do
7
+ let(:client) { Slack::Web::Client.new }
8
+ end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  # This file was auto-generated by lib/tasks/web.rake
2
3
 
3
4
  require 'spec_helper'
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Slack::Web::Api::Endpoints::CallsParticipants do
7
+ let(:client) { Slack::Web::Client.new }
8
+ context 'calls.participants_add' do
9
+ it 'requires id' do
10
+ expect { client.calls_participants_add(users: %q[[{"slack_id": "U1H77"}, {"external_id": "54321678", "display_name": "External User", "avatar_url": "https://example.com/users/avatar1234.jpg"}]]) }.to raise_error ArgumentError, /Required arguments :id missing/
11
+ end
12
+ it 'requires users' do
13
+ expect { client.calls_participants_add(id: %q[R0E69JAIF]) }.to raise_error ArgumentError, /Required arguments :users missing/
14
+ end
15
+ end
16
+ context 'calls.participants_remove' do
17
+ it 'requires id' do
18
+ expect { client.calls_participants_remove(users: %q[[{"slack_id": "U1H77"}, {"external_id": "54321678", "display_name": "External User", "avatar_url": "https://example.com/users/avatar1234.jpg"}]]) }.to raise_error ArgumentError, /Required arguments :id missing/
19
+ end
20
+ it 'requires users' do
21
+ expect { client.calls_participants_remove(id: %q[R0E69JAIF]) }.to raise_error ArgumentError, /Required arguments :users missing/
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Slack::Web::Api::Endpoints::Calls do
7
+ let(:client) { Slack::Web::Client.new }
8
+ context 'calls_add' do
9
+ it 'requires external_unique_id' do
10
+ expect { client.calls_add(join_url: %q[https://example.com/calls/1234567890]) }.to raise_error ArgumentError, /Required arguments :external_unique_id missing/
11
+ end
12
+ it 'requires join_url' do
13
+ expect { client.calls_add(external_unique_id: %q[025169F6-E37A-4E62-BB54-7F93A0FC4C1F]) }.to raise_error ArgumentError, /Required arguments :join_url missing/
14
+ end
15
+ end
16
+ context 'calls_end' do
17
+ it 'requires id' do
18
+ expect { client.calls_end }.to raise_error ArgumentError, /Required arguments :id missing/
19
+ end
20
+ end
21
+ context 'calls_info' do
22
+ it 'requires id' do
23
+ expect { client.calls_info }.to raise_error ArgumentError, /Required arguments :id missing/
24
+ end
25
+ end
26
+ context 'calls_update' do
27
+ it 'requires id' do
28
+ expect { client.calls_update }.to raise_error ArgumentError, /Required arguments :id missing/
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Slack::Web::Api::Endpoints::ChatScheduledmessages do
7
+ let(:client) { Slack::Web::Client.new }
8
+ end
@@ -0,0 +1,109 @@
1
+ # frozen_string_literal: true
2
+ # This file was auto-generated by lib/tasks/web.rake
3
+
4
+ require 'spec_helper'
5
+
6
+ RSpec.describe Slack::Web::Api::Endpoints::Conversations do
7
+ let(:client) { Slack::Web::Client.new }
8
+ context 'conversations_archive' do
9
+ it 'requires channel' do
10
+ expect { client.conversations_archive }.to raise_error ArgumentError, /Required arguments :channel missing/
11
+ end
12
+ end
13
+ context 'conversations_close' do
14
+ it 'requires channel' do
15
+ expect { client.conversations_close }.to raise_error ArgumentError, /Required arguments :channel missing/
16
+ end
17
+ end
18
+ context 'conversations_create' do
19
+ it 'requires name' do
20
+ expect { client.conversations_create }.to raise_error ArgumentError, /Required arguments :name missing/
21
+ end
22
+ end
23
+ context 'conversations_history' do
24
+ it 'requires channel' do
25
+ expect { client.conversations_history }.to raise_error ArgumentError, /Required arguments :channel missing/
26
+ end
27
+ end
28
+ context 'conversations_info' do
29
+ it 'requires channel' do
30
+ expect { client.conversations_info }.to raise_error ArgumentError, /Required arguments :channel missing/
31
+ end
32
+ end
33
+ context 'conversations_invite' do
34
+ it 'requires channel' do
35
+ expect { client.conversations_invite(users: %q[W1234567890,U2345678901,U3456789012]) }.to raise_error ArgumentError, /Required arguments :channel missing/
36
+ end
37
+ it 'requires users' do
38
+ expect { client.conversations_invite(channel: %q[C1234567890]) }.to raise_error ArgumentError, /Required arguments :users missing/
39
+ end
40
+ end
41
+ context 'conversations_join' do
42
+ it 'requires channel' do
43
+ expect { client.conversations_join }.to raise_error ArgumentError, /Required arguments :channel missing/
44
+ end
45
+ end
46
+ context 'conversations_kick' do
47
+ it 'requires channel' do
48
+ expect { client.conversations_kick(user: %q[W1234567890]) }.to raise_error ArgumentError, /Required arguments :channel missing/
49
+ end
50
+ it 'requires user' do
51
+ expect { client.conversations_kick(channel: %q[C1234567890]) }.to raise_error ArgumentError, /Required arguments :user missing/
52
+ end
53
+ end
54
+ context 'conversations_leave' do
55
+ it 'requires channel' do
56
+ expect { client.conversations_leave }.to raise_error ArgumentError, /Required arguments :channel missing/
57
+ end
58
+ end
59
+ context 'conversations_mark' do
60
+ it 'requires channel' do
61
+ expect { client.conversations_mark(ts: %q[1593473566.000200]) }.to raise_error ArgumentError, /Required arguments :channel missing/
62
+ end
63
+ it 'requires ts' do
64
+ expect { client.conversations_mark(channel: %q[C012345678]) }.to raise_error ArgumentError, /Required arguments :ts missing/
65
+ end
66
+ end
67
+ context 'conversations_members' do
68
+ it 'requires channel' do
69
+ expect { client.conversations_members }.to raise_error ArgumentError, /Required arguments :channel missing/
70
+ end
71
+ end
72
+ context 'conversations_rename' do
73
+ it 'requires channel' do
74
+ expect { client.conversations_rename(name: %q[]) }.to raise_error ArgumentError, /Required arguments :channel missing/
75
+ end
76
+ it 'requires name' do
77
+ expect { client.conversations_rename(channel: %q[C1234567890]) }.to raise_error ArgumentError, /Required arguments :name missing/
78
+ end
79
+ end
80
+ context 'conversations_replies' do
81
+ it 'requires channel' do
82
+ expect { client.conversations_replies(ts: %q[1234567890.123456]) }.to raise_error ArgumentError, /Required arguments :channel missing/
83
+ end
84
+ it 'requires ts' do
85
+ expect { client.conversations_replies(channel: %q[C1234567890]) }.to raise_error ArgumentError, /Required arguments :ts missing/
86
+ end
87
+ end
88
+ context 'conversations_setPurpose' do
89
+ it 'requires channel' do
90
+ expect { client.conversations_setPurpose(purpose: %q[My More Special Purpose]) }.to raise_error ArgumentError, /Required arguments :channel missing/
91
+ end
92
+ it 'requires purpose' do
93
+ expect { client.conversations_setPurpose(channel: %q[C1234567890]) }.to raise_error ArgumentError, /Required arguments :purpose missing/
94
+ end
95
+ end
96
+ context 'conversations_setTopic' do
97
+ it 'requires channel' do
98
+ expect { client.conversations_setTopic(topic: %q[Apply topically for best effects]) }.to raise_error ArgumentError, /Required arguments :channel missing/
99
+ end
100
+ it 'requires topic' do
101
+ expect { client.conversations_setTopic(channel: %q[C1234567890]) }.to raise_error ArgumentError, /Required arguments :topic missing/
102
+ end
103
+ end
104
+ context 'conversations_unarchive' do
105
+ it 'requires channel' do
106
+ expect { client.conversations_unarchive }.to raise_error ArgumentError, /Required arguments :channel missing/
107
+ end
108
+ end
109
+ end
@@ -1,20 +1,29 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::Web::Api::Endpoints::Auth do
4
5
  let(:client) { Slack::Web::Client.new }
6
+
5
7
  context 'without auth', vcr: { cassette_name: 'web/auth_test_error' } do
6
8
  it 'fails with an exception' do
7
- expect { client.auth_test }.to raise_error Slack::Web::Api::Error, 'not_authed'
9
+ expect { client.auth_test }.to raise_error Slack::Web::Api::Errors::SlackError, 'not_authed'
8
10
  end
9
11
  end
12
+
10
13
  context 'with auth', vcr: { cassette_name: 'web/auth_test_success' } do
11
14
  it 'succeeds' do
12
- expect { client.auth_test }.to_not raise_error
15
+ expect { client.auth_test }.not_to raise_error
13
16
  end
14
17
  end
18
+
15
19
  context '429 error', vcr: { cassette_name: 'web/429_error' } do
16
- it 'fails with an exception' do
17
- expect { client.auth_test }.to raise_error Faraday::ClientError
20
+ it 'fails with an specific exception' do
21
+ begin
22
+ client.auth_test
23
+ rescue Slack::Web::Api::Errors::TooManyRequestsError => e
24
+ expect(e.message).to eq('Retry after 3600 seconds')
25
+ expect(e.retry_after).to eq(3600)
26
+ end
18
27
  end
19
28
  end
20
29
  end
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::Web::Api::Endpoints::Channels do
4
5
  let(:client) { Slack::Web::Client.new }
6
+
5
7
  context 'channels' do
6
- it 'info', vcr: { cassette_name: 'web/channels_info' } do
7
- json = client.channels_info(channel: '#general')
8
- expect(json.channel.name).to eq 'general'
8
+ it 'raises deprecation error', vcr: { cassette_name: 'web/channels_info' } do
9
+ expect { client.channels_info(channel: '#general') }
10
+ .to raise_error(Slack::Web::Api::Errors::MethodDeprecated, 'method_deprecated')
9
11
  end
10
12
  end
11
13
  end
@@ -1,68 +1,184 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::Web::Api::Endpoints::Chat do
4
5
  let(:client) { Slack::Web::Client.new }
6
+
7
+ context 'chat_postEphemeral' do
8
+ let(:user) { OpenStruct.new(user: { id: '123' }) }
9
+
10
+ before do
11
+ allow(described_class).to receive(:users_id).and_return(user)
12
+ end
13
+
14
+ it 'automatically converts attachments and blocks into JSON' do
15
+ expect(client).to receive(:post).with(
16
+ 'chat.postEphemeral',
17
+ channel: 'channel',
18
+ text: 'text',
19
+ user: '123',
20
+ attachments: '[]',
21
+ blocks: '[]'
22
+ )
23
+ client.chat_postEphemeral(
24
+ channel: 'channel',
25
+ text: 'text',
26
+ user: '123',
27
+ attachments: [],
28
+ blocks: []
29
+ )
30
+ end
31
+ context 'text and user arguments' do
32
+ it 'requires text or attachments' do
33
+ expect { client.chat_postEphemeral(channel: 'channel') }.to(
34
+ raise_error(ArgumentError, /Required arguments :text, :attachments or :blocks missing/)
35
+ )
36
+ end
37
+ it 'requires user' do
38
+ expect { client.chat_postEphemeral(channel: 'channel', text: 'text') }.to(
39
+ raise_error(ArgumentError, /Required arguments :user missing/)
40
+ )
41
+ end
42
+ it 'both text and user' do
43
+ expect(client).to(
44
+ receive(:post).with('chat.postEphemeral', hash_including(text: 'text', user: '123'))
45
+ )
46
+ expect do
47
+ client.chat_postEphemeral(channel: 'channel', text: 'text', user: '123')
48
+ end.not_to raise_error
49
+ end
50
+ end
51
+
52
+ context 'attachments argument' do
53
+ it 'optional attachments' do
54
+ expect(client).to(
55
+ receive(:post).with('chat.postEphemeral', hash_including(attachments: '[]'))
56
+ )
57
+ expect do
58
+ client.chat_postEphemeral(channel: 'channel', text: 'text', user: '123', attachments: [])
59
+ end.not_to raise_error
60
+ end
61
+ it 'attachments without text' do
62
+ expect(client).to(
63
+ receive(:post).with('chat.postEphemeral', hash_including(attachments: '[]'))
64
+ )
65
+ expect do
66
+ client.chat_postEphemeral(channel: 'channel', attachments: [], user: '123')
67
+ end.not_to raise_error
68
+ end
69
+ end
70
+
71
+ context 'blocks argument' do
72
+ it 'optional blocks' do
73
+ expect(client).to receive(:post).with('chat.postEphemeral', hash_including(blocks: '[]'))
74
+ expect do
75
+ client.chat_postEphemeral(channel: 'channel', text: 'text', user: '123', blocks: [])
76
+ end.not_to raise_error
77
+ end
78
+ it 'blocks without text' do
79
+ expect(client).to receive(:post).with('chat.postEphemeral', hash_including(blocks: '[]'))
80
+ expect do
81
+ client.chat_postEphemeral(channel: 'channel', blocks: [], user: '123')
82
+ end.not_to raise_error
83
+ end
84
+ end
85
+ end
86
+
5
87
  context 'chat_postMessage' do
6
- it 'automatically converts attachments into JSON' do
88
+ it 'automatically converts attachments and blocks into JSON' do
7
89
  expect(client).to receive(:post).with(
8
90
  'chat.postMessage',
9
91
  channel: 'channel',
10
92
  text: 'text',
11
- attachments: '[]'
93
+ attachments: '[]',
94
+ blocks: '[]'
12
95
  )
13
- client.chat_postMessage(channel: 'channel', text: 'text', attachments: [])
96
+ client.chat_postMessage(channel: 'channel', text: 'text', attachments: [], blocks: [])
14
97
  end
15
- context 'text and attachment arguments' do
16
- it 'requires text or attachments' do
17
- expect { client.chat_postMessage(channel: 'channel') }.to raise_error ArgumentError, /Required arguments :text or :attachments missing/
98
+ context 'text, attachment and blocks arguments' do
99
+ it 'requires text, attachments or blocks' do
100
+ expect { client.chat_postMessage(channel: 'channel') }.to(
101
+ raise_error(ArgumentError, /Required arguments :text, :attachments or :blocks missing/)
102
+ )
18
103
  end
19
104
  it 'only text' do
20
105
  expect(client).to receive(:post).with('chat.postMessage', hash_including(text: 'text'))
21
- expect { client.chat_postMessage(channel: 'channel', text: 'text') }.to_not raise_error
106
+ expect { client.chat_postMessage(channel: 'channel', text: 'text') }.not_to raise_error
22
107
  end
23
108
  it 'only attachments' do
24
109
  expect(client).to receive(:post).with('chat.postMessage', hash_including(attachments: '[]'))
25
- expect { client.chat_postMessage(channel: 'channel', attachments: []) }.to_not raise_error
110
+ expect { client.chat_postMessage(channel: 'channel', attachments: []) }.not_to raise_error
111
+ end
112
+ it 'only blocks' do
113
+ expect(client).to receive(:post).with('chat.postMessage', hash_including(blocks: '[]'))
114
+ expect { client.chat_postMessage(channel: 'channel', blocks: []) }.not_to raise_error
26
115
  end
27
- it 'both text and attachments' do
28
- expect(client).to receive(:post).with('chat.postMessage', hash_including(text: 'text', attachments: '[]'))
29
- expect { client.chat_postMessage(channel: 'channel', text: 'text', attachments: []) }.to_not raise_error
116
+ it 'all text, attachments and blocks' do
117
+ expect(client).to(
118
+ receive(:post)
119
+ .with('chat.postMessage', hash_including(text: 'text', attachments: '[]', blocks: '[]'))
120
+ )
121
+ expect do
122
+ client.chat_postMessage(channel: 'channel', text: 'text', attachments: [], blocks: [])
123
+ end.not_to raise_error
30
124
  end
31
125
  end
32
126
  end
33
127
 
34
128
  context 'chat_update' do
35
129
  let(:ts) { '1405894322.002768' }
36
- it 'automatically converts attachments into JSON' do
130
+
131
+ it 'automatically converts attachments and blocks into JSON' do
37
132
  expect(client).to receive(:post).with(
38
133
  'chat.update',
39
- attachments: '[]',
40
134
  channel: 'channel',
41
135
  text: 'text',
42
- ts: ts
136
+ ts: ts,
137
+ attachments: '[]',
138
+ blocks: '[]'
43
139
  )
44
- client.chat_update(attachments: [], channel: 'channel', text: 'text', ts: ts)
140
+ client.chat_update(channel: 'channel', text: 'text', ts: ts, attachments: [], blocks: [])
45
141
  end
46
142
  context 'ts arguments' do
47
143
  it 'requires ts' do
48
- expect { client.chat_update(channel: 'channel') }.to raise_error ArgumentError, /Required arguments :ts missing>/
144
+ expect do
145
+ client.chat_update(channel: 'channel', text: 'text')
146
+ end.to raise_error(ArgumentError, /Required arguments :ts missing>/)
49
147
  end
50
148
  end
51
- context 'text and attachment arguments' do
52
- it 'requires text or attachments' do
53
- expect { client.chat_update(channel: 'channel', ts: ts) }.to raise_error ArgumentError, /Required arguments :text or :attachments missing/
149
+
150
+ context 'text, attachment and blocks arguments' do
151
+ it 'requires text, attachments or blocks' do
152
+ expect { client.chat_update(channel: 'channel', ts: ts) }.to(
153
+ raise_error(ArgumentError, /Required arguments :text, :attachments or :blocks missing/)
154
+ )
54
155
  end
55
156
  it 'only text' do
56
157
  expect(client).to receive(:post).with('chat.update', hash_including(text: 'text'))
57
- expect { client.chat_update(channel: 'channel', text: 'text', ts: ts) }.to_not raise_error
158
+ expect do
159
+ client.chat_update(channel: 'channel', text: 'text', ts: ts)
160
+ end.not_to raise_error
58
161
  end
59
162
  it 'only attachments' do
60
163
  expect(client).to receive(:post).with('chat.update', hash_including(attachments: '[]'))
61
- expect { client.chat_update(attachments: [], channel: 'channel', ts: ts) }.to_not raise_error
164
+ expect do
165
+ client.chat_update(channel: 'channel', ts: ts, attachments: [])
166
+ end.not_to raise_error
167
+ end
168
+ it 'only blocks' do
169
+ expect(client).to receive(:post).with('chat.update', hash_including(blocks: '[]'))
170
+ expect do
171
+ client.chat_update(channel: 'channel', ts: ts, blocks: [])
172
+ end.not_to raise_error
62
173
  end
63
- it 'both text and attachments' do
64
- expect(client).to receive(:post).with('chat.update', hash_including(text: 'text', attachments: '[]'))
65
- expect { client.chat_update(attachments: [], channel: 'channel', text: 'text', ts: ts) }.to_not raise_error
174
+ it 'all text, attachments and blocks' do
175
+ expect(client).to(
176
+ receive(:post)
177
+ .with('chat.update', hash_including(text: 'text', attachments: '[]', blocks: '[]'))
178
+ )
179
+ expect do
180
+ client.chat_update(channel: 'channel', text: 'text', ts: ts, attachments: [], blocks: [])
181
+ end.not_to raise_error
66
182
  end
67
183
  end
68
184
  end