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.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +1 -0
- data/.rubocop.yml +23 -7
- data/.rubocop_todo.yml +115 -44
- data/.travis.yml +0 -1
- data/CHANGELOG.md +38 -2
- data/CONTRIBUTING.md +24 -6
- data/Dangerfile +2 -1
- data/Gemfile +2 -2
- data/README.md +90 -29
- data/Rakefile +1 -0
- data/UPGRADING.md +6 -0
- data/bin/commands.rb +23 -0
- data/bin/commands/admin_apps.rb +27 -0
- data/bin/commands/admin_apps_approved.rb +17 -0
- data/bin/commands/admin_apps_requests.rb +16 -0
- data/bin/commands/admin_apps_restricted.rb +17 -0
- data/bin/commands/admin_conversations.rb +17 -0
- data/bin/commands/admin_conversations_restrictAccess.rb +37 -0
- data/bin/commands/admin_conversations_whitelist.rb +37 -0
- data/bin/commands/admin_emoji.rb +54 -0
- data/bin/commands/admin_inviteRequests.rb +36 -0
- data/bin/commands/admin_inviteRequests_approved.rb +16 -0
- data/bin/commands/admin_inviteRequests_denied.rb +16 -0
- data/bin/commands/admin_teams.rb +27 -0
- data/bin/commands/admin_teams_admins.rb +16 -0
- data/bin/commands/admin_teams_owners.rb +16 -0
- data/bin/commands/admin_teams_settings.rb +64 -0
- data/bin/commands/admin_usergroups.rb +48 -0
- data/bin/commands/admin_users.rb +97 -0
- data/bin/commands/admin_users_session.rb +3 -2
- data/bin/commands/api.rb +3 -2
- data/bin/commands/apps.rb +3 -2
- data/bin/commands/apps_permissions.rb +5 -4
- data/bin/commands/apps_permissions_resources.rb +3 -2
- data/bin/commands/apps_permissions_scopes.rb +3 -2
- data/bin/commands/apps_permissions_users.rb +5 -4
- data/bin/commands/auth.rb +5 -4
- data/bin/commands/bots.rb +3 -2
- data/bin/commands/calls.rb +52 -0
- data/bin/commands/calls_participants.rb +25 -0
- data/bin/commands/channels.rb +31 -30
- data/bin/commands/chat.rb +32 -31
- data/bin/commands/chat_scheduledMessages.rb +3 -2
- data/bin/commands/conversations.rb +36 -36
- data/bin/commands/dialog.rb +3 -2
- data/bin/commands/dnd.rb +9 -8
- data/bin/commands/emoji.rb +3 -2
- data/bin/commands/files.rb +14 -12
- data/bin/commands/files_comments.rb +3 -2
- data/bin/commands/files_remote.rb +78 -0
- data/bin/commands/groups.rb +33 -32
- data/bin/commands/im.rb +13 -12
- data/bin/commands/migration.rb +3 -2
- data/bin/commands/mpim.rb +11 -10
- data/bin/commands/oauth.rb +6 -5
- data/bin/commands/oauth_v2.rb +17 -0
- data/bin/commands/pins.rb +7 -8
- data/bin/commands/reactions.rb +10 -11
- data/bin/commands/reminders.rb +11 -10
- data/bin/commands/rtm.rb +5 -4
- data/bin/commands/search.rb +7 -6
- data/bin/commands/stars.rb +7 -6
- data/bin/commands/team.rb +9 -8
- data/bin/commands/team_profile.rb +3 -2
- data/bin/commands/usergroups.rb +11 -10
- data/bin/commands/usergroups_users.rb +5 -4
- data/bin/commands/users.rb +21 -20
- data/bin/commands/users_admin.rb +1 -0
- data/bin/commands/users_prefs.rb +1 -0
- data/bin/commands/users_profile.rb +5 -4
- data/bin/commands/views.rb +48 -0
- data/bin/slack +1 -2
- data/examples/hi_real_time/Gemfile +1 -0
- data/examples/hi_real_time/hi.rb +7 -3
- data/examples/hi_real_time_and_web/Gemfile +1 -0
- data/examples/hi_real_time_and_web/hi.rb +7 -3
- data/examples/hi_real_time_async_async/Gemfile +1 -0
- data/examples/hi_real_time_async_async/hi.rb +6 -2
- data/examples/hi_real_time_async_celluloid/Gemfile +1 -0
- data/examples/hi_real_time_async_celluloid/hi.rb +7 -3
- data/examples/hi_real_time_async_eventmachine/Gemfile +1 -0
- data/examples/hi_real_time_async_eventmachine/hi.rb +7 -3
- data/examples/hi_web/Gemfile +1 -0
- data/examples/hi_web/hi.rb +1 -0
- data/examples/new_ticket/Gemfile +1 -0
- data/examples/new_ticket/new_ticket.rb +1 -0
- data/lib/slack-ruby-client.rb +4 -4
- data/lib/slack.rb +1 -0
- data/lib/slack/config.rb +1 -0
- data/lib/slack/events/config.rb +1 -0
- data/lib/slack/events/request.rb +3 -1
- data/lib/slack/logger.rb +6 -5
- data/lib/slack/messages/formatting.rb +1 -0
- data/lib/slack/messages/message.rb +1 -4
- data/lib/slack/real_time/api/message.rb +3 -1
- data/lib/slack/real_time/api/message_id.rb +1 -0
- data/lib/slack/real_time/api/ping.rb +5 -2
- data/lib/slack/real_time/api/typing.rb +3 -1
- data/lib/slack/real_time/client.rb +26 -13
- data/lib/slack/real_time/concurrency.rb +1 -0
- data/lib/slack/real_time/concurrency/async.rb +13 -7
- data/lib/slack/real_time/concurrency/celluloid.rb +10 -4
- data/lib/slack/real_time/concurrency/eventmachine.rb +9 -6
- data/lib/slack/real_time/config.rb +6 -1
- data/lib/slack/real_time/models.rb +1 -0
- data/lib/slack/real_time/models/base.rb +1 -4
- data/lib/slack/real_time/models/bot.rb +1 -0
- data/lib/slack/real_time/models/channel.rb +1 -0
- data/lib/slack/real_time/models/group.rb +1 -0
- data/lib/slack/real_time/models/im.rb +1 -0
- data/lib/slack/real_time/models/team.rb +1 -0
- data/lib/slack/real_time/models/user.rb +1 -0
- data/lib/slack/real_time/socket.rb +16 -13
- data/lib/slack/real_time/stores.rb +1 -0
- data/lib/slack/real_time/stores/base.rb +4 -1
- data/lib/slack/real_time/stores/starter.rb +1 -0
- data/lib/slack/real_time/stores/store.rb +16 -25
- data/lib/slack/version.rb +2 -1
- data/lib/slack/web/api/endpoints.rb +46 -0
- data/lib/slack/web/api/endpoints/admin_apps.rb +42 -0
- data/lib/slack/web/api/endpoints/admin_apps_approved.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_apps_requests.rb +33 -0
- data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_conversations.rb +30 -0
- data/lib/slack/web/api/endpoints/admin_conversations_restrictAccess.rb +61 -0
- data/lib/slack/web/api/endpoints/admin_conversations_whitelist.rb +64 -0
- data/lib/slack/web/api/endpoints/admin_emoji.rb +88 -0
- data/lib/slack/web/api/endpoints/admin_inviteRequests.rb +61 -0
- data/lib/slack/web/api/endpoints/admin_inviteRequests_approved.rb +33 -0
- data/lib/slack/web/api/endpoints/admin_inviteRequests_denied.rb +33 -0
- data/lib/slack/web/api/endpoints/admin_teams.rb +50 -0
- data/lib/slack/web/api/endpoints/admin_teams_admins.rb +34 -0
- data/lib/slack/web/api/endpoints/admin_teams_owners.rb +34 -0
- data/lib/slack/web/api/endpoints/admin_teams_settings.rb +99 -0
- data/lib/slack/web/api/endpoints/admin_usergroups.rb +77 -0
- data/lib/slack/web/api/endpoints/admin_users.rb +163 -0
- data/lib/slack/web/api/endpoints/admin_users_session.rb +2 -1
- data/lib/slack/web/api/endpoints/api.rb +2 -1
- data/lib/slack/web/api/endpoints/apps.rb +2 -1
- data/lib/slack/web/api/endpoints/apps_permissions.rb +3 -2
- data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +2 -1
- data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +2 -1
- data/lib/slack/web/api/endpoints/apps_permissions_users.rb +3 -2
- data/lib/slack/web/api/endpoints/auth.rb +3 -2
- data/lib/slack/web/api/endpoints/bots.rb +2 -1
- data/lib/slack/web/api/endpoints/calls.rb +83 -0
- data/lib/slack/web/api/endpoints/calls_participants.rb +42 -0
- data/lib/slack/web/api/endpoints/channels.rb +44 -29
- data/lib/slack/web/api/endpoints/chat.rb +30 -29
- data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +3 -2
- data/lib/slack/web/api/endpoints/conversations.rb +34 -35
- data/lib/slack/web/api/endpoints/dialog.rb +2 -1
- data/lib/slack/web/api/endpoints/dnd.rb +5 -4
- data/lib/slack/web/api/endpoints/emoji.rb +2 -1
- data/lib/slack/web/api/endpoints/files.rb +11 -8
- data/lib/slack/web/api/endpoints/files_comments.rb +2 -1
- data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
- data/lib/slack/web/api/endpoints/groups.rb +33 -22
- data/lib/slack/web/api/endpoints/im.rb +17 -12
- data/lib/slack/web/api/endpoints/migration.rb +2 -1
- data/lib/slack/web/api/endpoints/mpim.rb +16 -11
- data/lib/slack/web/api/endpoints/oauth.rb +4 -6
- data/lib/slack/web/api/endpoints/oauth_v2.rb +30 -0
- data/lib/slack/web/api/endpoints/pins.rb +8 -12
- data/lib/slack/web/api/endpoints/reactions.rb +12 -15
- data/lib/slack/web/api/endpoints/reminders.rb +6 -5
- data/lib/slack/web/api/endpoints/rtm.rb +3 -2
- data/lib/slack/web/api/endpoints/search.rb +4 -3
- data/lib/slack/web/api/endpoints/stars.rb +6 -7
- data/lib/slack/web/api/endpoints/team.rb +5 -5
- data/lib/slack/web/api/endpoints/team_profile.rb +2 -1
- data/lib/slack/web/api/endpoints/usergroups.rb +6 -5
- data/lib/slack/web/api/endpoints/usergroups_users.rb +3 -2
- data/lib/slack/web/api/endpoints/users.rb +11 -16
- data/lib/slack/web/api/endpoints/users_admin.rb +1 -0
- data/lib/slack/web/api/endpoints/users_prefs.rb +1 -0
- data/lib/slack/web/api/endpoints/users_profile.rb +3 -2
- data/lib/slack/web/api/endpoints/views.rb +97 -0
- data/lib/slack/web/api/error.rb +1 -0
- data/lib/slack/web/api/errors.rb +656 -0
- data/lib/slack/web/api/errors/slack_error.rb +14 -1
- data/lib/slack/web/api/errors/too_many_requests_error.rb +1 -0
- data/lib/slack/web/api/mixins.rb +2 -0
- data/lib/slack/web/api/mixins/channels.id.rb +2 -3
- data/lib/slack/web/api/mixins/conversations.id.rb +25 -0
- data/lib/slack/web/api/mixins/groups.id.rb +2 -3
- data/lib/slack/web/api/mixins/ids.id.rb +3 -2
- data/lib/slack/web/api/mixins/users.id.rb +2 -3
- data/lib/slack/web/api/mixins/users.search.rb +1 -0
- data/lib/slack/web/api/patches/{chat.6.block-kit-support.patch → chat.1.patch} +29 -26
- data/lib/slack/web/api/patches/views.1.view-json.patch +40 -0
- data/lib/slack/web/api/patches/views.1.views-published.patch +16 -0
- data/lib/slack/web/api/templates/command.erb +1 -0
- data/lib/slack/web/api/templates/commands.erb +1 -0
- data/lib/slack/web/api/templates/endpoints.erb +1 -0
- data/lib/slack/web/api/templates/errors.erb +20 -0
- data/lib/slack/web/api/templates/method.erb +5 -1
- data/lib/slack/web/api/templates/method_spec.erb +1 -0
- data/lib/slack/web/client.rb +2 -1
- data/lib/slack/web/config.rb +3 -0
- data/lib/slack/web/faraday/connection.rb +24 -20
- data/lib/slack/web/faraday/request.rb +1 -0
- data/lib/slack/web/faraday/response/raise_error.rb +10 -6
- data/lib/slack/web/pagination/cursor.rb +3 -2
- data/lib/slack_ruby_client.rb +1 -0
- data/lib/tasks/git.rake +1 -0
- data/lib/tasks/real_time.rake +13 -5
- data/lib/tasks/update.rake +1 -0
- data/lib/tasks/web.rake +27 -7
- data/screenshots/create-app.png +0 -0
- data/slack-ruby-client.gemspec +6 -3
- data/spec/fixtures/slack/web/channels_info.yml +108 -15
- data/spec/fixtures/slack/web/conversations_setTopic.yml +69 -0
- data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +142 -0
- data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +208 -0
- data/spec/fixtures/slack/web/views_open_error.yml +76 -0
- data/spec/integration/integration_spec.rb +26 -23
- data/spec/slack/config_spec.rb +2 -0
- data/spec/slack/events/config_spec.rb +8 -4
- data/spec/slack/events/request_spec.rb +67 -37
- data/spec/slack/messages/formatting_spec.rb +25 -13
- data/spec/slack/real_time/api/message_spec.rb +6 -1
- data/spec/slack/real_time/api/ping_spec.rb +2 -0
- data/spec/slack/real_time/api/typing_spec.rb +5 -1
- data/spec/slack/real_time/client_spec.rb +174 -36
- data/spec/slack/real_time/concurrency/celluloid_spec.rb +11 -6
- data/spec/slack/real_time/concurrency/eventmachine_spec.rb +9 -1
- data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +2 -0
- data/spec/slack/real_time/event_handlers/bot_spec.rb +2 -1
- data/spec/slack/real_time/event_handlers/channel_spec.rb +9 -6
- data/spec/slack/real_time/event_handlers/event_handlers_spec.rb +2 -1
- data/spec/slack/real_time/event_handlers/group_spec.rb +5 -4
- data/spec/slack/real_time/event_handlers/im_spec.rb +4 -3
- data/spec/slack/real_time/event_handlers/team_spec.rb +3 -1
- data/spec/slack/real_time/event_handlers/user_spec.rb +1 -0
- data/spec/slack/real_time/rtm_connect_spec.rb +1 -0
- data/spec/slack/real_time/rtm_start_spec.rb +1 -0
- data/spec/slack/real_time/store_spec.rb +2 -1
- data/spec/slack/slack_spec.rb +37 -5
- data/spec/slack/version_spec.rb +2 -1
- data/spec/slack/web/api/endpoints/admin_apps_approved_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_apps_requests_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_apps_restricted_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_apps_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_conversations_restrictAccess_spec.rb +32 -0
- data/spec/slack/web/api/endpoints/admin_conversations_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_conversations_whitelist_spec.rb +32 -0
- data/spec/slack/web/api/endpoints/admin_emoji_spec.rb +37 -0
- data/spec/slack/web/api/endpoints/admin_inviteRequests_approved_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_inviteRequests_denied_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/admin_inviteRequests_spec.rb +18 -0
- data/spec/slack/web/api/endpoints/admin_teams_admins_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_teams_owners_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/admin_teams_settings_spec.rb +53 -0
- data/spec/slack/web/api/endpoints/admin_teams_spec.rb +16 -0
- data/spec/slack/web/api/endpoints/admin_usergroups_spec.rb +37 -0
- data/spec/slack/web/api/endpoints/admin_users_session_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/admin_users_spec.rb +75 -0
- data/spec/slack/web/api/endpoints/api_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/apps_permissions_resources_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/apps_permissions_scopes_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/apps_permissions_spec.rb +3 -2
- data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +4 -3
- data/spec/slack/web/api/endpoints/apps_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/bots_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/calls_participants_spec.rb +24 -0
- data/spec/slack/web/api/endpoints/calls_spec.rb +31 -0
- data/spec/slack/web/api/endpoints/chat_scheduledMessages_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/conversations_spec.rb +2 -1
- data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +5 -1
- data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +5 -3
- data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +80 -25
- data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +12 -4
- data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +2 -0
- data/spec/slack/web/api/endpoints/custom_specs/users_spec.rb +6 -1
- data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +95 -0
- data/spec/slack/web/api/endpoints/dnd_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/emoji_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/files_comments_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/files_remote_spec.rb +24 -0
- data/spec/slack/web/api/endpoints/files_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/im_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/migration_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/mpim_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/oauth_spec.rb +1 -11
- data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/pins_spec.rb +5 -1
- data/spec/slack/web/api/endpoints/reactions_spec.rb +8 -1
- data/spec/slack/web/api/endpoints/reminders_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/rtm_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/search_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/stars_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/team_profile_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/team_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/usergroups_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/usergroups_users_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/users_admin_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/users_prefs_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/users_profile_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/views_spec.rb +29 -0
- data/spec/slack/web/api/error_spec.rb +4 -2
- data/spec/slack/web/api/errors/service_unavailable_spec.rb +8 -5
- data/spec/slack/web/api/errors/slack_error_spec.rb +26 -2
- data/spec/slack/web/api/mixins/channels_spec.rb +17 -7
- data/spec/slack/web/api/mixins/conversations_list_spec.rb +21 -0
- data/spec/slack/web/api/mixins/conversations_spec.rb +43 -0
- data/spec/slack/web/api/mixins/groups_spec.rb +17 -7
- data/spec/slack/web/api/mixins/users_spec.rb +17 -8
- data/spec/slack/web/api/pagination/cursor_spec.rb +40 -10
- data/spec/slack/web/client_spec.rb +115 -18
- data/spec/slack/web/faraday/response/raise_error_spec.rb +41 -7
- data/spec/spec_helper.rb +2 -1
- data/spec/support/queue_with_timeout.rb +1 -0
- data/spec/support/real_time/concurrency/mock.rb +1 -0
- data/spec/support/real_time/connected_client.rb +9 -3
- data/spec/support/real_time/event.rb +1 -0
- data/spec/support/token.rb +1 -0
- data/spec/support/vcr.rb +5 -0
- metadata +160 -29
- data/lib/slack/web/api/patches/chat.1.text-attachments-required.patch +0 -13
- data/lib/slack/web/api/patches/chat.2.attachments-json.patch +0 -17
- data/lib/slack/web/api/patches/chat.3.update-attachments-support.patch +0 -21
- data/lib/slack/web/api/patches/chat.4.postEphemeral-attachments-support.patch +0 -17
- data/lib/slack/web/api/patches/chat.5.postEphemeral-text-or-attachments.patch +0 -15
- 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
|
-
|
|
5
|
+
subject(:formatting) do
|
|
6
|
+
described_class
|
|
6
7
|
end
|
|
8
|
+
|
|
7
9
|
context '#unescape' do
|
|
8
10
|
it 'plain text' do
|
|
9
|
-
expect(
|
|
11
|
+
expect(formatting.unescape('plain text')).to eq 'plain text'
|
|
10
12
|
end
|
|
11
13
|
it 'decodes an HTML-encoded message' do
|
|
12
|
-
expect(
|
|
14
|
+
expect(formatting.unescape('Hello & <world>')).to eq 'Hello & <world>'
|
|
13
15
|
end
|
|
14
16
|
it 'unescapes a user reference' do
|
|
15
|
-
expect(
|
|
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(
|
|
22
|
+
expect(formatting.unescape('<@U02BEFY4U> ^^^')).to eq '@U02BEFY4U ^^^'
|
|
19
23
|
end
|
|
20
24
|
it 'unescapes a URL without text' do
|
|
21
|
-
expect(
|
|
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(
|
|
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(
|
|
35
|
+
expect(formatting.unescape('<mailto:bob@example.com|Bob>')).to eq 'Bob'
|
|
28
36
|
end
|
|
29
37
|
it 'unlinkifies references' do
|
|
30
|
-
expect(
|
|
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 >' do
|
|
33
|
-
expect(
|
|
45
|
+
expect(formatting.unescape('Hello <@U123|bob> > file.txt')).to eq 'Hello @bob > file.txt'
|
|
34
46
|
end
|
|
35
47
|
it 'unescapes a double smart quote' do
|
|
36
|
-
expect(
|
|
48
|
+
expect(formatting.unescape('“hello”')).to eq '"hello"'
|
|
37
49
|
end
|
|
38
50
|
it 'unescapes a single smart quote' do
|
|
39
|
-
expect(
|
|
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
|
|
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
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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 =
|
|
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
|
-
|
|
46
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
[
|
|
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).
|
|
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) {
|
|
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
|
|
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
|
|
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
|
-
|
|
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) {
|
|
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).
|
|
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) {
|
|
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) {
|
|
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)).
|
|
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
|
-
|
|
431
|
+
described_class.config.reset
|
|
321
432
|
end
|
|
433
|
+
|
|
322
434
|
let(:url) { 'wss://ms173.slack-msgs.com/websocket/lqcUiAvrKTP-uuid=' }
|
|
323
|
-
let(:client) {
|
|
435
|
+
let(:client) { described_class.new }
|
|
436
|
+
|
|
324
437
|
context 'ping' do
|
|
325
438
|
before do
|
|
326
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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 =
|
|
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
|
-
|
|
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
|
-
|
|
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
|