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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +17 -14
- data/CHANGELOG.md +7 -0
- data/CONTRIBUTING.md +2 -2
- data/Gemfile +1 -0
- data/README.md +32 -18
- data/Rakefile +4 -1
- data/UPGRADING.md +41 -3
- data/bin/commands.rb +1 -1
- data/bin/commands/api.rb +1 -1
- data/bin/commands/auth.rb +1 -1
- data/bin/commands/channels.rb +3 -3
- data/bin/commands/chat.rb +1 -1
- data/bin/commands/dnd.rb +1 -1
- data/bin/commands/emoji.rb +1 -1
- data/bin/commands/files.rb +2 -1
- data/bin/commands/groups.rb +1 -1
- data/bin/commands/im.rb +1 -1
- data/bin/commands/mpim.rb +1 -1
- data/bin/commands/oauth.rb +1 -1
- data/bin/commands/pins.rb +1 -1
- data/bin/commands/reactions.rb +1 -1
- data/bin/commands/rtm.rb +1 -1
- data/bin/commands/search.rb +1 -1
- data/bin/commands/stars.rb +1 -1
- data/bin/commands/team.rb +1 -1
- data/bin/commands/usergroups.rb +1 -1
- data/bin/commands/users.rb +10 -1
- data/examples/hi_real_time/hi.rb +5 -5
- data/examples/hi_real_time_and_web/hi.rb +4 -4
- data/examples/hi_real_time_async/hi.rb +5 -5
- data/lib/slack-ruby-client.rb +10 -0
- data/lib/slack/messages/message.rb +9 -0
- data/lib/slack/real_time/api/schema/event.json +22 -0
- data/lib/slack/real_time/api/templates/event_handler.erb +18 -0
- data/lib/slack/real_time/api/templates/event_handlers.erb +5 -0
- data/lib/slack/real_time/client.rb +31 -9
- data/lib/slack/real_time/config.rb +3 -1
- data/lib/slack/real_time/event_handlers.rb +66 -0
- data/lib/slack/real_time/event_handlers/accounts_changed.rb +18 -0
- data/lib/slack/real_time/event_handlers/bot_added.rb +16 -0
- data/lib/slack/real_time/event_handlers/bot_changed.rb +17 -0
- data/lib/slack/real_time/event_handlers/channel_archive.rb +17 -0
- data/lib/slack/real_time/event_handlers/channel_created.rb +17 -0
- data/lib/slack/real_time/event_handlers/channel_deleted.rb +16 -0
- data/lib/slack/real_time/event_handlers/channel_history_changed.rb +18 -0
- data/lib/slack/real_time/event_handlers/channel_joined.rb +22 -0
- data/lib/slack/real_time/event_handlers/channel_left.rb +17 -0
- data/lib/slack/real_time/event_handlers/channel_marked.rb +18 -0
- data/lib/slack/real_time/event_handlers/channel_rename.rb +17 -0
- data/lib/slack/real_time/event_handlers/channel_unarchive.rb +17 -0
- data/lib/slack/real_time/event_handlers/commands_changed.rb +18 -0
- data/lib/slack/real_time/event_handlers/dnd_updated.rb +18 -0
- data/lib/slack/real_time/event_handlers/dnd_updated_user.rb +18 -0
- data/lib/slack/real_time/event_handlers/email_domain_changed.rb +16 -0
- data/lib/slack/real_time/event_handlers/emoji_changed.rb +18 -0
- data/lib/slack/real_time/event_handlers/file_change.rb +18 -0
- data/lib/slack/real_time/event_handlers/file_comment_added.rb +18 -0
- data/lib/slack/real_time/event_handlers/file_comment_deleted.rb +18 -0
- data/lib/slack/real_time/event_handlers/file_comment_edited.rb +18 -0
- data/lib/slack/real_time/event_handlers/file_created.rb +18 -0
- data/lib/slack/real_time/event_handlers/file_deleted.rb +18 -0
- data/lib/slack/real_time/event_handlers/file_private.rb +18 -0
- data/lib/slack/real_time/event_handlers/file_public.rb +18 -0
- data/lib/slack/real_time/event_handlers/file_shared.rb +18 -0
- data/lib/slack/real_time/event_handlers/file_unshared.rb +18 -0
- data/lib/slack/real_time/event_handlers/group_archive.rb +17 -0
- data/lib/slack/real_time/event_handlers/group_close.rb +16 -0
- data/lib/slack/real_time/event_handlers/group_history_changed.rb +18 -0
- data/lib/slack/real_time/event_handlers/group_joined.rb +16 -0
- data/lib/slack/real_time/event_handlers/group_left.rb +17 -0
- data/lib/slack/real_time/event_handlers/group_marked.rb +18 -0
- data/lib/slack/real_time/event_handlers/group_open.rb +16 -0
- data/lib/slack/real_time/event_handlers/group_rename.rb +17 -0
- data/lib/slack/real_time/event_handlers/group_unarchive.rb +17 -0
- data/lib/slack/real_time/event_handlers/im_close.rb +16 -0
- data/lib/slack/real_time/event_handlers/im_created.rb +16 -0
- data/lib/slack/real_time/event_handlers/im_history_changed.rb +18 -0
- data/lib/slack/real_time/event_handlers/im_marked.rb +18 -0
- data/lib/slack/real_time/event_handlers/im_open.rb +16 -0
- data/lib/slack/real_time/event_handlers/manual_presence_change.rb +16 -0
- data/lib/slack/real_time/event_handlers/pin_added.rb +18 -0
- data/lib/slack/real_time/event_handlers/pin_removed.rb +18 -0
- data/lib/slack/real_time/event_handlers/pref_change.rb +16 -0
- data/lib/slack/real_time/event_handlers/presence_change.rb +17 -0
- data/lib/slack/real_time/event_handlers/reaction_added.rb +18 -0
- data/lib/slack/real_time/event_handlers/reaction_removed.rb +18 -0
- data/lib/slack/real_time/event_handlers/reconnect_url.rb +18 -0
- data/lib/slack/real_time/event_handlers/star_added.rb +18 -0
- data/lib/slack/real_time/event_handlers/star_removed.rb +18 -0
- data/lib/slack/real_time/event_handlers/subteam_created.rb +18 -0
- data/lib/slack/real_time/event_handlers/subteam_self_added.rb +18 -0
- data/lib/slack/real_time/event_handlers/subteam_self_removed.rb +18 -0
- data/lib/slack/real_time/event_handlers/subteam_updated.rb +18 -0
- data/lib/slack/real_time/event_handlers/team_domain_change.rb +17 -0
- data/lib/slack/real_time/event_handlers/team_join.rb +16 -0
- data/lib/slack/real_time/event_handlers/team_migration_started.rb +18 -0
- data/lib/slack/real_time/event_handlers/team_plan_change.rb +16 -0
- data/lib/slack/real_time/event_handlers/team_pref_change.rb +16 -0
- data/lib/slack/real_time/event_handlers/team_profile_change.rb +18 -0
- data/lib/slack/real_time/event_handlers/team_profile_delete.rb +18 -0
- data/lib/slack/real_time/event_handlers/team_profile_reorder.rb +18 -0
- data/lib/slack/real_time/event_handlers/team_rename.rb +16 -0
- data/lib/slack/real_time/event_handlers/user_change.rb +16 -0
- data/lib/slack/real_time/event_handlers/user_typing.rb +18 -0
- data/lib/slack/real_time/models.rb +7 -0
- data/lib/slack/real_time/models/base.rb +11 -0
- data/lib/slack/real_time/models/bot.rb +8 -0
- data/lib/slack/real_time/models/channel.rb +8 -0
- data/lib/slack/real_time/models/group.rb +8 -0
- data/lib/slack/real_time/models/im.rb +8 -0
- data/lib/slack/real_time/models/team.rb +8 -0
- data/lib/slack/real_time/models/user.rb +8 -0
- data/lib/slack/real_time/store.rb +47 -0
- data/lib/slack/version.rb +1 -1
- data/lib/slack/web/api/endpoints.rb +1 -1
- data/lib/slack/web/api/endpoints/api.rb +1 -1
- data/lib/slack/web/api/endpoints/auth.rb +1 -1
- data/lib/slack/web/api/endpoints/channels.rb +2 -4
- data/lib/slack/web/api/endpoints/chat.rb +1 -1
- data/lib/slack/web/api/endpoints/dnd.rb +1 -1
- data/lib/slack/web/api/endpoints/emoji.rb +1 -1
- data/lib/slack/web/api/endpoints/files.rb +4 -1
- data/lib/slack/web/api/endpoints/groups.rb +1 -1
- data/lib/slack/web/api/endpoints/im.rb +1 -1
- data/lib/slack/web/api/endpoints/mpim.rb +1 -1
- data/lib/slack/web/api/endpoints/oauth.rb +1 -1
- data/lib/slack/web/api/endpoints/pins.rb +1 -1
- data/lib/slack/web/api/endpoints/reactions.rb +1 -1
- data/lib/slack/web/api/endpoints/rtm.rb +1 -1
- data/lib/slack/web/api/endpoints/search.rb +1 -1
- data/lib/slack/web/api/endpoints/stars.rb +1 -1
- data/lib/slack/web/api/endpoints/team.rb +1 -1
- data/lib/slack/web/api/endpoints/usergroups.rb +1 -1
- data/lib/slack/web/api/endpoints/users.rb +1 -1
- data/lib/slack/web/api/mixins.rb +1 -0
- data/lib/slack/web/api/mixins/channels.id.rb +2 -2
- data/lib/slack/web/api/mixins/groups.id.rb +2 -2
- data/lib/slack/web/api/mixins/users.id.rb +2 -2
- data/lib/slack/web/api/mixins/users.search.json +19 -0
- data/lib/slack/web/api/mixins/users.search.rb +43 -0
- data/lib/slack/web/api/templates/command.erb +1 -1
- data/lib/slack/web/api/templates/commands.erb +1 -1
- data/lib/slack/web/api/templates/endpoints.erb +1 -1
- data/lib/slack/web/api/templates/method.erb +1 -1
- data/lib/slack/web/api/templates/method_spec.erb +20 -0
- data/lib/slack/web/faraday/connection.rb +1 -0
- data/lib/tasks/git.rake +7 -0
- data/lib/tasks/real_time.rake +45 -0
- data/lib/tasks/update.rake +9 -0
- data/lib/{slack/web/api/tasks/generate.rake → tasks/web.rake} +6 -6
- data/slack-ruby-client.gemspec +1 -0
- data/spec/fixtures/slack/web/rtm_start.yml +53 -22
- data/spec/integration/integration_spec.rb +5 -5
- data/spec/slack/real_time/client_spec.rb +72 -10
- data/spec/slack/real_time/event_handlers/bot_spec.rb +42 -0
- data/spec/slack/real_time/event_handlers/channel_spec.rb +116 -0
- data/spec/slack/real_time/event_handlers/group_spec.rb +90 -0
- data/spec/slack/real_time/event_handlers/im_spec.rb +47 -0
- data/spec/slack/real_time/event_handlers/team_spec.rb +58 -0
- data/spec/slack/real_time/event_handlers/user_spec.rb +61 -0
- data/spec/slack/real_time/rtm_start_spec.rb +13 -0
- data/spec/slack/real_time/store_spec.rb +11 -0
- data/spec/slack/slack_spec.rb +6 -6
- data/spec/slack/web/api/endpoints/api_spec.rb +7 -0
- data/spec/slack/web/api/endpoints/{auth_spec.rb → custom_specs/auth_spec.rb} +0 -0
- data/spec/slack/web/api/endpoints/{channels_spec.rb → custom_specs/channels_spec.rb} +1 -1
- data/spec/slack/web/api/endpoints/{chat_spec.rb → custom_specs/chat_spec.rb} +0 -0
- data/spec/slack/web/api/endpoints/{groups_spec.rb → custom_specs/groups_spec.rb} +1 -1
- data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +23 -0
- data/spec/slack/web/api/endpoints/dnd_spec.rb +12 -0
- data/spec/slack/web/api/endpoints/emoji_spec.rb +7 -0
- data/spec/slack/web/api/endpoints/files_spec.rb +36 -0
- data/spec/slack/web/api/endpoints/im_spec.rb +30 -0
- data/spec/slack/web/api/endpoints/mpim_spec.rb +30 -0
- data/spec/slack/web/api/endpoints/oauth_spec.rb +18 -0
- data/spec/slack/web/api/endpoints/pins_spec.rb +22 -0
- data/spec/slack/web/api/endpoints/reactions_spec.rb +17 -0
- data/spec/slack/web/api/endpoints/rtm_spec.rb +7 -0
- data/spec/slack/web/api/endpoints/search_spec.rb +22 -0
- data/spec/slack/web/api/endpoints/stars_spec.rb +7 -0
- data/spec/slack/web/api/endpoints/team_spec.rb +7 -0
- data/spec/slack/web/api/endpoints/usergroups_spec.rb +35 -0
- data/spec/slack/web/api/mixins/channels_spec.rb +6 -6
- data/spec/slack/web/api/mixins/groups_spec.rb +6 -6
- data/spec/slack/web/api/mixins/users_spec.rb +12 -6
- data/spec/support/real_time/event.rb +11 -0
- metadata +159 -13
- 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
|
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
|
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
|
81
|
-
expect(data
|
82
|
-
expect(data
|
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
|
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
|
69
|
+
expect(client.self.id).to eq 'U07518DTL'
|
66
70
|
end
|
67
71
|
it 'sets users' do
|
68
|
-
expect(client.users.count).to eq
|
69
|
-
expect(client.users.first['id']).to eq '
|
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
|
73
|
-
expect(client.channels.first['name']).to eq '
|
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
|
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
|
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
|