slack-ruby-client 0.13.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/FUNDING.yml +1 -0
- data/.gitignore +1 -0
- data/.rubocop.yml +24 -5
- data/.rubocop_todo.yml +100 -54
- data/.travis.yml +4 -8
- data/CHANGELOG.md +118 -35
- data/CONTRIBUTING.md +17 -6
- data/Dangerfile +2 -0
- data/Gemfile +10 -5
- data/LICENSE.md +1 -1
- data/README.md +185 -48
- data/Rakefile +2 -1
- data/UPGRADING.md +30 -2
- data/bin/commands.rb +32 -0
- data/bin/commands/admin_analytics.rb +16 -0
- data/bin/commands/admin_apps.rb +40 -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_barriers.rb +47 -0
- data/bin/commands/admin_conversations.rb +159 -0
- data/bin/commands/admin_conversations_ekm.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 +38 -0
- data/bin/commands/api.rb +1 -1
- data/bin/commands/apps.rb +15 -0
- data/bin/commands/apps_connections.rb +13 -0
- data/bin/commands/apps_event_authorizations.rb +16 -0
- data/bin/commands/apps_permissions.rb +1 -0
- data/bin/commands/apps_permissions_resources.rb +1 -0
- data/bin/commands/apps_permissions_scopes.rb +1 -0
- data/bin/commands/apps_permissions_users.rb +1 -0
- data/bin/commands/auth.rb +1 -0
- data/bin/commands/auth_teams.rb +16 -0
- data/bin/commands/bots.rb +2 -0
- data/bin/commands/calls.rb +52 -0
- data/bin/commands/calls_participants.rb +25 -0
- data/bin/commands/channels.rb +1 -153
- data/bin/commands/chat.rb +51 -10
- data/bin/commands/chat_scheduledMessages.rb +19 -0
- data/bin/commands/conversations.rb +16 -3
- data/bin/commands/dialog.rb +1 -0
- data/bin/commands/dnd.rb +5 -2
- data/bin/commands/emoji.rb +1 -0
- data/bin/commands/files.rb +8 -17
- data/bin/commands/files_comments.rb +1 -21
- data/bin/commands/files_remote.rb +78 -0
- data/bin/commands/groups.rb +1 -161
- data/bin/commands/im.rb +1 -62
- data/bin/commands/migration.rb +2 -0
- data/bin/commands/mpim.rb +1 -60
- data/bin/commands/oauth.rb +2 -1
- data/bin/commands/oauth_v2.rb +17 -0
- data/bin/commands/pins.rb +1 -4
- data/bin/commands/reactions.rb +3 -3
- data/bin/commands/reminders.rb +1 -0
- data/bin/commands/rtm.rb +1 -0
- data/bin/commands/search.rb +4 -0
- data/bin/commands/stars.rb +1 -0
- data/bin/commands/team.rb +5 -0
- data/bin/commands/team_profile.rb +1 -0
- data/bin/commands/usergroups.rb +6 -0
- data/bin/commands/usergroups_users.rb +3 -0
- data/bin/commands/users.rb +5 -3
- data/bin/commands/users_admin.rb +1 -0
- data/bin/commands/users_prefs.rb +1 -0
- data/bin/commands/users_profile.rb +6 -5
- data/bin/commands/views.rb +48 -0
- data/bin/commands/workflows.rb +38 -0
- data/bin/slack +2 -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_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 +10 -4
- data/lib/slack.rb +1 -0
- data/lib/slack/config.rb +1 -0
- data/lib/slack/events/config.rb +32 -0
- data/lib/slack/events/request.rb +70 -0
- 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 +98 -28
- data/lib/slack/real_time/concurrency.rb +1 -2
- data/lib/slack/real_time/concurrency/async.rb +79 -6
- data/lib/slack/real_time/config.rb +6 -10
- 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 +44 -15
- 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 +11 -0
- data/lib/slack/real_time/stores/store.rb +28 -25
- data/lib/slack/version.rb +2 -1
- data/lib/slack/web/api/endpoints.rb +64 -0
- data/lib/slack/web/api/endpoints/admin_analytics.rb +28 -0
- data/lib/slack/web/api/endpoints/admin_apps.rb +62 -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_barriers.rb +82 -0
- data/lib/slack/web/api/endpoints/admin_conversations.rb +246 -0
- data/lib/slack/web/api/endpoints/admin_conversations_ekm.rb +35 -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 +161 -0
- data/lib/slack/web/api/endpoints/admin_users_session.rb +66 -0
- data/lib/slack/web/api/endpoints/api.rb +1 -2
- data/lib/slack/web/api/endpoints/apps.rb +27 -0
- data/lib/slack/web/api/endpoints/apps_connections.rb +21 -0
- data/lib/slack/web/api/endpoints/apps_event_authorizations.rb +34 -0
- data/lib/slack/web/api/endpoints/apps_permissions.rb +1 -0
- data/lib/slack/web/api/endpoints/apps_permissions_resources.rb +1 -0
- data/lib/slack/web/api/endpoints/apps_permissions_scopes.rb +1 -0
- data/lib/slack/web/api/endpoints/apps_permissions_users.rb +1 -0
- data/lib/slack/web/api/endpoints/auth.rb +1 -0
- data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
- data/lib/slack/web/api/endpoints/bots.rb +3 -0
- 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 +2 -243
- data/lib/slack/web/api/endpoints/chat.rb +112 -21
- data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +40 -0
- data/lib/slack/web/api/endpoints/conversations.rb +40 -19
- data/lib/slack/web/api/endpoints/dialog.rb +1 -0
- data/lib/slack/web/api/endpoints/dnd.rb +7 -1
- data/lib/slack/web/api/endpoints/emoji.rb +1 -0
- data/lib/slack/web/api/endpoints/files.rb +10 -17
- data/lib/slack/web/api/endpoints/files_comments.rb +1 -33
- data/lib/slack/web/api/endpoints/files_remote.rb +127 -0
- data/lib/slack/web/api/endpoints/groups.rb +1 -253
- data/lib/slack/web/api/endpoints/im.rb +1 -101
- data/lib/slack/web/api/endpoints/migration.rb +3 -0
- data/lib/slack/web/api/endpoints/mpim.rb +1 -96
- data/lib/slack/web/api/endpoints/oauth.rb +2 -4
- data/lib/slack/web/api/endpoints/oauth_v2.rb +30 -0
- data/lib/slack/web/api/endpoints/pins.rb +4 -11
- data/lib/slack/web/api/endpoints/reactions.rb +10 -9
- data/lib/slack/web/api/endpoints/reminders.rb +1 -0
- data/lib/slack/web/api/endpoints/rtm.rb +1 -0
- data/lib/slack/web/api/endpoints/search.rb +7 -0
- data/lib/slack/web/api/endpoints/stars.rb +3 -2
- data/lib/slack/web/api/endpoints/team.rb +9 -0
- data/lib/slack/web/api/endpoints/team_profile.rb +1 -0
- data/lib/slack/web/api/endpoints/usergroups.rb +11 -0
- data/lib/slack/web/api/endpoints/usergroups_users.rb +5 -0
- data/lib/slack/web/api/endpoints/users.rb +8 -7
- 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 +4 -3
- data/lib/slack/web/api/endpoints/views.rb +97 -0
- data/lib/slack/web/api/endpoints/workflows.rb +61 -0
- data/lib/slack/web/api/error.rb +1 -0
- data/lib/slack/web/api/errors.rb +848 -0
- data/lib/slack/web/api/errors/internal_error.rb +14 -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.1.patch +71 -0
- 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 +2 -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 +2 -1
- 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 +21 -6
- data/lib/slack/web/faraday/response/wrap_error.rb +24 -0
- data/lib/slack/web/pagination/cursor.rb +6 -2
- data/lib/slack_ruby_client.rb +1 -0
- data/lib/tasks/git.rake +1 -0
- data/lib/tasks/real_time.rake +15 -5
- data/lib/tasks/update.rake +1 -0
- data/lib/tasks/web.rake +39 -10
- data/screenshots/create-app.png +0 -0
- data/slack-ruby-client.gemspec +8 -4
- data/spec/fixtures/slack/web/channels_info.yml +108 -15
- data/spec/fixtures/slack/web/{groups_info.yml → conversations_info.yml} +4 -4
- 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 +116 -49
- data/spec/slack/config_spec.rb +2 -0
- data/spec/slack/events/config_spec.rb +33 -0
- data/spec/slack/events/request_spec.rb +184 -0
- 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 +228 -30
- data/spec/slack/real_time/concurrency/it_behaves_like_a_realtime_socket.rb +2 -0
- data/spec/slack/real_time/concurrency/with_concurrency_spec.rb +10 -0
- data/spec/slack/real_time/concurrency/without_concurrency_spec.rb +10 -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 +2 -1
- data/spec/slack/real_time/rtm_start_spec.rb +2 -1
- 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_analytics_spec.rb +13 -0
- 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 +13 -0
- data/spec/slack/web/api/endpoints/admin_barriers_spec.rb +38 -0
- data/spec/slack/web/api/endpoints/admin_conversations_ekm_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 +93 -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 +21 -0
- data/spec/slack/web/api/endpoints/admin_users_spec.rb +67 -0
- data/spec/slack/web/api/endpoints/api_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/apps_connections_spec.rb +8 -0
- data/spec/slack/web/api/endpoints/apps_event_authorizations_spec.rb +13 -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 +16 -0
- data/spec/slack/web/api/endpoints/auth_teams_spec.rb +8 -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 +8 -0
- data/spec/slack/web/api/endpoints/conversations_spec.rb +21 -12
- data/spec/slack/web/api/endpoints/custom_specs/auth_spec.rb +5 -1
- data/spec/slack/web/api/endpoints/custom_specs/chat_spec.rb +112 -36
- data/spec/slack/web/api/endpoints/custom_specs/conversations_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/custom_specs/dialog_spec.rb +12 -4
- 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 +6 -0
- data/spec/slack/web/api/endpoints/emoji_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/files_comments_spec.rb +3 -21
- data/spec/slack/web/api/endpoints/files_remote_spec.rb +24 -0
- data/spec/slack/web/api/endpoints/files_spec.rb +5 -4
- data/spec/slack/web/api/endpoints/im_spec.rb +1 -31
- data/spec/slack/web/api/endpoints/migration_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/mpim_spec.rb +1 -31
- data/spec/slack/web/api/endpoints/oauth_spec.rb +4 -14
- data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +13 -0
- data/spec/slack/web/api/endpoints/pins_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/reactions_spec.rb +8 -1
- data/spec/slack/web/api/endpoints/reminders_spec.rb +3 -2
- 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 +3 -2
- 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/workflows_spec.rb +26 -0
- data/spec/slack/web/api/error_spec.rb +4 -2
- 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 +166 -18
- data/spec/slack/web/faraday/response/raise_error_spec.rb +47 -12
- data/spec/spec_helper.rb +8 -1
- data/spec/support/queue_with_timeout.rb +5 -4
- 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 +226 -52
- data/examples/hi_real_time/Gemfile +0 -5
- data/examples/hi_real_time/hi.gif +0 -0
- data/examples/hi_real_time/hi.rb +0 -37
- data/examples/hi_real_time_async_celluloid/Gemfile +0 -6
- data/examples/hi_real_time_async_celluloid/Procfile +0 -2
- data/examples/hi_real_time_async_celluloid/hi.rb +0 -35
- data/examples/hi_real_time_async_eventmachine/Gemfile +0 -6
- data/examples/hi_real_time_async_eventmachine/Procfile +0 -2
- data/examples/hi_real_time_async_eventmachine/hi.rb +0 -35
- data/lib/slack/real_time/concurrency/celluloid.rb +0 -103
- data/lib/slack/real_time/concurrency/eventmachine.rb +0 -66
- 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 -13
- data/screenshots/register-bot.png +0 -0
- data/spec/slack/real_time/concurrency/celluloid_spec.rb +0 -106
- data/spec/slack/real_time/concurrency/eventmachine_spec.rb +0 -47
- data/spec/slack/web/api/endpoints/custom_specs/channels_spec.rb +0 -11
- data/spec/slack/web/api/endpoints/custom_specs/groups_spec.rb +0 -11
- data/spec/slack/web/api/errors/service_unavailable_spec.rb +0 -14
|
@@ -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
4
|
RSpec.describe Slack::RealTime::Client do
|
|
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
|
|
@@ -86,7 +117,13 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
86
117
|
it 'sets groups' do
|
|
87
118
|
expect(client.groups.count).to eq 1
|
|
88
119
|
end
|
|
120
|
+
it 'includes team name in to_s' do
|
|
121
|
+
expect(client.to_s).to eq(
|
|
122
|
+
"id=#{client.team.id}, name=#{client.team.name}, domain=#{client.team.domain}"
|
|
123
|
+
)
|
|
124
|
+
end
|
|
89
125
|
end
|
|
126
|
+
|
|
90
127
|
it 'uses web client to fetch url' do
|
|
91
128
|
expect(client.web_client).to be_a Slack::Web::Client
|
|
92
129
|
end
|
|
@@ -100,9 +137,10 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
100
137
|
end
|
|
101
138
|
describe '#stop!' do
|
|
102
139
|
before do
|
|
103
|
-
|
|
140
|
+
allow(socket).to receive(:disconnect!)
|
|
104
141
|
client.stop!
|
|
105
142
|
end
|
|
143
|
+
|
|
106
144
|
it 'cannot be invoked twice' do
|
|
107
145
|
client.instance_variable_set('@socket', nil) # caused by a :close callback
|
|
108
146
|
expect do
|
|
@@ -110,12 +148,14 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
110
148
|
end.to raise_error Slack::RealTime::Client::ClientNotStartedError
|
|
111
149
|
end
|
|
112
150
|
end
|
|
151
|
+
|
|
113
152
|
describe '#next_id' do
|
|
114
153
|
it 'increments' do
|
|
115
154
|
previous_id = client.send(:next_id)
|
|
116
155
|
expect(client.send(:next_id)).to eq previous_id + 1
|
|
117
156
|
end
|
|
118
157
|
end
|
|
158
|
+
|
|
119
159
|
context 'subclassed' do
|
|
120
160
|
it 'runs event handlers' do
|
|
121
161
|
event = Slack::RealTime::Event.new(
|
|
@@ -126,19 +166,106 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
126
166
|
expect(client.store.team.name).to eq 'New Team Name Inc.'
|
|
127
167
|
end
|
|
128
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
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
describe '#start_async' do
|
|
189
|
+
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
190
|
+
|
|
191
|
+
before do
|
|
192
|
+
allow(Slack::RealTime::Socket).to(
|
|
193
|
+
receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
|
|
194
|
+
)
|
|
195
|
+
allow(socket).to receive(:connect!)
|
|
196
|
+
allow(socket).to receive(:start_async)
|
|
197
|
+
client.start_async
|
|
198
|
+
end
|
|
199
|
+
|
|
200
|
+
describe '#run_ping!' do
|
|
201
|
+
it 'sends ping messages when the websocket connection is idle' do
|
|
202
|
+
allow(socket).to receive(:time_since_last_message).and_return(30)
|
|
203
|
+
expect(socket).to receive(:send_data).with('{"type":"ping","id":1}')
|
|
204
|
+
client.run_ping!
|
|
205
|
+
end
|
|
206
|
+
it 'reconnects the websocket if it has been idle for too long' do
|
|
207
|
+
allow(socket).to receive(:time_since_last_message).and_return(75)
|
|
208
|
+
allow(socket).to receive(:connected?).and_return(true)
|
|
209
|
+
expect(socket).to receive(:close)
|
|
210
|
+
expect(socket).to receive(:restart_async)
|
|
211
|
+
client.run_ping!
|
|
212
|
+
end
|
|
213
|
+
[
|
|
214
|
+
EOFError,
|
|
215
|
+
Errno::ECONNRESET,
|
|
216
|
+
Errno::EPIPE,
|
|
217
|
+
Faraday::ClientError,
|
|
218
|
+
Slack::Web::Api::Errors::SlackError
|
|
219
|
+
].each do |err|
|
|
220
|
+
context "raising #{err}" do
|
|
221
|
+
it 'does not terminate the ping worker' do
|
|
222
|
+
allow(socket).to receive(:time_since_last_message) { raise err }
|
|
223
|
+
expect(socket).not_to receive(:send_data)
|
|
224
|
+
client.run_ping!
|
|
225
|
+
end
|
|
226
|
+
end
|
|
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
|
|
243
|
+
end
|
|
244
|
+
end
|
|
245
|
+
|
|
246
|
+
describe 'to_s' do
|
|
247
|
+
it 'defaults to class instance' do
|
|
248
|
+
expect(client.to_s).to match(/^#<Slack::RealTime::Client:0x\h+>$/)
|
|
249
|
+
end
|
|
129
250
|
end
|
|
130
251
|
end
|
|
252
|
+
|
|
131
253
|
context 'client with starter store', vcr: { cassette_name: 'web/rtm_connect' } do
|
|
132
|
-
let(:client) {
|
|
254
|
+
let(:client) { described_class.new(store_class: Slack::RealTime::Stores::Starter) }
|
|
133
255
|
let(:url) { 'wss://mpmulti-w5tz.slack-msgs.com/websocket/uid' }
|
|
256
|
+
|
|
134
257
|
describe '#start!' do
|
|
135
258
|
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
259
|
+
|
|
136
260
|
before do
|
|
137
|
-
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
|
+
)
|
|
138
264
|
allow(socket).to receive(:connect!)
|
|
139
265
|
allow(socket).to receive(:start_sync)
|
|
140
266
|
client.start!
|
|
141
267
|
end
|
|
268
|
+
|
|
142
269
|
describe 'properties provided upon connection' do
|
|
143
270
|
it 'sets url' do
|
|
144
271
|
expect(client.url).to eq url
|
|
@@ -167,7 +294,13 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
167
294
|
it 'no groups' do
|
|
168
295
|
expect(client.groups).to be_nil
|
|
169
296
|
end
|
|
297
|
+
it 'includes team name in to_s' do
|
|
298
|
+
expect(client.to_s).to eq(
|
|
299
|
+
"id=#{client.team.id}, name=#{client.team.name}, domain=#{client.team.domain}"
|
|
300
|
+
)
|
|
301
|
+
end
|
|
170
302
|
end
|
|
303
|
+
|
|
171
304
|
it 'uses web client to fetch url' do
|
|
172
305
|
expect(client.web_client).to be_a Slack::Web::Client
|
|
173
306
|
end
|
|
@@ -181,9 +314,10 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
181
314
|
end
|
|
182
315
|
describe '#stop!' do
|
|
183
316
|
before do
|
|
184
|
-
|
|
317
|
+
allow(socket).to receive(:disconnect!)
|
|
185
318
|
client.stop!
|
|
186
319
|
end
|
|
320
|
+
|
|
187
321
|
it 'cannot be invoked twice' do
|
|
188
322
|
client.instance_variable_set('@socket', nil) # caused by a :close callback
|
|
189
323
|
expect do
|
|
@@ -191,6 +325,7 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
191
325
|
end.to raise_error Slack::RealTime::Client::ClientNotStartedError
|
|
192
326
|
end
|
|
193
327
|
end
|
|
328
|
+
|
|
194
329
|
describe '#next_id' do
|
|
195
330
|
it 'increments' do
|
|
196
331
|
previous_id = client.send(:next_id)
|
|
@@ -199,9 +334,11 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
199
334
|
end
|
|
200
335
|
end
|
|
201
336
|
end
|
|
337
|
+
|
|
202
338
|
context 'client with nil store', vcr: { cassette_name: 'web/rtm_connect' } do
|
|
203
|
-
let(:client) {
|
|
339
|
+
let(:client) { described_class.new(store_class: nil) }
|
|
204
340
|
let(:url) { 'wss://mpmulti-w5tz.slack-msgs.com/websocket/uid' }
|
|
341
|
+
|
|
205
342
|
it 'sets store to nil' do
|
|
206
343
|
expect(client.store).to be nil
|
|
207
344
|
end
|
|
@@ -210,7 +347,7 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
210
347
|
'type' => 'team_rename',
|
|
211
348
|
'name' => 'New Team Name Inc.'
|
|
212
349
|
)
|
|
213
|
-
expect(client).
|
|
350
|
+
expect(client).not_to receive(:run_handlers)
|
|
214
351
|
client.send(:dispatch, event)
|
|
215
352
|
end
|
|
216
353
|
it 'self' do
|
|
@@ -219,9 +356,16 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
219
356
|
it 'team' do
|
|
220
357
|
expect(client.team).to be nil
|
|
221
358
|
end
|
|
359
|
+
describe 'to_s' do
|
|
360
|
+
it 'defaults to class instance' do
|
|
361
|
+
expect(client.to_s).to match(/^#<Slack::RealTime::Client:0x\h+>$/)
|
|
362
|
+
end
|
|
363
|
+
end
|
|
222
364
|
end
|
|
365
|
+
|
|
223
366
|
context 'client with defaults' do
|
|
224
|
-
let(:client) {
|
|
367
|
+
let(:client) { described_class.new }
|
|
368
|
+
|
|
225
369
|
describe '#initialize' do
|
|
226
370
|
it 'sets ping' do
|
|
227
371
|
expect(client.websocket_ping).to eq 30
|
|
@@ -241,38 +385,70 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
241
385
|
end
|
|
242
386
|
end
|
|
243
387
|
end
|
|
388
|
+
|
|
389
|
+
describe '#run_ping?' do
|
|
390
|
+
it 'returns true when websocket_ping is greater than 0' do
|
|
391
|
+
client.websocket_ping = 30
|
|
392
|
+
expect(client.run_ping?).to be true
|
|
393
|
+
end
|
|
394
|
+
it 'returns false when websocket_ping is less than 1' do
|
|
395
|
+
client.websocket_ping = 0
|
|
396
|
+
expect(client.run_ping?).to be false
|
|
397
|
+
client.websocket_ping = nil
|
|
398
|
+
expect(client.run_ping?).to be false
|
|
399
|
+
end
|
|
400
|
+
end
|
|
244
401
|
end
|
|
402
|
+
|
|
245
403
|
context 'with custom settings' do
|
|
246
404
|
describe '#initialize' do
|
|
247
405
|
Slack::RealTime::Config::ATTRIBUTES.each do |key|
|
|
248
|
-
context key do
|
|
249
|
-
let(:client) {
|
|
406
|
+
context key.to_s do
|
|
407
|
+
let(:client) { described_class.new(key => 'custom') }
|
|
408
|
+
|
|
250
409
|
it "sets #{key}" do
|
|
251
|
-
expect(client.send(key)).
|
|
410
|
+
expect(client.send(key)).not_to eq Slack::RealTime::Config.send(key)
|
|
252
411
|
expect(client.send(key)).to eq 'custom'
|
|
253
412
|
end
|
|
254
413
|
end
|
|
255
414
|
end
|
|
256
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
|
|
257
427
|
end
|
|
428
|
+
|
|
258
429
|
context 'global config' do
|
|
259
430
|
after do
|
|
260
|
-
|
|
431
|
+
described_class.config.reset
|
|
261
432
|
end
|
|
433
|
+
|
|
262
434
|
let(:url) { 'wss://ms173.slack-msgs.com/websocket/lqcUiAvrKTP-uuid=' }
|
|
263
|
-
let(:client) {
|
|
435
|
+
let(:client) { described_class.new }
|
|
436
|
+
|
|
264
437
|
context 'ping' do
|
|
265
438
|
before do
|
|
266
|
-
|
|
439
|
+
described_class.configure do |config|
|
|
267
440
|
config.websocket_ping = 15
|
|
268
441
|
end
|
|
269
442
|
end
|
|
443
|
+
|
|
270
444
|
describe '#initialize' do
|
|
271
445
|
it 'sets ping' do
|
|
272
446
|
expect(client.websocket_ping).to eq 15
|
|
273
447
|
end
|
|
274
448
|
it 'creates a connection with custom ping', vcr: { cassette_name: 'web/rtm_start' } do
|
|
275
|
-
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
|
+
)
|
|
276
452
|
client.start!
|
|
277
453
|
end
|
|
278
454
|
it 'sets start_options' do
|
|
@@ -280,15 +456,17 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
280
456
|
end
|
|
281
457
|
end
|
|
282
458
|
end
|
|
459
|
+
|
|
283
460
|
context 'proxy' do
|
|
284
461
|
before do
|
|
285
|
-
|
|
462
|
+
described_class.configure do |config|
|
|
286
463
|
config.websocket_proxy = {
|
|
287
464
|
origin: 'http://username:password@proxy.example.com',
|
|
288
465
|
headers: { 'User-Agent' => 'ruby' }
|
|
289
466
|
}
|
|
290
467
|
end
|
|
291
468
|
end
|
|
469
|
+
|
|
292
470
|
describe '#initialize' do
|
|
293
471
|
it 'sets proxy' do
|
|
294
472
|
expect(client.websocket_proxy).to eq(
|
|
@@ -310,40 +488,48 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
310
488
|
end
|
|
311
489
|
end
|
|
312
490
|
end
|
|
491
|
+
|
|
313
492
|
context 'start_options' do
|
|
314
493
|
before do
|
|
315
|
-
|
|
494
|
+
described_class.configure do |config|
|
|
316
495
|
config.start_options = { simple_latest: true }
|
|
317
496
|
end
|
|
318
497
|
end
|
|
498
|
+
|
|
319
499
|
describe '#initialize' do
|
|
320
500
|
it 'sets start_options' do
|
|
321
501
|
expect(client.start_options).to eq(simple_latest: true)
|
|
322
502
|
end
|
|
323
503
|
context 'start!' do
|
|
324
504
|
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
505
|
+
|
|
325
506
|
before do
|
|
326
507
|
allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
|
|
327
508
|
allow(socket).to receive(:connect!)
|
|
328
509
|
allow(socket).to receive(:start_sync)
|
|
329
510
|
end
|
|
511
|
+
|
|
330
512
|
it 'calls rtm_start with start options', vcr: { cassette_name: 'web/rtm_start' } do
|
|
331
|
-
expect(client.web_client).to
|
|
513
|
+
expect(client.web_client).to(
|
|
514
|
+
receive(:rtm_start).with(simple_latest: true).and_call_original
|
|
515
|
+
)
|
|
332
516
|
client.start!
|
|
333
517
|
end
|
|
334
518
|
end
|
|
335
519
|
end
|
|
336
520
|
end
|
|
521
|
+
|
|
337
522
|
context 'store_class' do
|
|
338
523
|
context 'starter' do
|
|
339
524
|
before do
|
|
340
|
-
|
|
525
|
+
described_class.configure do |config|
|
|
341
526
|
config.store_class = Slack::RealTime::Stores::Starter
|
|
342
527
|
end
|
|
343
528
|
end
|
|
529
|
+
|
|
344
530
|
describe '#initialize' do
|
|
345
531
|
it 'can be overriden explicitly' do
|
|
346
|
-
client =
|
|
532
|
+
client = described_class.new(store_class: Slack::RealTime::Store)
|
|
347
533
|
expect(client.send(:store_class)).to eq Slack::RealTime::Store
|
|
348
534
|
end
|
|
349
535
|
it 'sets store_class' do
|
|
@@ -351,11 +537,13 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
351
537
|
end
|
|
352
538
|
context 'start!' do
|
|
353
539
|
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
540
|
+
|
|
354
541
|
before do
|
|
355
542
|
allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
|
|
356
543
|
allow(socket).to receive(:connect!)
|
|
357
544
|
allow(socket).to receive(:start_sync)
|
|
358
545
|
end
|
|
546
|
+
|
|
359
547
|
it 'instantiates the correct store class', vcr: { cassette_name: 'web/rtm_connect' } do
|
|
360
548
|
client.start!
|
|
361
549
|
expect(client.store).to be_a Slack::RealTime::Stores::Starter
|
|
@@ -363,20 +551,24 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
363
551
|
end
|
|
364
552
|
end
|
|
365
553
|
end
|
|
554
|
+
|
|
366
555
|
context 'store' do
|
|
367
556
|
before do
|
|
368
|
-
|
|
557
|
+
described_class.configure do |config|
|
|
369
558
|
config.store_class = Slack::RealTime::Stores::Store
|
|
370
559
|
end
|
|
371
560
|
end
|
|
561
|
+
|
|
372
562
|
describe '#initialize' do
|
|
373
563
|
context 'start!' do
|
|
374
564
|
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
565
|
+
|
|
375
566
|
before do
|
|
376
567
|
allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
|
|
377
568
|
allow(socket).to receive(:connect!)
|
|
378
569
|
allow(socket).to receive(:start_sync)
|
|
379
570
|
end
|
|
571
|
+
|
|
380
572
|
it 'calls rtm_start and not rtm_connect', vcr: { cassette_name: 'web/rtm_start' } do
|
|
381
573
|
expect(client.web_client).to receive(:rtm_start).and_call_original
|
|
382
574
|
client.start!
|
|
@@ -385,18 +577,20 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
385
577
|
end
|
|
386
578
|
end
|
|
387
579
|
end
|
|
580
|
+
|
|
388
581
|
context 'start_method' do
|
|
389
582
|
describe '#initialize' do
|
|
390
583
|
it 'can be overriden explicitly' do
|
|
391
|
-
client =
|
|
584
|
+
client = described_class.new(start_method: :overriden)
|
|
392
585
|
expect(client.send(:start_method)).to eq :overriden
|
|
393
586
|
end
|
|
394
587
|
context 'with start_method' do
|
|
395
588
|
before do
|
|
396
|
-
|
|
589
|
+
described_class.configure do |config|
|
|
397
590
|
config.start_method = :overriden
|
|
398
591
|
end
|
|
399
592
|
end
|
|
593
|
+
|
|
400
594
|
it 'sets start_method' do
|
|
401
595
|
expect(client.send(:start_method)).to eq :overriden
|
|
402
596
|
end
|
|
@@ -407,14 +601,18 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
407
601
|
end.to raise_error RuntimeError, 'overriden'
|
|
408
602
|
end
|
|
409
603
|
end
|
|
604
|
+
|
|
410
605
|
context 'start!' do
|
|
411
606
|
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
607
|
+
|
|
412
608
|
before do
|
|
413
609
|
allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
|
|
414
610
|
allow(socket).to receive(:connect!)
|
|
415
611
|
allow(socket).to receive(:start_sync)
|
|
416
612
|
end
|
|
417
|
-
|
|
613
|
+
|
|
614
|
+
it 'defaults to :rtm_start when using full store',
|
|
615
|
+
vcr: { cassette_name: 'web/rtm_start' } do
|
|
418
616
|
expect(client.web_client).to receive(:rtm_start).and_call_original
|
|
419
617
|
client.start!
|
|
420
618
|
end
|