slack-ruby-client 0.14.3 → 0.15.1

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 (326) hide show
  1. checksums.yaml +4 -4
  2. data/.github/FUNDING.yml +1 -0
  3. data/.rubocop.yml +23 -7
  4. data/.rubocop_todo.yml +115 -44
  5. data/.travis.yml +0 -1
  6. data/CHANGELOG.md +38 -2
  7. data/CONTRIBUTING.md +24 -6
  8. data/Dangerfile +2 -1
  9. data/Gemfile +2 -2
  10. data/README.md +90 -29
  11. data/Rakefile +1 -0
  12. data/UPGRADING.md +6 -0
  13. data/bin/commands.rb +23 -0
  14. data/bin/commands/admin_apps.rb +27 -0
  15. data/bin/commands/admin_apps_approved.rb +17 -0
  16. data/bin/commands/admin_apps_requests.rb +16 -0
  17. data/bin/commands/admin_apps_restricted.rb +17 -0
  18. data/bin/commands/admin_conversations.rb +17 -0
  19. data/bin/commands/admin_conversations_restrictAccess.rb +37 -0
  20. data/bin/commands/admin_conversations_whitelist.rb +37 -0
  21. data/bin/commands/admin_emoji.rb +54 -0
  22. data/bin/commands/admin_inviteRequests.rb +36 -0
  23. data/bin/commands/admin_inviteRequests_approved.rb +16 -0
  24. data/bin/commands/admin_inviteRequests_denied.rb +16 -0
  25. data/bin/commands/admin_teams.rb +27 -0
  26. data/bin/commands/admin_teams_admins.rb +16 -0
  27. data/bin/commands/admin_teams_owners.rb +16 -0
  28. data/bin/commands/admin_teams_settings.rb +64 -0
  29. data/bin/commands/admin_usergroups.rb +48 -0
  30. data/bin/commands/admin_users.rb +97 -0
  31. data/bin/commands/admin_users_session.rb +3 -2
  32. data/bin/commands/api.rb +3 -2
  33. data/bin/commands/apps.rb +3 -2
  34. data/bin/commands/apps_permissions.rb +5 -4
  35. data/bin/commands/apps_permissions_resources.rb +3 -2
  36. data/bin/commands/apps_permissions_scopes.rb +3 -2
  37. data/bin/commands/apps_permissions_users.rb +5 -4
  38. data/bin/commands/auth.rb +5 -4
  39. data/bin/commands/bots.rb +3 -2
  40. data/bin/commands/calls.rb +52 -0
  41. data/bin/commands/calls_participants.rb +25 -0
  42. data/bin/commands/channels.rb +31 -30
  43. data/bin/commands/chat.rb +32 -31
  44. data/bin/commands/chat_scheduledMessages.rb +3 -2
  45. data/bin/commands/conversations.rb +36 -36
  46. data/bin/commands/dialog.rb +3 -2
  47. data/bin/commands/dnd.rb +9 -8
  48. data/bin/commands/emoji.rb +3 -2
  49. data/bin/commands/files.rb +14 -12
  50. data/bin/commands/files_comments.rb +3 -2
  51. data/bin/commands/files_remote.rb +78 -0
  52. data/bin/commands/groups.rb +33 -32
  53. data/bin/commands/im.rb +13 -12
  54. data/bin/commands/migration.rb +3 -2
  55. data/bin/commands/mpim.rb +11 -10
  56. data/bin/commands/oauth.rb +6 -5
  57. data/bin/commands/oauth_v2.rb +17 -0
  58. data/bin/commands/pins.rb +7 -8
  59. data/bin/commands/reactions.rb +10 -11
  60. data/bin/commands/reminders.rb +11 -10
  61. data/bin/commands/rtm.rb +5 -4
  62. data/bin/commands/search.rb +7 -6
  63. data/bin/commands/stars.rb +7 -6
  64. data/bin/commands/team.rb +9 -8
  65. data/bin/commands/team_profile.rb +3 -2
  66. data/bin/commands/usergroups.rb +11 -10
  67. data/bin/commands/usergroups_users.rb +5 -4
  68. data/bin/commands/users.rb +21 -20
  69. data/bin/commands/users_admin.rb +1 -0
  70. data/bin/commands/users_prefs.rb +1 -0
  71. data/bin/commands/users_profile.rb +5 -4
  72. data/bin/commands/views.rb +48 -0
  73. data/bin/slack +1 -2
  74. data/examples/hi_real_time/Gemfile +1 -0
  75. data/examples/hi_real_time/hi.rb +7 -3
  76. data/examples/hi_real_time_and_web/Gemfile +1 -0
  77. data/examples/hi_real_time_and_web/hi.rb +7 -3
  78. data/examples/hi_real_time_async_async/Gemfile +1 -0
  79. data/examples/hi_real_time_async_async/hi.rb +6 -2
  80. data/examples/hi_real_time_async_celluloid/Gemfile +1 -0
  81. data/examples/hi_real_time_async_celluloid/hi.rb +7 -3
  82. data/examples/hi_real_time_async_eventmachine/Gemfile +1 -0
  83. data/examples/hi_real_time_async_eventmachine/hi.rb +7 -3
  84. data/examples/hi_web/Gemfile +1 -0
  85. data/examples/hi_web/hi.rb +1 -0
  86. data/examples/new_ticket/Gemfile +1 -0
  87. data/examples/new_ticket/new_ticket.rb +1 -0
  88. data/lib/slack-ruby-client.rb +4 -4
  89. data/lib/slack.rb +1 -0
  90. data/lib/slack/config.rb +1 -0
  91. data/lib/slack/events/config.rb +1 -0
  92. data/lib/slack/events/request.rb +3 -1
  93. data/lib/slack/logger.rb +6 -5
  94. data/lib/slack/messages/formatting.rb +1 -0
  95. data/lib/slack/messages/message.rb +1 -4
  96. data/lib/slack/real_time/api/message.rb +3 -1
  97. data/lib/slack/real_time/api/message_id.rb +1 -0
  98. data/lib/slack/real_time/api/ping.rb +5 -2
  99. data/lib/slack/real_time/api/typing.rb +3 -1
  100. data/lib/slack/real_time/client.rb +26 -13
  101. data/lib/slack/real_time/concurrency.rb +1 -0
  102. data/lib/slack/real_time/concurrency/async.rb +13 -7
  103. data/lib/slack/real_time/concurrency/celluloid.rb +10 -4
  104. data/lib/slack/real_time/concurrency/eventmachine.rb +9 -6
  105. data/lib/slack/real_time/config.rb +6 -1
  106. data/lib/slack/real_time/models.rb +1 -0
  107. data/lib/slack/real_time/models/base.rb +1 -4
  108. data/lib/slack/real_time/models/bot.rb +1 -0
  109. data/lib/slack/real_time/models/channel.rb +1 -0
  110. data/lib/slack/real_time/models/group.rb +1 -0
  111. data/lib/slack/real_time/models/im.rb +1 -0
  112. data/lib/slack/real_time/models/team.rb +1 -0
  113. data/lib/slack/real_time/models/user.rb +1 -0
  114. data/lib/slack/real_time/socket.rb +16 -13
  115. data/lib/slack/real_time/stores.rb +1 -0
  116. data/lib/slack/real_time/stores/base.rb +4 -1
  117. data/lib/slack/real_time/stores/starter.rb +1 -0
  118. data/lib/slack/real_time/stores/store.rb +16 -25
  119. data/lib/slack/version.rb +2 -1
  120. data/lib/slack/web/api/endpoints.rb +46 -0
  121. data/lib/slack/web/api/endpoints/admin_apps.rb +42 -0
  122. data/lib/slack/web/api/endpoints/admin_apps_approved.rb +35 -0
  123. data/lib/slack/web/api/endpoints/admin_apps_requests.rb +33 -0
  124. data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -0
  125. data/lib/slack/web/api/endpoints/admin_conversations.rb +30 -0
  126. data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +61 -0
  127. data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +64 -0
  128. data/lib/slack/web/api/endpoints/admin_emoji.rb +88 -0
  129. data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +61 -0
  130. data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +33 -0
  131. data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +33 -0
  132. data/lib/slack/web/api/endpoints/admin_teams.rb +50 -0
  133. data/lib/slack/web/api/endpoints/admin_teams_admins.rb +34 -0
  134. data/lib/slack/web/api/endpoints/admin_teams_owners.rb +34 -0
  135. data/lib/slack/web/api/endpoints/admin_teams_settings.rb +99 -0
  136. data/lib/slack/web/api/endpoints/admin_usergroups.rb +77 -0
  137. data/lib/slack/web/api/endpoints/admin_users.rb +163 -0
  138. data/lib/slack/web/api/endpoints/admin_users_session.rb +2 -1
  139. data/lib/slack/web/api/endpoints/api.rb +2 -1
  140. data/lib/slack/web/api/endpoints/apps.rb +2 -1
  141. data/lib/slack/web/api/endpoints/apps_permissions.rb +3 -2
  142. data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +2 -1
  143. data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +2 -1
  144. data/lib/slack/web/api/endpoints/apps_permissions_users.rb +3 -2
  145. data/lib/slack/web/api/endpoints/auth.rb +3 -2
  146. data/lib/slack/web/api/endpoints/bots.rb +2 -1
  147. data/lib/slack/web/api/endpoints/calls.rb +83 -0
  148. data/lib/slack/web/api/endpoints/calls_participants.rb +42 -0
  149. data/lib/slack/web/api/endpoints/channels.rb +44 -29
  150. data/lib/slack/web/api/endpoints/chat.rb +30 -29
  151. data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +3 -2
  152. data/lib/slack/web/api/endpoints/conversations.rb +34 -35
  153. data/lib/slack/web/api/endpoints/dialog.rb +2 -1
  154. data/lib/slack/web/api/endpoints/dnd.rb +5 -4
  155. data/lib/slack/web/api/endpoints/emoji.rb +2 -1
  156. data/lib/slack/web/api/endpoints/files.rb +11 -8
  157. data/lib/slack/web/api/endpoints/files_comments.rb +2 -1
  158. data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
  159. data/lib/slack/web/api/endpoints/groups.rb +33 -22
  160. data/lib/slack/web/api/endpoints/im.rb +17 -12
  161. data/lib/slack/web/api/endpoints/migration.rb +2 -1
  162. data/lib/slack/web/api/endpoints/mpim.rb +16 -11
  163. data/lib/slack/web/api/endpoints/oauth.rb +4 -6
  164. data/lib/slack/web/api/endpoints/oauth_v2.rb +30 -0
  165. data/lib/slack/web/api/endpoints/pins.rb +8 -12
  166. data/lib/slack/web/api/endpoints/reactions.rb +12 -15
  167. data/lib/slack/web/api/endpoints/reminders.rb +6 -5
  168. data/lib/slack/web/api/endpoints/rtm.rb +3 -2
  169. data/lib/slack/web/api/endpoints/search.rb +4 -3
  170. data/lib/slack/web/api/endpoints/stars.rb +6 -7
  171. data/lib/slack/web/api/endpoints/team.rb +5 -5
  172. data/lib/slack/web/api/endpoints/team_profile.rb +2 -1
  173. data/lib/slack/web/api/endpoints/usergroups.rb +6 -5
  174. data/lib/slack/web/api/endpoints/usergroups_users.rb +3 -2
  175. data/lib/slack/web/api/endpoints/users.rb +11 -16
  176. data/lib/slack/web/api/endpoints/users_admin.rb +1 -0
  177. data/lib/slack/web/api/endpoints/users_prefs.rb +1 -0
  178. data/lib/slack/web/api/endpoints/users_profile.rb +3 -2
  179. data/lib/slack/web/api/endpoints/views.rb +97 -0
  180. data/lib/slack/web/api/error.rb +1 -0
  181. data/lib/slack/web/api/errors.rb +656 -0
  182. data/lib/slack/web/api/errors/slack_error.rb +14 -1
  183. data/lib/slack/web/api/errors/too_many_requests_error.rb +1 -0
  184. data/lib/slack/web/api/mixins.rb +2 -0
  185. data/lib/slack/web/api/mixins/channels.id.rb +2 -3
  186. data/lib/slack/web/api/mixins/conversations.id.rb +25 -0
  187. data/lib/slack/web/api/mixins/groups.id.rb +2 -3
  188. data/lib/slack/web/api/mixins/ids.id.rb +3 -2
  189. data/lib/slack/web/api/mixins/users.id.rb +2 -3
  190. data/lib/slack/web/api/mixins/users.search.rb +1 -0
  191. data/lib/slack/web/api/patches/{chat.6.block-kit-support.patch → chat.1.patch} +29 -26
  192. data/lib/slack/web/api/patches/views.1.view-json.patch +40 -0
  193. data/lib/slack/web/api/patches/views.1.views-published.patch +16 -0
  194. data/lib/slack/web/api/templates/command.erb +1 -0
  195. data/lib/slack/web/api/templates/commands.erb +1 -0
  196. data/lib/slack/web/api/templates/endpoints.erb +1 -0
  197. data/lib/slack/web/api/templates/errors.erb +20 -0
  198. data/lib/slack/web/api/templates/method.erb +5 -1
  199. data/lib/slack/web/api/templates/method_spec.erb +1 -0
  200. data/lib/slack/web/client.rb +2 -1
  201. data/lib/slack/web/config.rb +3 -0
  202. data/lib/slack/web/faraday/connection.rb +24 -20
  203. data/lib/slack/web/faraday/request.rb +1 -0
  204. data/lib/slack/web/faraday/response/raise_error.rb +10 -6
  205. data/lib/slack/web/pagination/cursor.rb +3 -2
  206. data/lib/slack_ruby_client.rb +1 -0
  207. data/lib/tasks/git.rake +1 -0
  208. data/lib/tasks/real_time.rake +13 -5
  209. data/lib/tasks/update.rake +1 -0
  210. data/lib/tasks/web.rake +27 -7
  211. data/screenshots/create-app.png +0 -0
  212. data/slack-ruby-client.gemspec +6 -3
  213. data/spec/fixtures/slack/web/channels_info.yml +108 -15
  214. data/spec/fixtures/slack/web/conversations_setTopic.yml +69 -0
  215. data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +142 -0
  216. data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +208 -0
  217. data/spec/fixtures/slack/web/views_open_error.yml +76 -0
  218. data/spec/integration/integration_spec.rb +26 -23
  219. data/spec/slack/config_spec.rb +2 -0
  220. data/spec/slack/events/config_spec.rb +8 -4
  221. data/spec/slack/events/request_spec.rb +67 -37
  222. data/spec/slack/messages/formatting_spec.rb +25 -13
  223. data/spec/slack/real_time/api/message_spec.rb +6 -1
  224. data/spec/slack/real_time/api/ping_spec.rb +2 -0
  225. data/spec/slack/real_time/api/typing_spec.rb +5 -1
  226. data/spec/slack/real_time/client_spec.rb +174 -36
  227. data/spec/slack/real_time/concurrency/celluloid_spec.rb +11 -6
  228. data/spec/slack/real_time/concurrency/eventmachine_spec.rb +9 -1
  229. data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +2 -0
  230. data/spec/slack/real_time/event_handlers/bot_spec.rb +2 -1
  231. data/spec/slack/real_time/event_handlers/channel_spec.rb +9 -6
  232. data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +2 -1
  233. data/spec/slack/real_time/event_handlers/group_spec.rb +5 -4
  234. data/spec/slack/real_time/event_handlers/im_spec.rb +4 -3
  235. data/spec/slack/real_time/event_handlers/team_spec.rb +3 -1
  236. data/spec/slack/real_time/event_handlers/user_spec.rb +1 -0
  237. data/spec/slack/real_time/rtm_connect_spec.rb +1 -0
  238. data/spec/slack/real_time/rtm_start_spec.rb +1 -0
  239. data/spec/slack/real_time/store_spec.rb +2 -1
  240. data/spec/slack/slack_spec.rb +37 -5
  241. data/spec/slack/version_spec.rb +2 -1
  242. data/spec/slack/web/api/endpoints/admin_apps_approved_spec.rb +8 -0
  243. data/spec/slack/web/api/endpoints/admin_apps_requests_spec.rb +8 -0
  244. data/spec/slack/web/api/endpoints/admin_apps_restricted_spec.rb +8 -0
  245. data/spec/slack/web/api/endpoints/admin_apps_spec.rb +8 -0
  246. data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +32 -0
  247. data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +13 -0
  248. data/spec/slack/web/api/endpoints/admin_conversations_whitelist_spec.rb +32 -0
  249. data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +37 -0
  250. data/spec/slack/web/api/endpoints/admin_inviteRequests_approved_spec.rb +8 -0
  251. data/spec/slack/web/api/endpoints/admin_inviteRequests_denied_spec.rb +8 -0
  252. data/spec/slack/web/api/endpoints/admin_inviteRequests_spec.rb +18 -0
  253. data/spec/slack/web/api/endpoints/admin_teams_admins_spec.rb +13 -0
  254. data/spec/slack/web/api/endpoints/admin_teams_owners_spec.rb +13 -0
  255. data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +53 -0
  256. data/spec/slack/web/api/endpoints/admin_teams_spec.rb +16 -0
  257. data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +37 -0
  258. data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +1 -0
  259. data/spec/slack/web/api/endpoints/admin_users_spec.rb +75 -0
  260. data/spec/slack/web/api/endpoints/api_spec.rb +1 -0
  261. data/spec/slack/web/api/endpoints/apps_permissions_resources_spec.rb +1 -0
  262. data/spec/slack/web/api/endpoints/apps_permissions_scopes_spec.rb +1 -0
  263. data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +3 -2
  264. data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +4 -3
  265. data/spec/slack/web/api/endpoints/apps_spec.rb +1 -0
  266. data/spec/slack/web/api/endpoints/bots_spec.rb +1 -0
  267. data/spec/slack/web/api/endpoints/calls_participants_spec.rb +24 -0
  268. data/spec/slack/web/api/endpoints/calls_spec.rb +31 -0
  269. data/spec/slack/web/api/endpoints/chat_scheduledMessages_spec.rb +1 -0
  270. data/spec/slack/web/api/endpoints/conversations_spec.rb +2 -1
  271. data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +5 -1
  272. data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +5 -3
  273. data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +80 -25
  274. data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +12 -4
  275. data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +2 -0
  276. data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +6 -1
  277. data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +95 -0
  278. data/spec/slack/web/api/endpoints/dnd_spec.rb +1 -0
  279. data/spec/slack/web/api/endpoints/emoji_spec.rb +1 -0
  280. data/spec/slack/web/api/endpoints/files_comments_spec.rb +1 -0
  281. data/spec/slack/web/api/endpoints/files_remote_spec.rb +24 -0
  282. data/spec/slack/web/api/endpoints/files_spec.rb +1 -0
  283. data/spec/slack/web/api/endpoints/im_spec.rb +1 -0
  284. data/spec/slack/web/api/endpoints/migration_spec.rb +1 -0
  285. data/spec/slack/web/api/endpoints/mpim_spec.rb +1 -0
  286. data/spec/slack/web/api/endpoints/oauth_spec.rb +1 -11
  287. data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +13 -0
  288. data/spec/slack/web/api/endpoints/pins_spec.rb +5 -1
  289. data/spec/slack/web/api/endpoints/reactions_spec.rb +8 -1
  290. data/spec/slack/web/api/endpoints/reminders_spec.rb +1 -0
  291. data/spec/slack/web/api/endpoints/rtm_spec.rb +1 -0
  292. data/spec/slack/web/api/endpoints/search_spec.rb +1 -0
  293. data/spec/slack/web/api/endpoints/stars_spec.rb +1 -0
  294. data/spec/slack/web/api/endpoints/team_profile_spec.rb +1 -0
  295. data/spec/slack/web/api/endpoints/team_spec.rb +1 -0
  296. data/spec/slack/web/api/endpoints/usergroups_spec.rb +1 -0
  297. data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +1 -0
  298. data/spec/slack/web/api/endpoints/users_admin_spec.rb +1 -0
  299. data/spec/slack/web/api/endpoints/users_prefs_spec.rb +1 -0
  300. data/spec/slack/web/api/endpoints/users_profile_spec.rb +1 -0
  301. data/spec/slack/web/api/endpoints/views_spec.rb +29 -0
  302. data/spec/slack/web/api/error_spec.rb +4 -2
  303. data/spec/slack/web/api/errors/service_unavailable_spec.rb +8 -5
  304. data/spec/slack/web/api/errors/slack_error_spec.rb +26 -2
  305. data/spec/slack/web/api/mixins/channels_spec.rb +17 -7
  306. data/spec/slack/web/api/mixins/conversations_list_spec.rb +21 -0
  307. data/spec/slack/web/api/mixins/conversations_spec.rb +43 -0
  308. data/spec/slack/web/api/mixins/groups_spec.rb +17 -7
  309. data/spec/slack/web/api/mixins/users_spec.rb +17 -8
  310. data/spec/slack/web/api/pagination/cursor_spec.rb +40 -10
  311. data/spec/slack/web/client_spec.rb +115 -18
  312. data/spec/slack/web/faraday/response/raise_error_spec.rb +41 -7
  313. data/spec/spec_helper.rb +2 -1
  314. data/spec/support/queue_with_timeout.rb +1 -0
  315. data/spec/support/real_time/concurrency/mock.rb +1 -0
  316. data/spec/support/real_time/connected_client.rb +9 -3
  317. data/spec/support/real_time/event.rb +1 -0
  318. data/spec/support/token.rb +1 -0
  319. data/spec/support/vcr.rb +5 -0
  320. metadata +160 -29
  321. data/lib/slack/web/api/patches/chat.1.text-attachments-required.patch +0 -13
  322. data/lib/slack/web/api/patches/chat.2.attachments-json.patch +0 -17
  323. data/lib/slack/web/api/patches/chat.3.update-attachments-support.patch +0 -21
  324. data/lib/slack/web/api/patches/chat.4.postEphemeral-attachments-support.patch +0 -17
  325. data/lib/slack/web/api/patches/chat.5.postEphemeral-text-or-attachments.patch +0 -15
  326. data/screenshots/register-bot.png +0 -0
@@ -1,9 +1,12 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::Web::Api::Pagination::Cursor do
4
5
  let(:client) { Slack::Web::Client.new }
6
+
5
7
  context 'default cursor' do
6
- let(:cursor) { Slack::Web::Api::Pagination::Cursor.new(client, 'users_list', {}) }
8
+ let(:cursor) { described_class.new(client, 'users_list', {}) }
9
+
7
10
  it 'provides a default limit' do
8
11
  expect(client).to receive(:users_list).with(limit: 100, cursor: nil)
9
12
  cursor.first
@@ -13,7 +16,9 @@ RSpec.describe Slack::Web::Api::Pagination::Cursor do
13
16
  cursor.to_a
14
17
  end
15
18
  it 'handles nil response metadata' do
16
- expect(client).to receive(:users_list).once.and_return(Slack::Messages::Message.new(response_metadata: nil))
19
+ expect(client).to(
20
+ receive(:users_list).once.and_return(Slack::Messages::Message.new(response_metadata: nil))
21
+ )
17
22
  cursor.to_a
18
23
  end
19
24
  it 'paginates with a cursor inside response metadata' do
@@ -26,21 +31,42 @@ RSpec.describe Slack::Web::Api::Pagination::Cursor do
26
31
  end
27
32
  context 'with rate limiting' do
28
33
  let(:error) { Slack::Web::Api::Errors::TooManyRequestsError.new(nil) }
34
+
29
35
  context 'with default max retries' do
30
36
  it 'sleeps after a TooManyRequestsError' do
31
- expect(client).to receive(:users_list).with(limit: 100, cursor: nil).ordered.and_return(Slack::Messages::Message.new(response_metadata: { next_cursor: 'next' }))
32
- expect(client).to receive(:users_list).with(limit: 100, cursor: 'next').ordered.and_raise(error)
37
+ expect(client).to(
38
+ receive(:users_list)
39
+ .with(limit: 100, cursor: nil)
40
+ .ordered
41
+ .and_return(Slack::Messages::Message.new(response_metadata: { next_cursor: 'next' }))
42
+ )
43
+ expect(client).to(
44
+ receive(:users_list).with(limit: 100, cursor: 'next').ordered.and_raise(error)
45
+ )
33
46
  expect(error).to receive(:retry_after).once.ordered.and_return(9)
34
47
  expect(cursor).to receive(:sleep).once.ordered.with(9)
35
- expect(client).to receive(:users_list).with(limit: 100, cursor: 'next').ordered.and_return(Slack::Messages::Message.new)
48
+ expect(client).to(
49
+ receive(:users_list)
50
+ .with(limit: 100, cursor: 'next')
51
+ .ordered
52
+ .and_return(Slack::Messages::Message.new)
53
+ )
36
54
  cursor.to_a
37
55
  end
38
56
  end
57
+
39
58
  context 'with a custom max_retries' do
40
- let(:cursor) { Slack::Web::Api::Pagination::Cursor.new(client, 'users_list', max_retries: 4) }
59
+ let(:cursor) { described_class.new(client, 'users_list', max_retries: 4) }
60
+
41
61
  it 'raises the error after hitting the max retries' do
42
- expect(client).to receive(:users_list).with(limit: 100, cursor: nil).and_return(Slack::Messages::Message.new(response_metadata: { next_cursor: 'next' }))
43
- expect(client).to receive(:users_list).with(limit: 100, cursor: 'next').exactly(5).times.and_raise(error)
62
+ expect(client).to(
63
+ receive(:users_list)
64
+ .with(limit: 100, cursor: nil)
65
+ .and_return(Slack::Messages::Message.new(response_metadata: { next_cursor: 'next' }))
66
+ )
67
+ expect(client).to(
68
+ receive(:users_list).with(limit: 100, cursor: 'next').exactly(5).times.and_raise(error)
69
+ )
44
70
  expect(error).to receive(:retry_after).exactly(4).times.and_return(9)
45
71
  expect(cursor).to receive(:sleep).exactly(4).times.with(9)
46
72
  expect { cursor.to_a }.to raise_error(error)
@@ -48,15 +74,19 @@ RSpec.describe Slack::Web::Api::Pagination::Cursor do
48
74
  end
49
75
  end
50
76
  end
77
+
51
78
  context 'with a custom limit' do
52
- let(:cursor) { Slack::Web::Api::Pagination::Cursor.new(client, 'users_list', limit: 42) }
79
+ let(:cursor) { described_class.new(client, 'users_list', limit: 42) }
80
+
53
81
  it 'overrides default limit' do
54
82
  expect(client).to receive(:users_list).with(limit: 42, cursor: nil)
55
83
  cursor.first
56
84
  end
57
85
  end
86
+
58
87
  context 'with a custom sleep_interval' do
59
- let(:cursor) { Slack::Web::Api::Pagination::Cursor.new(client, 'users_list', sleep_interval: 3) }
88
+ let(:cursor) { described_class.new(client, 'users_list', sleep_interval: 3) }
89
+
60
90
  it 'sleeps between requests' do
61
91
  expect(client).to receive(:users_list).exactly(3).times.and_return(
62
92
  Slack::Messages::Message.new(response_metadata: { next_cursor: 'next_a' }),
@@ -1,11 +1,14 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::Web::Client do
4
5
  before do
5
6
  Slack::Config.reset
6
7
  end
8
+
7
9
  context 'with defaults' do
8
- let(:client) { Slack::Web::Client.new }
10
+ let(:client) { described_class.new }
11
+
9
12
  describe '#initialize' do
10
13
  it 'sets user-agent' do
11
14
  expect(client.user_agent).to eq Slack::Web::Config.user_agent
@@ -18,30 +21,36 @@ RSpec.describe Slack::Web::Client do
18
21
  end
19
22
  end
20
23
  end
24
+
21
25
  context 'with custom settings' do
22
26
  describe '#initialize' do
23
27
  Slack::Web::Config::ATTRIBUTES.each do |key|
24
- context key do
25
- let(:client) { Slack::Web::Client.new(key => 'custom') }
28
+ context key.to_s do
29
+ let(:client) { described_class.new(key => 'custom') }
30
+
26
31
  it "sets #{key}" do
27
- expect(client.send(key)).to_not eq Slack::Web::Config.send(key)
32
+ expect(client.send(key)).not_to eq Slack::Web::Config.send(key)
28
33
  expect(client.send(key)).to eq 'custom'
29
34
  end
30
35
  end
31
36
  end
32
37
  end
33
38
  end
39
+
34
40
  context 'global config' do
35
41
  after do
36
- Slack::Web::Client.config.reset
42
+ described_class.config.reset
37
43
  end
38
- let(:client) { Slack::Web::Client.new }
44
+
45
+ let(:client) { described_class.new }
46
+
39
47
  context 'user-agent' do
40
48
  before do
41
- Slack::Web::Client.configure do |config|
49
+ described_class.configure do |config|
42
50
  config.user_agent = 'custom/user-agent'
43
51
  end
44
52
  end
53
+
45
54
  describe '#initialize' do
46
55
  it 'sets user-agent' do
47
56
  expect(client.user_agent).to eq 'custom/user-agent'
@@ -54,38 +63,43 @@ RSpec.describe Slack::Web::Client do
54
63
  end
55
64
  end
56
65
  end
66
+
57
67
  context 'token' do
58
68
  before do
59
69
  Slack.configure do |config|
60
70
  config.token = 'global default'
61
71
  end
62
72
  end
73
+
63
74
  it 'defaults token to global default' do
64
- client = Slack::Web::Client.new
75
+ client = described_class.new
65
76
  expect(client.token).to eq 'global default'
66
77
  end
67
78
  context 'with web config' do
68
79
  before do
69
- Slack::Web::Client.configure do |config|
80
+ described_class.configure do |config|
70
81
  config.token = 'custom web token'
71
82
  end
72
83
  end
84
+
73
85
  it 'overrides token to web config' do
74
- client = Slack::Web::Client.new
86
+ client = described_class.new
75
87
  expect(client.token).to eq 'custom web token'
76
88
  end
77
89
  it 'overrides token to specific token' do
78
- client = Slack::Web::Client.new(token: 'local token')
90
+ client = described_class.new(token: 'local token')
79
91
  expect(client.token).to eq 'local token'
80
92
  end
81
93
  end
82
94
  end
95
+
83
96
  context 'proxy' do
84
97
  before do
85
- Slack::Web::Client.configure do |config|
98
+ described_class.configure do |config|
86
99
  config.proxy = 'http://localhost:8080'
87
100
  end
88
101
  end
102
+
89
103
  describe '#initialize' do
90
104
  it 'sets proxy' do
91
105
  expect(client.proxy).to eq 'http://localhost:8080'
@@ -95,13 +109,15 @@ RSpec.describe Slack::Web::Client do
95
109
  end
96
110
  end
97
111
  end
112
+
98
113
  context 'SSL options' do
99
114
  before do
100
- Slack::Web::Client.configure do |config|
115
+ described_class.configure do |config|
101
116
  config.ca_path = '/ca_path'
102
117
  config.ca_file = '/ca_file'
103
118
  end
104
119
  end
120
+
105
121
  describe '#initialize' do
106
122
  it 'sets ca_path and ca_file' do
107
123
  expect(client.ca_path).to eq '/ca_path'
@@ -114,13 +130,16 @@ RSpec.describe Slack::Web::Client do
114
130
  end
115
131
  end
116
132
  end
133
+
117
134
  context 'logger option' do
118
135
  let(:logger) { Logger.new(STDOUT) }
136
+
119
137
  before do
120
- Slack::Web::Client.configure do |config|
138
+ described_class.configure do |config|
121
139
  config.logger = logger
122
140
  end
123
141
  end
142
+
124
143
  describe '#initialize' do
125
144
  it 'sets logger' do
126
145
  expect(client.logger).to eq logger
@@ -130,13 +149,59 @@ RSpec.describe Slack::Web::Client do
130
149
  end
131
150
  end
132
151
  end
152
+
153
+ context 'adapter option' do
154
+ let(:adapter) { Faraday.default_adapter }
155
+ let(:adapter_class) { Faraday::Adapter::NetHttp }
156
+
157
+ around do |ex|
158
+ previous_adapter = Faraday.default_adapter
159
+ # ensure default adapter is set for this spec
160
+ Faraday.default_adapter = :net_http
161
+ ex.run
162
+ Faraday.default_adapter = previous_adapter
163
+ end
164
+
165
+ context 'default adapter' do
166
+ describe '#initialize' do
167
+ it 'sets adapter' do
168
+ expect(client.adapter).to eq adapter
169
+ end
170
+ it 'creates a connection with an adapter' do
171
+ expect(client.send(:connection).adapter).to eq adapter_class
172
+ end
173
+ end
174
+ end
175
+
176
+ context 'non default adapter' do
177
+ let(:adapter) { :typhoeus }
178
+ let(:adapter_class) { Faraday::Adapter::Typhoeus }
179
+
180
+ before do
181
+ described_class.configure do |config|
182
+ config.adapter = adapter
183
+ end
184
+ end
185
+
186
+ describe '#initialize' do
187
+ it 'sets adapter' do
188
+ expect(client.adapter).to eq adapter
189
+ end
190
+ it 'creates a connection with an adapter' do
191
+ expect(client.send(:connection).adapter).to eq adapter_class
192
+ end
193
+ end
194
+ end
195
+ end
196
+
133
197
  context 'timeout options' do
134
198
  before do
135
- Slack::Web::Client.configure do |config|
199
+ described_class.configure do |config|
136
200
  config.timeout = 10
137
201
  config.open_timeout = 15
138
202
  end
139
203
  end
204
+
140
205
  describe '#initialize' do
141
206
  it 'sets timeout and open_timeout' do
142
207
  expect(client.timeout).to eq 10
@@ -149,13 +214,15 @@ RSpec.describe Slack::Web::Client do
149
214
  end
150
215
  end
151
216
  end
217
+
152
218
  context 'per-request options' do
153
219
  it 'applies timeout', vcr: { cassette_name: 'web/rtm_start', allow_playback_repeats: true } do
154
220
  # reuse the same connection for the test, otherwise it creates a new one every time
155
221
  conn = client.send(:connection)
156
222
  expect(client).to receive(:connection).and_return(conn)
157
223
 
158
- # get the yielded request to reuse in the next call to rtm_start so that we can examine request.options later
224
+ # get the yielded request to reuse in the next call to
225
+ # rtm_start so that we can examine request.options later
159
226
  request = nil
160
227
  response = conn.post do |r|
161
228
  r.path = 'rtm.start'
@@ -170,13 +237,43 @@ RSpec.describe Slack::Web::Client do
170
237
  expect(request.options.timeout).to eq 3
171
238
  end
172
239
  end
240
+
173
241
  context 'calling undocumented methods' do
174
- let(:client) { Slack::Web::Client.new }
242
+ let(:client) { described_class.new }
243
+
175
244
  it 'produces a warning' do
176
- expect(client.logger).to receive(:warn).with('The users.admin.setInactive method is undocumented.')
245
+ expect(client.logger).to(
246
+ receive(:warn).with('The users.admin.setInactive method is undocumented.')
247
+ )
177
248
  expect(client).to receive(:post)
178
249
  client.users_admin_setInactive(user: 'U092BDCLV')
179
250
  end
180
251
  end
252
+
253
+ context 'when calling deprecated methods' do
254
+ let(:client) { described_class.new }
255
+
256
+ it 'produces a warning' do
257
+ expect(client.logger).to receive(:warn).with(/
258
+ ^channels\.archive:\ This\ method\ is\ deprecated
259
+ .+
260
+ Alternative\ methods:\ conversations\.archive\.
261
+ /x)
262
+
263
+ expect(client).to receive(:post)
264
+ client.channels_archive(channel: 'test')
265
+ end
266
+ end
267
+
268
+ context 'persistent capability' do
269
+ describe '#initialize' do
270
+ it 'caches the Faraday connection to allow persistent adapters' do
271
+ first = client.send(:connection)
272
+ second = client.send(:connection)
273
+
274
+ expect(first).to equal second
275
+ end
276
+ end
277
+ end
181
278
  end
182
279
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::Web::Faraday::Response::RaiseError do
5
+ subject(:raise_error_obj) { described_class.new }
6
+
4
7
  describe '#on_complete' do
5
- let(:subject) { described_class.new }
6
8
  let(:status) { 200 }
7
9
  let(:response) { nil }
8
10
  let(:body) { {} }
@@ -12,7 +14,9 @@ RSpec.describe Slack::Web::Faraday::Response::RaiseError do
12
14
  let(:status) { 429 }
13
15
 
14
16
  it 'raises a TooManyRequestsError' do
15
- expect { subject.on_complete(env) }.to raise_error(Slack::Web::Api::Errors::TooManyRequestsError)
17
+ expect { raise_error_obj.on_complete(env) }.to(
18
+ raise_error(Slack::Web::Api::Errors::TooManyRequestsError)
19
+ )
16
20
  end
17
21
  end
18
22
 
@@ -20,21 +24,46 @@ RSpec.describe Slack::Web::Faraday::Response::RaiseError do
20
24
  let(:body) { { 'ok' => 'true' } }
21
25
 
22
26
  it 'is nil' do
23
- expect(subject.on_complete(env)).to eq nil
27
+ expect(raise_error_obj.on_complete(env)).to eq nil
24
28
  end
25
29
  end
26
30
 
27
- context 'with a single error in the body' do
28
- let(:body) { { 'error' => 'already_in_channel' } }
31
+ context 'with a single known error in the body' do
32
+ let(:body) do
33
+ {
34
+ 'ok' => false,
35
+ 'error' => 'already_in_channel',
36
+ 'response_metadata' => { 'messages' => [] }
37
+ }
38
+ end
39
+
40
+ it 'raises an error of the matching type with the error message' do
41
+ expect { raise_error_obj.on_complete(env) }.to(
42
+ raise_error(Slack::Web::Api::Errors::AlreadyInChannel, 'already_in_channel')
43
+ )
44
+ end
45
+ end
46
+
47
+ context 'with a single unknown error in the body' do
48
+ let(:body) do
49
+ {
50
+ 'ok' => false,
51
+ 'error' => 'unknown_error',
52
+ 'response_metadata' => { 'messages' => [] }
53
+ }
54
+ end
29
55
 
30
56
  it 'raises a SlackError with the error message' do
31
- expect { subject.on_complete(env) }.to raise_error(Slack::Web::Api::Errors::SlackError, 'already_in_channel')
57
+ expect { raise_error_obj.on_complete(env) }.to(
58
+ raise_error(Slack::Web::Api::Errors::SlackError, 'unknown_error')
59
+ )
32
60
  end
33
61
  end
34
62
 
35
63
  context 'with multiple errors in the body' do
36
64
  let(:body) do
37
65
  {
66
+ 'ok' => false,
38
67
  'errors' => [
39
68
  { 'error' => 'already_in_channel' },
40
69
  { 'error' => 'something_else_terrible' }
@@ -43,7 +72,12 @@ RSpec.describe Slack::Web::Faraday::Response::RaiseError do
43
72
  end
44
73
 
45
74
  it 'raises a SlackError with the concatenated error messages' do
46
- expect { subject.on_complete(env) }.to raise_error(Slack::Web::Api::Errors::SlackError, 'already_in_channel,something_else_terrible')
75
+ expect { raise_error_obj.on_complete(env) }.to(
76
+ raise_error(
77
+ Slack::Web::Api::Errors::SlackError,
78
+ 'already_in_channel,something_else_terrible'
79
+ )
80
+ )
47
81
  end
48
82
  end
49
83
  end
@@ -1,10 +1,11 @@
1
+ # frozen_string_literal: true
1
2
  $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..'))
2
3
 
3
4
  require 'rubygems'
4
5
  require 'rspec'
5
6
  require 'timecop'
6
7
 
7
- require 'slack-ruby-client'
8
+ require 'slack_ruby_client'
8
9
 
9
10
  Dir[File.join(File.dirname(__FILE__), 'support', '**/*.rb')].each do |file|
10
11
  require file