slack-ruby-client 0.5.4 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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