slack-ruby-client 0.5.4 → 0.6.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 (189) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop_todo.yml +17 -14
  3. data/CHANGELOG.md +7 -0
  4. data/CONTRIBUTING.md +2 -2
  5. data/Gemfile +1 -0
  6. data/README.md +32 -18
  7. data/Rakefile +4 -1
  8. data/UPGRADING.md +41 -3
  9. data/bin/commands.rb +1 -1
  10. data/bin/commands/api.rb +1 -1
  11. data/bin/commands/auth.rb +1 -1
  12. data/bin/commands/channels.rb +3 -3
  13. data/bin/commands/chat.rb +1 -1
  14. data/bin/commands/dnd.rb +1 -1
  15. data/bin/commands/emoji.rb +1 -1
  16. data/bin/commands/files.rb +2 -1
  17. data/bin/commands/groups.rb +1 -1
  18. data/bin/commands/im.rb +1 -1
  19. data/bin/commands/mpim.rb +1 -1
  20. data/bin/commands/oauth.rb +1 -1
  21. data/bin/commands/pins.rb +1 -1
  22. data/bin/commands/reactions.rb +1 -1
  23. data/bin/commands/rtm.rb +1 -1
  24. data/bin/commands/search.rb +1 -1
  25. data/bin/commands/stars.rb +1 -1
  26. data/bin/commands/team.rb +1 -1
  27. data/bin/commands/usergroups.rb +1 -1
  28. data/bin/commands/users.rb +10 -1
  29. data/examples/hi_real_time/hi.rb +5 -5
  30. data/examples/hi_real_time_and_web/hi.rb +4 -4
  31. data/examples/hi_real_time_async/hi.rb +5 -5
  32. data/lib/slack-ruby-client.rb +10 -0
  33. data/lib/slack/messages/message.rb +9 -0
  34. data/lib/slack/real_time/api/schema/event.json +22 -0
  35. data/lib/slack/real_time/api/templates/event_handler.erb +18 -0
  36. data/lib/slack/real_time/api/templates/event_handlers.erb +5 -0
  37. data/lib/slack/real_time/client.rb +31 -9
  38. data/lib/slack/real_time/config.rb +3 -1
  39. data/lib/slack/real_time/event_handlers.rb +66 -0
  40. data/lib/slack/real_time/event_handlers/accounts_changed.rb +18 -0
  41. data/lib/slack/real_time/event_handlers/bot_added.rb +16 -0
  42. data/lib/slack/real_time/event_handlers/bot_changed.rb +17 -0
  43. data/lib/slack/real_time/event_handlers/channel_archive.rb +17 -0
  44. data/lib/slack/real_time/event_handlers/channel_created.rb +17 -0
  45. data/lib/slack/real_time/event_handlers/channel_deleted.rb +16 -0
  46. data/lib/slack/real_time/event_handlers/channel_history_changed.rb +18 -0
  47. data/lib/slack/real_time/event_handlers/channel_joined.rb +22 -0
  48. data/lib/slack/real_time/event_handlers/channel_left.rb +17 -0
  49. data/lib/slack/real_time/event_handlers/channel_marked.rb +18 -0
  50. data/lib/slack/real_time/event_handlers/channel_rename.rb +17 -0
  51. data/lib/slack/real_time/event_handlers/channel_unarchive.rb +17 -0
  52. data/lib/slack/real_time/event_handlers/commands_changed.rb +18 -0
  53. data/lib/slack/real_time/event_handlers/dnd_updated.rb +18 -0
  54. data/lib/slack/real_time/event_handlers/dnd_updated_user.rb +18 -0
  55. data/lib/slack/real_time/event_handlers/email_domain_changed.rb +16 -0
  56. data/lib/slack/real_time/event_handlers/emoji_changed.rb +18 -0
  57. data/lib/slack/real_time/event_handlers/file_change.rb +18 -0
  58. data/lib/slack/real_time/event_handlers/file_comment_added.rb +18 -0
  59. data/lib/slack/real_time/event_handlers/file_comment_deleted.rb +18 -0
  60. data/lib/slack/real_time/event_handlers/file_comment_edited.rb +18 -0
  61. data/lib/slack/real_time/event_handlers/file_created.rb +18 -0
  62. data/lib/slack/real_time/event_handlers/file_deleted.rb +18 -0
  63. data/lib/slack/real_time/event_handlers/file_private.rb +18 -0
  64. data/lib/slack/real_time/event_handlers/file_public.rb +18 -0
  65. data/lib/slack/real_time/event_handlers/file_shared.rb +18 -0
  66. data/lib/slack/real_time/event_handlers/file_unshared.rb +18 -0
  67. data/lib/slack/real_time/event_handlers/group_archive.rb +17 -0
  68. data/lib/slack/real_time/event_handlers/group_close.rb +16 -0
  69. data/lib/slack/real_time/event_handlers/group_history_changed.rb +18 -0
  70. data/lib/slack/real_time/event_handlers/group_joined.rb +16 -0
  71. data/lib/slack/real_time/event_handlers/group_left.rb +17 -0
  72. data/lib/slack/real_time/event_handlers/group_marked.rb +18 -0
  73. data/lib/slack/real_time/event_handlers/group_open.rb +16 -0
  74. data/lib/slack/real_time/event_handlers/group_rename.rb +17 -0
  75. data/lib/slack/real_time/event_handlers/group_unarchive.rb +17 -0
  76. data/lib/slack/real_time/event_handlers/im_close.rb +16 -0
  77. data/lib/slack/real_time/event_handlers/im_created.rb +16 -0
  78. data/lib/slack/real_time/event_handlers/im_history_changed.rb +18 -0
  79. data/lib/slack/real_time/event_handlers/im_marked.rb +18 -0
  80. data/lib/slack/real_time/event_handlers/im_open.rb +16 -0
  81. data/lib/slack/real_time/event_handlers/manual_presence_change.rb +16 -0
  82. data/lib/slack/real_time/event_handlers/pin_added.rb +18 -0
  83. data/lib/slack/real_time/event_handlers/pin_removed.rb +18 -0
  84. data/lib/slack/real_time/event_handlers/pref_change.rb +16 -0
  85. data/lib/slack/real_time/event_handlers/presence_change.rb +17 -0
  86. data/lib/slack/real_time/event_handlers/reaction_added.rb +18 -0
  87. data/lib/slack/real_time/event_handlers/reaction_removed.rb +18 -0
  88. data/lib/slack/real_time/event_handlers/reconnect_url.rb +18 -0
  89. data/lib/slack/real_time/event_handlers/star_added.rb +18 -0
  90. data/lib/slack/real_time/event_handlers/star_removed.rb +18 -0
  91. data/lib/slack/real_time/event_handlers/subteam_created.rb +18 -0
  92. data/lib/slack/real_time/event_handlers/subteam_self_added.rb +18 -0
  93. data/lib/slack/real_time/event_handlers/subteam_self_removed.rb +18 -0
  94. data/lib/slack/real_time/event_handlers/subteam_updated.rb +18 -0
  95. data/lib/slack/real_time/event_handlers/team_domain_change.rb +17 -0
  96. data/lib/slack/real_time/event_handlers/team_join.rb +16 -0
  97. data/lib/slack/real_time/event_handlers/team_migration_started.rb +18 -0
  98. data/lib/slack/real_time/event_handlers/team_plan_change.rb +16 -0
  99. data/lib/slack/real_time/event_handlers/team_pref_change.rb +16 -0
  100. data/lib/slack/real_time/event_handlers/team_profile_change.rb +18 -0
  101. data/lib/slack/real_time/event_handlers/team_profile_delete.rb +18 -0
  102. data/lib/slack/real_time/event_handlers/team_profile_reorder.rb +18 -0
  103. data/lib/slack/real_time/event_handlers/team_rename.rb +16 -0
  104. data/lib/slack/real_time/event_handlers/user_change.rb +16 -0
  105. data/lib/slack/real_time/event_handlers/user_typing.rb +18 -0
  106. data/lib/slack/real_time/models.rb +7 -0
  107. data/lib/slack/real_time/models/base.rb +11 -0
  108. data/lib/slack/real_time/models/bot.rb +8 -0
  109. data/lib/slack/real_time/models/channel.rb +8 -0
  110. data/lib/slack/real_time/models/group.rb +8 -0
  111. data/lib/slack/real_time/models/im.rb +8 -0
  112. data/lib/slack/real_time/models/team.rb +8 -0
  113. data/lib/slack/real_time/models/user.rb +8 -0
  114. data/lib/slack/real_time/store.rb +47 -0
  115. data/lib/slack/version.rb +1 -1
  116. data/lib/slack/web/api/endpoints.rb +1 -1
  117. data/lib/slack/web/api/endpoints/api.rb +1 -1
  118. data/lib/slack/web/api/endpoints/auth.rb +1 -1
  119. data/lib/slack/web/api/endpoints/channels.rb +2 -4
  120. data/lib/slack/web/api/endpoints/chat.rb +1 -1
  121. data/lib/slack/web/api/endpoints/dnd.rb +1 -1
  122. data/lib/slack/web/api/endpoints/emoji.rb +1 -1
  123. data/lib/slack/web/api/endpoints/files.rb +4 -1
  124. data/lib/slack/web/api/endpoints/groups.rb +1 -1
  125. data/lib/slack/web/api/endpoints/im.rb +1 -1
  126. data/lib/slack/web/api/endpoints/mpim.rb +1 -1
  127. data/lib/slack/web/api/endpoints/oauth.rb +1 -1
  128. data/lib/slack/web/api/endpoints/pins.rb +1 -1
  129. data/lib/slack/web/api/endpoints/reactions.rb +1 -1
  130. data/lib/slack/web/api/endpoints/rtm.rb +1 -1
  131. data/lib/slack/web/api/endpoints/search.rb +1 -1
  132. data/lib/slack/web/api/endpoints/stars.rb +1 -1
  133. data/lib/slack/web/api/endpoints/team.rb +1 -1
  134. data/lib/slack/web/api/endpoints/usergroups.rb +1 -1
  135. data/lib/slack/web/api/endpoints/users.rb +1 -1
  136. data/lib/slack/web/api/mixins.rb +1 -0
  137. data/lib/slack/web/api/mixins/channels.id.rb +2 -2
  138. data/lib/slack/web/api/mixins/groups.id.rb +2 -2
  139. data/lib/slack/web/api/mixins/users.id.rb +2 -2
  140. data/lib/slack/web/api/mixins/users.search.json +19 -0
  141. data/lib/slack/web/api/mixins/users.search.rb +43 -0
  142. data/lib/slack/web/api/templates/command.erb +1 -1
  143. data/lib/slack/web/api/templates/commands.erb +1 -1
  144. data/lib/slack/web/api/templates/endpoints.erb +1 -1
  145. data/lib/slack/web/api/templates/method.erb +1 -1
  146. data/lib/slack/web/api/templates/method_spec.erb +20 -0
  147. data/lib/slack/web/faraday/connection.rb +1 -0
  148. data/lib/tasks/git.rake +7 -0
  149. data/lib/tasks/real_time.rake +45 -0
  150. data/lib/tasks/update.rake +9 -0
  151. data/lib/{slack/web/api/tasks/generate.rake → tasks/web.rake} +6 -6
  152. data/slack-ruby-client.gemspec +1 -0
  153. data/spec/fixtures/slack/web/rtm_start.yml +53 -22
  154. data/spec/integration/integration_spec.rb +5 -5
  155. data/spec/slack/real_time/client_spec.rb +72 -10
  156. data/spec/slack/real_time/event_handlers/bot_spec.rb +42 -0
  157. data/spec/slack/real_time/event_handlers/channel_spec.rb +116 -0
  158. data/spec/slack/real_time/event_handlers/group_spec.rb +90 -0
  159. data/spec/slack/real_time/event_handlers/im_spec.rb +47 -0
  160. data/spec/slack/real_time/event_handlers/team_spec.rb +58 -0
  161. data/spec/slack/real_time/event_handlers/user_spec.rb +61 -0
  162. data/spec/slack/real_time/rtm_start_spec.rb +13 -0
  163. data/spec/slack/real_time/store_spec.rb +11 -0
  164. data/spec/slack/slack_spec.rb +6 -6
  165. data/spec/slack/web/api/endpoints/api_spec.rb +7 -0
  166. data/spec/slack/web/api/endpoints/{auth_spec.rb → custom_specs/auth_spec.rb} +0 -0
  167. data/spec/slack/web/api/endpoints/{channels_spec.rb → custom_specs/channels_spec.rb} +1 -1
  168. data/spec/slack/web/api/endpoints/{chat_spec.rb → custom_specs/chat_spec.rb} +0 -0
  169. data/spec/slack/web/api/endpoints/{groups_spec.rb → custom_specs/groups_spec.rb} +1 -1
  170. data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +23 -0
  171. data/spec/slack/web/api/endpoints/dnd_spec.rb +12 -0
  172. data/spec/slack/web/api/endpoints/emoji_spec.rb +7 -0
  173. data/spec/slack/web/api/endpoints/files_spec.rb +36 -0
  174. data/spec/slack/web/api/endpoints/im_spec.rb +30 -0
  175. data/spec/slack/web/api/endpoints/mpim_spec.rb +30 -0
  176. data/spec/slack/web/api/endpoints/oauth_spec.rb +18 -0
  177. data/spec/slack/web/api/endpoints/pins_spec.rb +22 -0
  178. data/spec/slack/web/api/endpoints/reactions_spec.rb +17 -0
  179. data/spec/slack/web/api/endpoints/rtm_spec.rb +7 -0
  180. data/spec/slack/web/api/endpoints/search_spec.rb +22 -0
  181. data/spec/slack/web/api/endpoints/stars_spec.rb +7 -0
  182. data/spec/slack/web/api/endpoints/team_spec.rb +7 -0
  183. data/spec/slack/web/api/endpoints/usergroups_spec.rb +35 -0
  184. data/spec/slack/web/api/mixins/channels_spec.rb +6 -6
  185. data/spec/slack/web/api/mixins/groups_spec.rb +6 -6
  186. data/spec/slack/web/api/mixins/users_spec.rb +12 -6
  187. data/spec/support/real_time/event.rb +11 -0
  188. metadata +159 -13
  189. data/spec/slack/web/api/endpoints/users_spec.rb +0 -17
@@ -29,7 +29,7 @@ RSpec.describe 'integration test', skip: !ENV['SLACK_API_TOKEN'] && 'missing SLA
29
29
 
30
30
  before do
31
31
  client.on :hello do
32
- logger.info "Successfully connected, welcome '#{client.self['name']}' to the '#{client.team['name']}' team at https://#{client.team['domain']}.slack.com."
32
+ logger.info "Successfully connected, welcome '#{client.self.name}' to the '#{client.team.name}' team at https://#{client.team.domain}.slack.com."
33
33
  end
34
34
 
35
35
  client.on :close do
@@ -69,7 +69,7 @@ RSpec.describe 'integration test', skip: !ENV['SLACK_API_TOKEN'] && 'missing SLA
69
69
  start_server
70
70
  end
71
71
 
72
- let(:channel) { "@#{client.self['name']}" }
72
+ let(:channel) { "@#{client.self.name}" }
73
73
 
74
74
  it 'responds to message' do
75
75
  message = SecureRandom.hex
@@ -77,9 +77,9 @@ RSpec.describe 'integration test', skip: !ENV['SLACK_API_TOKEN'] && 'missing SLA
77
77
  client.on :message do |data|
78
78
  logger.debug data
79
79
  # concurrent execution of tests causes messages to arrive in any order
80
- next unless data['text'] == message
81
- expect(data['text']).to eq message
82
- expect(data['subtype']).to eq 'bot_message'
80
+ next unless data.text == message
81
+ expect(data.text).to eq message
82
+ expect(data.subtype).to eq 'bot_message'
83
83
  logger.debug 'client.stop!'
84
84
  expect(client.started?).to be true
85
85
  client.stop!
@@ -59,29 +59,33 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
59
59
  expect(client.url).to eq url
60
60
  end
61
61
  it 'sets team' do
62
- expect(client.team['domain']).to eq 'dblockdotorg'
62
+ expect(client.team.domain).to eq 'dblockdotorg'
63
+ end
64
+ it 'sets teams' do
65
+ expect(client.teams.count).to eq 1
66
+ expect(client.teams.values.first).to eq client.team
63
67
  end
64
68
  it 'sets self' do
65
- expect(client.self['id']).to eq 'U07518DTL'
69
+ expect(client.self.id).to eq 'U07518DTL'
66
70
  end
67
71
  it 'sets users' do
68
- expect(client.users.count).to eq 7
69
- expect(client.users.first['id']).to eq 'U07KECJ77'
72
+ expect(client.users.count).to eq 18
73
+ expect(client.users.values.first['id']).to eq 'U092BDCLV'
70
74
  end
71
75
  it 'sets channels' do
72
- expect(client.channels.count).to eq 8
73
- expect(client.channels.first['name']).to eq 'demo'
76
+ expect(client.channels.count).to eq 37
77
+ expect(client.channels.values.first['name']).to eq 'a1'
74
78
  end
75
79
  it 'sets ims' do
76
80
  expect(client.ims.count).to eq 2
77
- expect(client.ims.first['user']).to eq 'USLACKBOT'
81
+ expect(client.ims.values.first['user']).to eq 'USLACKBOT'
78
82
  end
79
83
  it 'sets bots' do
80
- expect(client.bots.count).to eq 5
81
- expect(client.bots.first['name']).to eq 'bot'
84
+ expect(client.bots.count).to eq 16
85
+ expect(client.bots.values.first['name']).to eq 'bot'
82
86
  end
83
87
  it 'sets groups' do
84
- expect(client.groups.count).to eq 0
88
+ expect(client.groups.count).to eq 1
85
89
  end
86
90
  end
87
91
  it 'uses web client to fetch url' do
@@ -113,6 +117,37 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
113
117
  expect(client.send(:next_id)).to eq previous_id + 1
114
118
  end
115
119
  end
120
+ context 'store_class: nil' do
121
+ let(:client) { Slack::RealTime::Client.new(store_class: nil) }
122
+ it 'sets store to nil' do
123
+ expect(client.store).to be nil
124
+ end
125
+ it "doesn't handle events" do
126
+ event = Slack::RealTime::Event.new(
127
+ 'type' => 'team_rename',
128
+ 'name' => 'New Team Name Inc.'
129
+ )
130
+ expect(client).to_not receive(:run_handlers)
131
+ client.send(:dispatch, event)
132
+ end
133
+ it 'self' do
134
+ expect(client.self).to be nil
135
+ end
136
+ it 'team' do
137
+ expect(client.team).to be nil
138
+ end
139
+ end
140
+ context 'subclassed' do
141
+ let(:client) { Class.new(Slack::RealTime::Client).new }
142
+ it 'runs event handlers' do
143
+ event = Slack::RealTime::Event.new(
144
+ 'type' => 'team_rename',
145
+ 'name' => 'New Team Name Inc.'
146
+ )
147
+ client.send(:dispatch, event)
148
+ expect(client.store.team.name).to eq 'New Team Name Inc.'
149
+ end
150
+ end
116
151
  end
117
152
  end
118
153
  context 'with defaults' do
@@ -163,6 +198,9 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
163
198
  expect(Slack::RealTime::Concurrency::Mock::WebSocket).to receive(:new).with(url, nil, ping: 15).and_return(ws)
164
199
  client.start!
165
200
  end
201
+ it 'sets start_options' do
202
+ expect(client.start_options).to eq({})
203
+ end
166
204
  end
167
205
  end
168
206
  context 'proxy' do
@@ -194,5 +232,29 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
194
232
  end
195
233
  end
196
234
  end
235
+ context 'start_options' do
236
+ before do
237
+ Slack::RealTime::Client.configure do |config|
238
+ config.start_options = { simple_latest: true }
239
+ end
240
+ end
241
+ describe '#initialize' do
242
+ it 'sets start_options' do
243
+ expect(client.start_options).to eq(simple_latest: true)
244
+ end
245
+ context 'start!' do
246
+ let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
247
+ before do
248
+ allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
249
+ allow(socket).to receive(:connect!)
250
+ allow(socket).to receive(:start_sync).and_yield
251
+ end
252
+ it 'calls rtm_start with start options' do
253
+ expect(client.web_client).to receive(:rtm_start).with(simple_latest: true).and_call_original
254
+ client.start!
255
+ end
256
+ end
257
+ end
258
+ end
197
259
  end
198
260
  end
@@ -0,0 +1,42 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' } do
4
+ include_context 'connected client'
5
+
6
+ context 'bot' do
7
+ it 'sets bot data on rtm.start' do
8
+ expect(client.bots.count).to eq 16
9
+ end
10
+ it 'bot_added' do
11
+ expect do
12
+ event = Slack::RealTime::Event.new(
13
+ 'type' => 'bot_added',
14
+ 'bot' => {
15
+ 'id' => 'B024BE7LH',
16
+ 'name' => 'hugbot',
17
+ 'icons' => {
18
+ 'image_48' => 'https:\/\/slack.com\/path\/to\/hugbot_48.png'
19
+ }
20
+ })
21
+ client.send(:dispatch, event)
22
+ end.to change(client.bots, :count).by(1)
23
+ bot = client.bots['B024BE7LH']
24
+ expect(bot['id']).to eq 'B024BE7LH'
25
+ expect(bot['name']).to eq 'hugbot'
26
+ expect(bot['icons']['image_48']).to eq 'https:\/\/slack.com\/path\/to\/hugbot_48.png'
27
+ end
28
+ it 'bot_changed' do
29
+ expect do
30
+ event = Slack::RealTime::Event.new(
31
+ 'type' => 'bot_changed',
32
+ 'bot' => {
33
+ 'id' => 'B0751JU2H',
34
+ 'name' => 'hugbot'
35
+ })
36
+ client.send(:dispatch, event)
37
+ end.to_not change(client.bots, :count)
38
+ bot = client.bots['B0751JU2H']
39
+ expect(bot['name']).to eq 'hugbot'
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,116 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' } do
4
+ include_context 'connected client'
5
+
6
+ context 'channel' do
7
+ it 'sets channel data' do
8
+ expect(client.channels.count).to eq 37
9
+ end
10
+ it 'channel_archive' do
11
+ channel = client.channels['C0HNTD0CW']
12
+ expect(channel.is_archived).to be false
13
+ event = Slack::RealTime::Event.new(
14
+ 'type' => 'channel_archive',
15
+ 'channel' => 'C0HNTD0CW',
16
+ 'user' => 'U04KB5WQR'
17
+ )
18
+ client.send(:dispatch, event)
19
+ expect(channel.is_archived).to be true
20
+ end
21
+ it 'channel_created' do
22
+ expect(client.channels['C024BE91L']).to be nil
23
+ event = Slack::RealTime::Event.new(
24
+ 'type' => 'channel_created',
25
+ 'channel' => {
26
+ 'id' => 'C024BE91L',
27
+ 'name' => 'fun',
28
+ 'created' => 1_360_782_804,
29
+ 'creator' => 'U04KB5WQR'
30
+ }
31
+ )
32
+ client.send(:dispatch, event)
33
+ channel = client.channels['C024BE91L']
34
+ expect(channel).to_not be nil
35
+ expect(channel.name).to eq 'fun'
36
+ expect(channel.creator).to eq 'U04KB5WQR'
37
+ expect(channel.created).to eq 1_360_782_804
38
+ end
39
+ it 'channel_deleted' do
40
+ expect(client.channels['C0HLE0BBL']).to_not be nil
41
+ event = Slack::RealTime::Event.new(
42
+ 'type' => 'channel_deleted',
43
+ 'channel' => 'C0HLE0BBL'
44
+ )
45
+ client.send(:dispatch, event)
46
+ expect(client.channels['C0HLE0BBL']).to be nil
47
+ end
48
+ context 'channel_joined' do
49
+ it 'creates channel' do
50
+ expect(client.channels['CDEADBEEF']).to be nil
51
+ event = Slack::RealTime::Event.new(
52
+ 'type' => 'channel_joined',
53
+ 'channel' => {
54
+ 'id' => 'CDEADBEEF',
55
+ 'name' => 'beef'
56
+ }
57
+ )
58
+ client.send(:dispatch, event)
59
+ channel = client.channels['CDEADBEEF']
60
+ expect(channel).to_not be nil
61
+ expect(channel.name).to eq 'beef'
62
+ end
63
+ it 'updates channel' do
64
+ expect(client.channels['CDEADBEEF']).to be nil
65
+ client.channels['CDEADBEEF'] = Slack::RealTime::Models::Channel.new('id' => 'CDEADBEEF', name: 'beef')
66
+ event = Slack::RealTime::Event.new(
67
+ 'type' => 'channel_joined',
68
+ 'channel' => {
69
+ 'id' => 'CDEADBEEF',
70
+ 'name' => 'beef',
71
+ 'updated' => true
72
+ }
73
+ )
74
+ client.send(:dispatch, event)
75
+ channel = client.channels['CDEADBEEF']
76
+ expect(channel).to_not be nil
77
+ expect(channel.updated).to be true
78
+ end
79
+ end
80
+ it 'channel_left' do
81
+ channel = client.channels['C0JHNAB5H']
82
+ expect(channel.members).to include client.self.id
83
+ event = Slack::RealTime::Event.new(
84
+ 'type' => 'channel_left',
85
+ 'channel' => 'C0JHNAB5H'
86
+ )
87
+ client.send(:dispatch, event)
88
+ expect(channel.members).to_not include client.self.id
89
+ end
90
+ it 'channel_rename' do
91
+ channel = client.channels['C0HLE0BBL']
92
+ expect(channel.name).to eq 'gifs'
93
+ event = Slack::RealTime::Event.new(
94
+ 'type' => 'channel_rename',
95
+ 'channel' => {
96
+ 'id' => 'C0HLE0BBL',
97
+ 'name' => 'updated',
98
+ 'created' => 1_360_782_804
99
+ }
100
+ )
101
+ client.send(:dispatch, event)
102
+ expect(channel.name).to eq 'updated'
103
+ end
104
+ it 'channel_unarchive' do
105
+ channel = client.channels['C0HLE0BBL']
106
+ expect(channel.is_archived).to be true
107
+ event = Slack::RealTime::Event.new(
108
+ 'type' => 'channel_unarchive',
109
+ 'channel' => 'C0HLE0BBL',
110
+ 'user' => 'U04KB5WQR'
111
+ )
112
+ client.send(:dispatch, event)
113
+ expect(channel.is_archived).to be false
114
+ end
115
+ end
116
+ end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' } do
4
+ include_context 'connected client'
5
+
6
+ context 'group' do
7
+ it 'sets group data' do
8
+ expect(client.groups.count).to eq 1
9
+ end
10
+ it 'group_joined' do
11
+ expect(client.groups['CDEADBEEF']).to be nil
12
+ event = Slack::RealTime::Event.new(
13
+ 'type' => 'group_joined',
14
+ 'channel' => {
15
+ 'id' => 'CDEADBEEF',
16
+ 'name' => 'beef'
17
+ }
18
+ )
19
+ client.send(:dispatch, event)
20
+ group = client.groups['CDEADBEEF']
21
+ expect(group).to_not be nil
22
+ expect(group.name).to eq 'beef'
23
+ end
24
+ it 'group_left' do
25
+ group = client.groups['G0K7EV5A7']
26
+ expect(group.members).to include client.self.id
27
+ event = Slack::RealTime::Event.new(
28
+ 'type' => 'group_left',
29
+ 'channel' => 'G0K7EV5A7'
30
+ )
31
+ client.send(:dispatch, event)
32
+ expect(group.members).to_not include client.self.id
33
+ end
34
+ it 'group_archive' do
35
+ group = client.groups['G0K7EV5A7']
36
+ expect(group.is_archived).to be false
37
+ event = Slack::RealTime::Event.new(
38
+ 'type' => 'group_archive',
39
+ 'channel' => 'G0K7EV5A7'
40
+ )
41
+ client.send(:dispatch, event)
42
+ expect(group.is_archived).to be true
43
+ end
44
+ it 'group_unarchive' do
45
+ group = client.groups['G0K7EV5A7']
46
+ group.is_archived = true
47
+ event = Slack::RealTime::Event.new(
48
+ 'type' => 'group_unarchive',
49
+ 'channel' => 'G0K7EV5A7'
50
+ )
51
+ client.send(:dispatch, event)
52
+ expect(group.is_archived).to be false
53
+ end
54
+ it 'group_rename' do
55
+ group = client.groups['G0K7EV5A7']
56
+ expect(group.name).to eq 'mpdm-dblock--rubybot--player1-1'
57
+ event = Slack::RealTime::Event.new(
58
+ 'type' => 'group_rename',
59
+ 'channel' => {
60
+ 'id' => 'G0K7EV5A7',
61
+ 'name' => 'updated',
62
+ 'created' => 1_360_782_804
63
+ }
64
+ )
65
+ client.send(:dispatch, event)
66
+ expect(group.name).to eq 'updated'
67
+ end
68
+ it 'group_open' do
69
+ group = client.groups['G0K7EV5A7']
70
+ expect(group).to_not be_nil
71
+ event = Slack::RealTime::Event.new(
72
+ 'type' => 'group_open',
73
+ 'channel' => 'G0K7EV5A7'
74
+ )
75
+ client.send(:dispatch, event)
76
+ expect(group.is_open).to be true
77
+ end
78
+ it 'group_close' do
79
+ group = client.groups['G0K7EV5A7']
80
+ expect(group).to_not be_nil
81
+ group.is_open = true
82
+ event = Slack::RealTime::Event.new(
83
+ 'type' => 'group_close',
84
+ 'channel' => 'G0K7EV5A7'
85
+ )
86
+ client.send(:dispatch, event)
87
+ expect(group.is_open).to be false
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,47 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' } do
4
+ include_context 'connected client'
5
+
6
+ context 'im' do
7
+ it 'sets im data' do
8
+ expect(client.ims.count).to eq 2
9
+ end
10
+ it 'im_created' do
11
+ expect(client.ims['CDEADBEEF']).to be nil
12
+ event = Slack::RealTime::Event.new(
13
+ 'type' => 'im_created',
14
+ 'channel' => {
15
+ 'id' => 'CDEADBEEF',
16
+ 'name' => 'beef'
17
+ }
18
+ )
19
+ client.send(:dispatch, event)
20
+ im = client.ims['CDEADBEEF']
21
+ expect(im).to_not be nil
22
+ expect(im.name).to eq 'beef'
23
+ end
24
+ it 'im_open' do
25
+ im = client.ims['D07519J57']
26
+ expect(im).to_not be_nil
27
+ im.is_open = false
28
+ event = Slack::RealTime::Event.new(
29
+ 'type' => 'im_open',
30
+ 'channel' => 'D07519J57'
31
+ )
32
+ client.send(:dispatch, event)
33
+ expect(im.is_open).to be true
34
+ end
35
+ it 'im_close' do
36
+ im = client.ims['D07519J57']
37
+ expect(im).to_not be_nil
38
+ expect(im.is_open).to be true
39
+ event = Slack::RealTime::Event.new(
40
+ 'type' => 'im_close',
41
+ 'channel' => 'D07519J57'
42
+ )
43
+ client.send(:dispatch, event)
44
+ expect(im.is_open).to be false
45
+ end
46
+ end
47
+ end