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,42 +1,54 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  describe Slack::Messages::Formatting do
4
- subject do
5
- Slack::Messages::Formatting
5
+ subject(:formatting) do
6
+ described_class
6
7
  end
8
+
7
9
  context '#unescape' do
8
10
  it 'plain text' do
9
- expect(subject.unescape('plain text')).to eq 'plain text'
11
+ expect(formatting.unescape('plain text')).to eq 'plain text'
10
12
  end
11
13
  it 'decodes an HTML-encoded message' do
12
- expect(subject.unescape('Hello &amp; &lt;world&gt;')).to eq 'Hello & <world>'
14
+ expect(formatting.unescape('Hello &amp; &lt;world&gt;')).to eq 'Hello & <world>'
13
15
  end
14
16
  it 'unescapes a user reference' do
15
- expect(subject.unescape('Hey <@U024BE7LH|bob>, did you see my file?')).to eq 'Hey @bob, did you see my file?'
17
+ expect(formatting.unescape('Hey <@U024BE7LH|bob>, did you see my file?')).to(
18
+ eq('Hey @bob, did you see my file?')
19
+ )
16
20
  end
17
21
  it 'unescapes a user reference without a name' do
18
- expect(subject.unescape('<@U02BEFY4U> ^^^')).to eq '@U02BEFY4U ^^^'
22
+ expect(formatting.unescape('<@U02BEFY4U> ^^^')).to eq '@U02BEFY4U ^^^'
19
23
  end
20
24
  it 'unescapes a URL without text' do
21
- expect(subject.unescape('This message contains a URL <http://foo.com/>')).to eq 'This message contains a URL http://foo.com/'
25
+ expect(formatting.unescape('This message contains a URL <http://foo.com/>')).to(
26
+ eq('This message contains a URL http://foo.com/')
27
+ )
22
28
  end
23
29
  it 'unescapes a URL with text' do
24
- expect(subject.unescape('So does this one: <http://www.foo.com|www.foo.com>')).to eq 'So does this one: www.foo.com'
30
+ expect(formatting.unescape('So does this one: <http://www.foo.com|www.foo.com>')).to(
31
+ eq('So does this one: www.foo.com')
32
+ )
25
33
  end
26
34
  it 'removes mailto' do
27
- expect(subject.unescape('<mailto:bob@example.com|Bob>')).to eq 'Bob'
35
+ expect(formatting.unescape('<mailto:bob@example.com|Bob>')).to eq 'Bob'
28
36
  end
29
37
  it 'unlinkifies references' do
30
- expect(subject.unescape('Hello <@U123|bob>, say hi to <!everyone> in <#C1234|general>')).to eq 'Hello @bob, say hi to @everyone in #general'
38
+ expect(
39
+ formatting.unescape('Hello <@U123|bob>, say hi to <!everyone> in <#C1234|general>')
40
+ ).to(
41
+ eq('Hello @bob, say hi to @everyone in #general')
42
+ )
31
43
  end
32
44
  it 'can handle a lone &gt;' do
33
- expect(subject.unescape('Hello <@U123|bob> &gt; file.txt')).to eq 'Hello @bob > file.txt'
45
+ expect(formatting.unescape('Hello <@U123|bob> &gt; file.txt')).to eq 'Hello @bob > file.txt'
34
46
  end
35
47
  it 'unescapes a double smart quote' do
36
- expect(subject.unescape('“hello”')).to eq '"hello"'
48
+ expect(formatting.unescape('“hello”')).to eq '"hello"'
37
49
  end
38
50
  it 'unescapes a single smart quote' do
39
- expect(subject.unescape('‘hello’')).to eq "'hello'"
51
+ expect(formatting.unescape('‘hello’')).to eq "'hello'"
40
52
  end
41
53
  end
42
54
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' } do
@@ -7,8 +8,12 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
7
8
  before do
8
9
  allow(client).to receive(:next_id).and_return(42)
9
10
  end
11
+
10
12
  it 'sends message' do
11
- expect(socket).to receive(:send_data).with({ type: 'message', id: 42, text: 'hello world', channel: 'channel' }.to_json)
13
+ expect(socket).to(
14
+ receive(:send_data)
15
+ .with({ type: 'message', id: 42, text: 'hello world', channel: 'channel' }.to_json)
16
+ )
12
17
  client.message(text: 'hello world', channel: 'channel')
13
18
  end
14
19
  end
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' } do
@@ -7,6 +8,7 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
7
8
  before do
8
9
  allow(client).to receive(:next_id).and_return(42)
9
10
  end
11
+
10
12
  it 'sends message' do
11
13
  expect(socket).to receive(:send_data).with({ type: 'ping', id: 42 }.to_json)
12
14
  client.ping
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
4
  RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' } do
@@ -7,8 +8,11 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
7
8
  before do
8
9
  allow(client).to receive(:next_id).and_return(42)
9
10
  end
11
+
10
12
  it 'sends a typing indicator' do
11
- expect(socket).to receive(:send_data).with({ type: 'typing', id: 42, channel: 'channel' }.to_json)
13
+ expect(socket).to(
14
+ receive(:send_data).with({ type: 'typing', id: 42, channel: 'channel' }.to_json)
15
+ )
12
16
  client.typing(channel: 'channel')
13
17
  end
14
18
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
1
2
  require 'spec_helper'
2
3
 
3
- RSpec.describe Slack::RealTime::Client do
4
+ RSpec.describe Slack::RealTime::Client do # rubocop:disable Metrics/BlockLength
4
5
  let(:ws) { double(Slack::RealTime::Concurrency::Mock::WebSocket, on: true) }
6
+
5
7
  before do
6
8
  @token = ENV.delete('SLACK_API_TOKEN')
7
9
  Slack::Config.reset
@@ -10,49 +12,78 @@ RSpec.describe Slack::RealTime::Client do
10
12
  config.concurrency = Slack::RealTime::Concurrency::Mock
11
13
  end
12
14
  end
15
+
13
16
  after do
14
17
  ENV['SLACK_API_TOKEN'] = @token if @token
15
18
  end
19
+
16
20
  context 'token' do
17
21
  before do
18
22
  Slack.configure do |config|
19
23
  config.token = 'global default'
20
24
  end
21
25
  end
26
+
22
27
  it 'defaults token to global default' do
23
- client = Slack::RealTime::Client.new
28
+ client = described_class.new
24
29
  expect(client.token).to eq 'global default'
25
30
  expect(client.web_client.token).to eq 'global default'
26
31
  end
27
32
  context 'with real time config' do
28
33
  before do
29
- Slack::RealTime::Client.configure do |config|
34
+ described_class.configure do |config|
30
35
  config.token = 'custom real time token'
31
36
  end
32
37
  end
38
+
33
39
  it 'overrides token to real time config' do
34
- client = Slack::RealTime::Client.new
40
+ client = described_class.new
35
41
  expect(client.token).to eq 'custom real time token'
36
42
  expect(client.web_client.token).to eq 'custom real time token'
37
43
  end
38
44
  it 'overrides token to specific token' do
39
- client = Slack::RealTime::Client.new(token: 'local token')
45
+ client = described_class.new(token: 'local token')
40
46
  expect(client.token).to eq 'local token'
41
47
  expect(client.web_client.token).to eq 'local token'
42
48
  end
43
49
  end
44
50
  end
45
- context 'client with a full store', vcr: { cassette_name: 'web/rtm_start', allow_playback_repeats: true } do
46
- let(:client) { Slack::RealTime::Client.new(store_class: Slack::RealTime::Stores::Store) }
51
+
52
+ context 'websocket_ping_timer' do
53
+ context 'with defaults' do
54
+ let(:client) { described_class.new }
55
+
56
+ it 'defaults to websocket_ping / 2' do
57
+ expect(client.websocket_ping_timer).to eq 15
58
+ end
59
+ end
60
+
61
+ context 'with websocket_ping value changed' do
62
+ let(:client) { described_class.new(websocket_ping: 22) }
63
+
64
+ it 'defaults to websocket_ping / 2' do
65
+ expect(client.websocket_ping_timer).to eq 11
66
+ end
67
+ end
68
+ end
69
+
70
+ context 'client with a full store',
71
+ vcr: { cassette_name: 'web/rtm_start', allow_playback_repeats: true } do
72
+ let(:client) { described_class.new(store_class: Slack::RealTime::Stores::Store) }
47
73
  let(:url) { 'wss://ms173.slack-msgs.com/websocket/lqcUiAvrKTP-uuid=' }
74
+
48
75
  describe '#start!' do
49
76
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
77
+
50
78
  before do
51
- allow(Slack::RealTime::Socket).to receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
79
+ allow(Slack::RealTime::Socket).to(
80
+ receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
81
+ )
52
82
  allow(socket).to receive(:connect!)
53
83
  allow(socket).to receive(:start_sync)
54
84
  client.start!
55
85
  end
86
+
56
87
  describe 'properties provided upon connection' do
57
88
  it 'sets url' do
58
89
  expect(client.url).to eq url
@@ -87,9 +118,12 @@ RSpec.describe Slack::RealTime::Client do
87
118
  expect(client.groups.count).to eq 1
88
119
  end
89
120
  it 'includes team name in to_s' do
90
- expect(client.to_s).to eq "id=#{client.team.id}, name=#{client.team.name}, domain=#{client.team.domain}"
121
+ expect(client.to_s).to eq(
122
+ "id=#{client.team.id}, name=#{client.team.name}, domain=#{client.team.domain}"
123
+ )
91
124
  end
92
125
  end
126
+
93
127
  it 'uses web client to fetch url' do
94
128
  expect(client.web_client).to be_a Slack::Web::Client
95
129
  end
@@ -103,9 +137,10 @@ RSpec.describe Slack::RealTime::Client do
103
137
  end
104
138
  describe '#stop!' do
105
139
  before do
106
- expect(socket).to receive(:disconnect!)
140
+ allow(socket).to receive(:disconnect!)
107
141
  client.stop!
108
142
  end
143
+
109
144
  it 'cannot be invoked twice' do
110
145
  client.instance_variable_set('@socket', nil) # caused by a :close callback
111
146
  expect do
@@ -113,12 +148,14 @@ RSpec.describe Slack::RealTime::Client do
113
148
  end.to raise_error Slack::RealTime::Client::ClientNotStartedError
114
149
  end
115
150
  end
151
+
116
152
  describe '#next_id' do
117
153
  it 'increments' do
118
154
  previous_id = client.send(:next_id)
119
155
  expect(client.send(:next_id)).to eq previous_id + 1
120
156
  end
121
157
  end
158
+
122
159
  context 'subclassed' do
123
160
  it 'runs event handlers' do
124
161
  event = Slack::RealTime::Event.new(
@@ -129,15 +166,37 @@ RSpec.describe Slack::RealTime::Client do
129
166
  expect(client.store.team.name).to eq 'New Team Name Inc.'
130
167
  end
131
168
  end
169
+
170
+ describe '#run_handlers' do
171
+ describe 'empty events' do
172
+ before do
173
+ @e = client.store.class.events
174
+ client.store.class.events = nil
175
+ end
176
+
177
+ after do
178
+ client.store.class.events = @e
179
+ end
180
+
181
+ it 'returns false when event is nil' do
182
+ expect(client.send(:run_handlers, 'example', {})).to be nil
183
+ end
184
+ end
185
+ end
132
186
  end
187
+
133
188
  describe '#start_async' do
134
189
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
190
+
135
191
  before do
136
- allow(Slack::RealTime::Socket).to receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
192
+ allow(Slack::RealTime::Socket).to(
193
+ receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
194
+ )
137
195
  allow(socket).to receive(:connect!)
138
196
  allow(socket).to receive(:start_async)
139
197
  client.start_async
140
198
  end
199
+
141
200
  describe '#run_ping!' do
142
201
  it 'sends ping messages when the websocket connection is idle' do
143
202
  allow(socket).to receive(:time_since_last_message).and_return(30)
@@ -151,34 +210,62 @@ RSpec.describe Slack::RealTime::Client do
151
210
  expect(socket).to receive(:restart_async)
152
211
  client.run_ping!
153
212
  end
154
- [EOFError, Errno::ECONNRESET, Errno::EPIPE, Faraday::ClientError].each do |err|
213
+ [
214
+ EOFError,
215
+ Errno::ECONNRESET,
216
+ Errno::EPIPE,
217
+ Faraday::ClientError,
218
+ Slack::Web::Api::Errors::SlackError
219
+ ].each do |err|
155
220
  context "raising #{err}" do
156
221
  it 'does not terminate the ping worker' do
157
222
  allow(socket).to receive(:time_since_last_message) { raise err }
158
- expect(socket).to_not receive(:send_data)
223
+ expect(socket).not_to receive(:send_data)
159
224
  client.run_ping!
160
225
  end
161
226
  end
162
227
  end
228
+ context 'raising Slack::Web::Api::Errors::SlackError' do
229
+ %w[invalid_auth account_inactive].each do |code|
230
+ context code do
231
+ it 'does not terminate the ping worker' do
232
+ allow(socket).to receive(:time_since_last_message) {
233
+ raise Slack::Web::Api::Errors::SlackError, code
234
+ }
235
+ expect(socket).not_to receive(:send_data)
236
+ expect do
237
+ client.run_ping!
238
+ end.to raise_error Slack::Web::Api::Errors::SlackError, code
239
+ end
240
+ end
241
+ end
242
+ end
163
243
  end
164
244
  end
245
+
165
246
  describe 'to_s' do
166
247
  it 'defaults to class instance' do
167
248
  expect(client.to_s).to match(/^#<Slack::RealTime::Client:0x\h+>$/)
168
249
  end
169
250
  end
170
251
  end
252
+
171
253
  context 'client with starter store', vcr: { cassette_name: 'web/rtm_connect' } do
172
- let(:client) { Slack::RealTime::Client.new(store_class: Slack::RealTime::Stores::Starter) }
254
+ let(:client) { described_class.new(store_class: Slack::RealTime::Stores::Starter) }
173
255
  let(:url) { 'wss://mpmulti-w5tz.slack-msgs.com/websocket/uid' }
256
+
174
257
  describe '#start!' do
175
258
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
259
+
176
260
  before do
177
- allow(Slack::RealTime::Socket).to receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
261
+ allow(Slack::RealTime::Socket).to(
262
+ receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
263
+ )
178
264
  allow(socket).to receive(:connect!)
179
265
  allow(socket).to receive(:start_sync)
180
266
  client.start!
181
267
  end
268
+
182
269
  describe 'properties provided upon connection' do
183
270
  it 'sets url' do
184
271
  expect(client.url).to eq url
@@ -208,9 +295,12 @@ RSpec.describe Slack::RealTime::Client do
208
295
  expect(client.groups).to be_nil
209
296
  end
210
297
  it 'includes team name in to_s' do
211
- expect(client.to_s).to eq "id=#{client.team.id}, name=#{client.team.name}, domain=#{client.team.domain}"
298
+ expect(client.to_s).to eq(
299
+ "id=#{client.team.id}, name=#{client.team.name}, domain=#{client.team.domain}"
300
+ )
212
301
  end
213
302
  end
303
+
214
304
  it 'uses web client to fetch url' do
215
305
  expect(client.web_client).to be_a Slack::Web::Client
216
306
  end
@@ -224,9 +314,10 @@ RSpec.describe Slack::RealTime::Client do
224
314
  end
225
315
  describe '#stop!' do
226
316
  before do
227
- expect(socket).to receive(:disconnect!)
317
+ allow(socket).to receive(:disconnect!)
228
318
  client.stop!
229
319
  end
320
+
230
321
  it 'cannot be invoked twice' do
231
322
  client.instance_variable_set('@socket', nil) # caused by a :close callback
232
323
  expect do
@@ -234,6 +325,7 @@ RSpec.describe Slack::RealTime::Client do
234
325
  end.to raise_error Slack::RealTime::Client::ClientNotStartedError
235
326
  end
236
327
  end
328
+
237
329
  describe '#next_id' do
238
330
  it 'increments' do
239
331
  previous_id = client.send(:next_id)
@@ -242,9 +334,11 @@ RSpec.describe Slack::RealTime::Client do
242
334
  end
243
335
  end
244
336
  end
337
+
245
338
  context 'client with nil store', vcr: { cassette_name: 'web/rtm_connect' } do
246
- let(:client) { Slack::RealTime::Client.new(store_class: nil) }
339
+ let(:client) { described_class.new(store_class: nil) }
247
340
  let(:url) { 'wss://mpmulti-w5tz.slack-msgs.com/websocket/uid' }
341
+
248
342
  it 'sets store to nil' do
249
343
  expect(client.store).to be nil
250
344
  end
@@ -253,7 +347,7 @@ RSpec.describe Slack::RealTime::Client do
253
347
  'type' => 'team_rename',
254
348
  'name' => 'New Team Name Inc.'
255
349
  )
256
- expect(client).to_not receive(:run_handlers)
350
+ expect(client).not_to receive(:run_handlers)
257
351
  client.send(:dispatch, event)
258
352
  end
259
353
  it 'self' do
@@ -268,8 +362,10 @@ RSpec.describe Slack::RealTime::Client do
268
362
  end
269
363
  end
270
364
  end
365
+
271
366
  context 'client with defaults' do
272
- let(:client) { Slack::RealTime::Client.new }
367
+ let(:client) { described_class.new }
368
+
273
369
  describe '#initialize' do
274
370
  it 'sets ping' do
275
371
  expect(client.websocket_ping).to eq 30
@@ -289,6 +385,7 @@ RSpec.describe Slack::RealTime::Client do
289
385
  end
290
386
  end
291
387
  end
388
+
292
389
  describe '#run_ping?' do
293
390
  it 'returns true when websocket_ping is greater than 0' do
294
391
  client.websocket_ping = 30
@@ -302,37 +399,56 @@ RSpec.describe Slack::RealTime::Client do
302
399
  end
303
400
  end
304
401
  end
402
+
305
403
  context 'with custom settings' do
306
404
  describe '#initialize' do
307
405
  Slack::RealTime::Config::ATTRIBUTES.each do |key|
308
- context key do
309
- let(:client) { Slack::RealTime::Client.new(key => 'custom') }
406
+ context key.to_s do
407
+ let(:client) { described_class.new(key => 'custom') }
408
+
310
409
  it "sets #{key}" do
311
- expect(client.send(key)).to_not eq Slack::RealTime::Config.send(key)
410
+ expect(client.send(key)).not_to eq Slack::RealTime::Config.send(key)
312
411
  expect(client.send(key)).to eq 'custom'
313
412
  end
314
413
  end
315
414
  end
316
415
  end
416
+
417
+ describe 'logger accessor' do
418
+ let(:client) { described_class.new }
419
+
420
+ it 'exposes public logger' do
421
+ expect(client.logger).to be_a(::Logger)
422
+ end
423
+ it 'exposes public logger=' do
424
+ expect { client.logger = nil }.not_to raise_error(NoMethodError)
425
+ end
426
+ end
317
427
  end
428
+
318
429
  context 'global config' do
319
430
  after do
320
- Slack::RealTime::Client.config.reset
431
+ described_class.config.reset
321
432
  end
433
+
322
434
  let(:url) { 'wss://ms173.slack-msgs.com/websocket/lqcUiAvrKTP-uuid=' }
323
- let(:client) { Slack::RealTime::Client.new }
435
+ let(:client) { described_class.new }
436
+
324
437
  context 'ping' do
325
438
  before do
326
- Slack::RealTime::Client.configure do |config|
439
+ described_class.configure do |config|
327
440
  config.websocket_ping = 15
328
441
  end
329
442
  end
443
+
330
444
  describe '#initialize' do
331
445
  it 'sets ping' do
332
446
  expect(client.websocket_ping).to eq 15
333
447
  end
334
448
  it 'creates a connection with custom ping', vcr: { cassette_name: 'web/rtm_start' } do
335
- expect(Slack::RealTime::Concurrency::Mock::WebSocket).to receive(:new).with(url, nil, ping: 15).and_return(ws)
449
+ expect(Slack::RealTime::Concurrency::Mock::WebSocket).to(
450
+ receive(:new).with(url, nil, ping: 15).and_return(ws)
451
+ )
336
452
  client.start!
337
453
  end
338
454
  it 'sets start_options' do
@@ -340,15 +456,17 @@ RSpec.describe Slack::RealTime::Client do
340
456
  end
341
457
  end
342
458
  end
459
+
343
460
  context 'proxy' do
344
461
  before do
345
- Slack::RealTime::Client.configure do |config|
462
+ described_class.configure do |config|
346
463
  config.websocket_proxy = {
347
464
  origin: 'http://username:password@proxy.example.com',
348
465
  headers: { 'User-Agent' => 'ruby' }
349
466
  }
350
467
  end
351
468
  end
469
+
352
470
  describe '#initialize' do
353
471
  it 'sets proxy' do
354
472
  expect(client.websocket_proxy).to eq(
@@ -370,40 +488,48 @@ RSpec.describe Slack::RealTime::Client do
370
488
  end
371
489
  end
372
490
  end
491
+
373
492
  context 'start_options' do
374
493
  before do
375
- Slack::RealTime::Client.configure do |config|
494
+ described_class.configure do |config|
376
495
  config.start_options = { simple_latest: true }
377
496
  end
378
497
  end
498
+
379
499
  describe '#initialize' do
380
500
  it 'sets start_options' do
381
501
  expect(client.start_options).to eq(simple_latest: true)
382
502
  end
383
503
  context 'start!' do
384
504
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
505
+
385
506
  before do
386
507
  allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
387
508
  allow(socket).to receive(:connect!)
388
509
  allow(socket).to receive(:start_sync)
389
510
  end
511
+
390
512
  it 'calls rtm_start with start options', vcr: { cassette_name: 'web/rtm_start' } do
391
- expect(client.web_client).to receive(:rtm_start).with(simple_latest: true).and_call_original
513
+ expect(client.web_client).to(
514
+ receive(:rtm_start).with(simple_latest: true).and_call_original
515
+ )
392
516
  client.start!
393
517
  end
394
518
  end
395
519
  end
396
520
  end
521
+
397
522
  context 'store_class' do
398
523
  context 'starter' do
399
524
  before do
400
- Slack::RealTime::Client.configure do |config|
525
+ described_class.configure do |config|
401
526
  config.store_class = Slack::RealTime::Stores::Starter
402
527
  end
403
528
  end
529
+
404
530
  describe '#initialize' do
405
531
  it 'can be overriden explicitly' do
406
- client = Slack::RealTime::Client.new(store_class: Slack::RealTime::Store)
532
+ client = described_class.new(store_class: Slack::RealTime::Store)
407
533
  expect(client.send(:store_class)).to eq Slack::RealTime::Store
408
534
  end
409
535
  it 'sets store_class' do
@@ -411,11 +537,13 @@ RSpec.describe Slack::RealTime::Client do
411
537
  end
412
538
  context 'start!' do
413
539
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
540
+
414
541
  before do
415
542
  allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
416
543
  allow(socket).to receive(:connect!)
417
544
  allow(socket).to receive(:start_sync)
418
545
  end
546
+
419
547
  it 'instantiates the correct store class', vcr: { cassette_name: 'web/rtm_connect' } do
420
548
  client.start!
421
549
  expect(client.store).to be_a Slack::RealTime::Stores::Starter
@@ -423,20 +551,24 @@ RSpec.describe Slack::RealTime::Client do
423
551
  end
424
552
  end
425
553
  end
554
+
426
555
  context 'store' do
427
556
  before do
428
- Slack::RealTime::Client.configure do |config|
557
+ described_class.configure do |config|
429
558
  config.store_class = Slack::RealTime::Stores::Store
430
559
  end
431
560
  end
561
+
432
562
  describe '#initialize' do
433
563
  context 'start!' do
434
564
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
565
+
435
566
  before do
436
567
  allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
437
568
  allow(socket).to receive(:connect!)
438
569
  allow(socket).to receive(:start_sync)
439
570
  end
571
+
440
572
  it 'calls rtm_start and not rtm_connect', vcr: { cassette_name: 'web/rtm_start' } do
441
573
  expect(client.web_client).to receive(:rtm_start).and_call_original
442
574
  client.start!
@@ -445,18 +577,20 @@ RSpec.describe Slack::RealTime::Client do
445
577
  end
446
578
  end
447
579
  end
580
+
448
581
  context 'start_method' do
449
582
  describe '#initialize' do
450
583
  it 'can be overriden explicitly' do
451
- client = Slack::RealTime::Client.new(start_method: :overriden)
584
+ client = described_class.new(start_method: :overriden)
452
585
  expect(client.send(:start_method)).to eq :overriden
453
586
  end
454
587
  context 'with start_method' do
455
588
  before do
456
- Slack::RealTime::Client.configure do |config|
589
+ described_class.configure do |config|
457
590
  config.start_method = :overriden
458
591
  end
459
592
  end
593
+
460
594
  it 'sets start_method' do
461
595
  expect(client.send(:start_method)).to eq :overriden
462
596
  end
@@ -467,14 +601,18 @@ RSpec.describe Slack::RealTime::Client do
467
601
  end.to raise_error RuntimeError, 'overriden'
468
602
  end
469
603
  end
604
+
470
605
  context 'start!' do
471
606
  let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
607
+
472
608
  before do
473
609
  allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
474
610
  allow(socket).to receive(:connect!)
475
611
  allow(socket).to receive(:start_sync)
476
612
  end
477
- it 'defaults to :rtm_start when using full store', vcr: { cassette_name: 'web/rtm_start' } do
613
+
614
+ it 'defaults to :rtm_start when using full store',
615
+ vcr: { cassette_name: 'web/rtm_start' } do
478
616
  expect(client.web_client).to receive(:rtm_start).and_call_original
479
617
  client.start!
480
618
  end