slack-ruby-client 0.13.1 → 1.0.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 +29 -5
- data/.rubocop_todo.yml +124 -44
- data/.travis.yml +5 -8
- data/CHANGELOG.md +92 -2
- data/CONTRIBUTING.md +19 -8
- data/Dangerfile +2 -0
- data/Gemfile +10 -5
- data/LICENSE.md +1 -1
- data/README.md +186 -49
- data/RELEASING.md +1 -1
- data/Rakefile +2 -1
- data/UPGRADING.md +72 -2
- data/bin/commands/admin_analytics.rb +16 -0
- data/bin/commands/admin_apps.rb +51 -0
- data/bin/commands/admin_apps_approved.rb +17 -0
- data/bin/commands/admin_apps_requests.rb +17 -0
- data/bin/commands/admin_apps_restricted.rb +17 -0
- data/bin/commands/admin_auth_policy.rb +39 -0
- data/bin/commands/admin_barriers.rb +47 -0
- data/bin/commands/admin_conversations.rb +169 -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 +98 -0
- data/bin/commands/admin_users_session.rb +78 -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_manifest.rb +51 -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 +56 -12
- data/bin/commands/chat_scheduledMessages.rb +19 -0
- data/bin/commands/conversations.rb +75 -5
- data/bin/commands/dialog.rb +1 -0
- data/bin/commands/dnd.rb +6 -3
- data/bin/commands/emoji.rb +1 -0
- data/bin/commands/files.rb +10 -18
- 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 -14
- data/bin/commands/oauth_v2.rb +29 -0
- data/bin/commands/openid_connect.rb +27 -0
- data/bin/commands/pins.rb +3 -6
- data/bin/commands/reactions.rb +3 -3
- data/bin/commands/reminders.rb +7 -0
- data/bin/commands/rtm.rb +3 -2
- data/bin/commands/search.rb +6 -1
- data/bin/commands/stars.rb +8 -6
- data/bin/commands/team.rb +5 -0
- data/bin/commands/team_billing.rb +13 -0
- data/bin/commands/team_preferences.rb +13 -0
- data/bin/commands/team_profile.rb +1 -0
- data/bin/commands/tooling_tokens.rb +14 -0
- data/bin/commands/usergroups.rb +7 -1
- data/bin/commands/usergroups_users.rb +3 -0
- data/bin/commands/users.rb +6 -4
- 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/commands.rb +38 -8
- 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/config.rb +2 -2
- data/lib/slack/events/config.rb +32 -0
- data/lib/slack/events/request.rb +72 -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 +101 -32
- data/lib/slack/real_time/concurrency/async.rb +77 -6
- data/lib/slack/real_time/concurrency.rb +1 -2
- data/lib/slack/real_time/config.rb +6 -10
- 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/models.rb +1 -0
- data/lib/slack/real_time/socket.rb +45 -17
- data/lib/slack/real_time/stores/base.rb +5 -7
- data/lib/slack/real_time/stores/starter.rb +17 -3
- data/lib/slack/real_time/stores/store.rb +33 -25
- data/lib/slack/real_time/stores.rb +1 -0
- data/lib/slack/version.rb +2 -1
- data/lib/slack/web/api/endpoints/admin_analytics.rb +28 -0
- data/lib/slack/web/api/endpoints/admin_apps.rb +78 -0
- data/lib/slack/web/api/endpoints/admin_apps_approved.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_apps_requests.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_apps_restricted.rb +35 -0
- data/lib/slack/web/api/endpoints/admin_auth_policy.rb +72 -0
- data/lib/slack/web/api/endpoints/admin_barriers.rb +82 -0
- data/lib/slack/web/api/endpoints/admin_conversations.rb +260 -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 +163 -0
- data/lib/slack/web/api/endpoints/admin_users_session.rb +122 -0
- data/lib/slack/web/api/endpoints/api.rb +2 -3
- 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_manifest.rb +75 -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 +2 -1
- data/lib/slack/web/api/endpoints/auth_teams.rb +33 -0
- data/lib/slack/web/api/endpoints/bots.rb +4 -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 +2 -243
- data/lib/slack/web/api/endpoints/chat.rb +144 -47
- data/lib/slack/web/api/endpoints/chat_scheduledMessages.rb +40 -0
- data/lib/slack/web/api/endpoints/conversations.rb +152 -41
- data/lib/slack/web/api/endpoints/dialog.rb +3 -2
- data/lib/slack/web/api/endpoints/dnd.rb +9 -4
- data/lib/slack/web/api/endpoints/emoji.rb +1 -0
- data/lib/slack/web/api/endpoints/files.rb +24 -29
- data/lib/slack/web/api/endpoints/files_comments.rb +2 -34
- 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 +5 -2
- data/lib/slack/web/api/endpoints/mpim.rb +1 -96
- data/lib/slack/web/api/endpoints/oauth.rb +7 -31
- data/lib/slack/web/api/endpoints/oauth_v2.rb +48 -0
- data/lib/slack/web/api/endpoints/openid_connect.rb +42 -0
- data/lib/slack/web/api/endpoints/pins.rb +8 -15
- data/lib/slack/web/api/endpoints/reactions.rb +20 -19
- data/lib/slack/web/api/endpoints/reminders.rb +18 -5
- data/lib/slack/web/api/endpoints/rtm.rb +11 -10
- data/lib/slack/web/api/endpoints/search.rb +28 -13
- data/lib/slack/web/api/endpoints/stars.rb +14 -11
- data/lib/slack/web/api/endpoints/team.rb +13 -4
- data/lib/slack/web/api/endpoints/team_billing.rb +21 -0
- data/lib/slack/web/api/endpoints/team_preferences.rb +21 -0
- data/lib/slack/web/api/endpoints/team_profile.rb +2 -1
- data/lib/slack/web/api/endpoints/tooling_tokens.rb +24 -0
- data/lib/slack/web/api/endpoints/usergroups.rb +27 -16
- data/lib/slack/web/api/endpoints/usergroups_users.rb +10 -5
- data/lib/slack/web/api/endpoints/users.rb +21 -20
- 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 +8 -7
- 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/endpoints.rb +76 -18
- data/lib/slack/web/api/error.rb +1 -0
- data/lib/slack/web/api/errors/server_error.rb +37 -0
- data/lib/slack/web/api/errors/slack_error.rb +14 -1
- data/lib/slack/web/api/errors/too_many_requests_error.rb +2 -4
- data/lib/slack/web/api/errors.rb +1040 -0
- data/lib/slack/web/api/mixins/{channels.id.rb → conversations.id.rb} +4 -5
- 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/mixins.rb +2 -2
- data/lib/slack/web/api/patches/chat.1.patch +70 -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 -2
- 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 +3 -1
- 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 +7 -7
- data/lib/slack-ruby-client.rb +10 -4
- data/lib/slack.rb +1 -0
- 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 +9 -6
- data/spec/fixtures/slack/web/429_error.yml +50 -54
- data/spec/fixtures/slack/web/auth_test_error.yml +51 -18
- data/spec/fixtures/slack/web/auth_test_success.yml +50 -26
- data/spec/fixtures/slack/web/conversations_info.yml +167 -0
- data/spec/fixtures/slack/web/conversations_setTopic.yml +84 -0
- data/spec/fixtures/slack/web/conversations_setTopic_one_page.yml +172 -0
- data/spec/fixtures/slack/web/conversations_setTopic_paginated.yml +253 -0
- data/spec/fixtures/slack/web/paginated_users_list.yml +501 -69
- data/spec/fixtures/slack/web/rtm_connect.yml +267 -30
- data/spec/fixtures/slack/web/rtm_start.yml +771 -60
- data/spec/fixtures/slack/web/users_info.yml +153 -69
- data/spec/fixtures/slack/web/users_list.yml +102 -41
- data/spec/fixtures/slack/web/views_open_error.yml +83 -0
- data/spec/integration/integration_spec.rb +115 -47
- 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 +244 -50
- 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 +3 -2
- data/spec/slack/real_time/event_handlers/channel_spec.rb +10 -7
- 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 +9 -8
- data/spec/slack/real_time/event_handlers/team_spec.rb +3 -1
- data/spec/slack/real_time/event_handlers/user_spec.rb +3 -2
- 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 +40 -6
- 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 +18 -0
- data/spec/slack/web/api/endpoints/admin_auth_policy_spec.rb +35 -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 +98 -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 +41 -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_manifest_spec.rb +36 -0
- data/spec/slack/web/api/endpoints/apps_spec.rb +16 -0
- data/spec/slack/web/api/endpoints/{apps_permissions_scopes_spec.rb → auth_teams_spec.rb} +2 -1
- 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/custom_specs/auth_spec.rb +9 -7
- 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 +8 -3
- data/spec/slack/web/api/endpoints/custom_specs/views_spec.rb +95 -0
- data/spec/slack/web/api/endpoints/dnd_spec.rb +4 -3
- 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/migration_spec.rb +1 -0
- data/spec/slack/web/api/endpoints/oauth_spec.rb +1 -22
- data/spec/slack/web/api/endpoints/oauth_v2_spec.rb +16 -0
- data/spec/slack/web/api/endpoints/openid_connect_spec.rb +8 -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/{apps_permissions_resources_spec.rb → team_billing_spec.rb} +2 -1
- data/spec/slack/web/api/endpoints/team_preferences_spec.rb +8 -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/tooling_tokens_spec.rb +13 -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 +7 -7
- data/spec/slack/web/api/errors/slack_error_spec.rb +26 -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/users_spec.rb +17 -8
- data/spec/slack/web/api/pagination/cursor_spec.rb +41 -13
- data/spec/slack/web/client_spec.rb +168 -19
- data/spec/slack/web/faraday/request_spec.rb +80 -0
- data/spec/slack/web/faraday/response/raise_error_spec.rb +48 -12
- data/spec/spec_helper.rb +9 -2
- 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 +6 -6
- data/spec/support/real_time/event.rb +1 -0
- data/spec/support/token.rb +1 -0
- data/spec/support/vcr.rb +37 -1
- metadata +205 -147
- 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 -118
- data/lib/slack/real_time/concurrency/eventmachine.rb +0 -66
- data/lib/slack/web/api/mixins/channels.id.json +0 -20
- data/lib/slack/web/api/mixins/groups.id.json +0 -20
- data/lib/slack/web/api/mixins/groups.id.rb +0 -26
- 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/fixtures/slack/web/503_error.yml +0 -14
- data/spec/fixtures/slack/web/channels_info.yml +0 -46
- data/spec/fixtures/slack/web/groups_info.yml +0 -43
- 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/apps_permissions_spec.rb +0 -15
- data/spec/slack/web/api/endpoints/apps_permissions_users_spec.rb +0 -18
- data/spec/slack/web/api/endpoints/conversations_spec.rb +0 -100
- 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/endpoints/im_spec.rb +0 -38
- data/spec/slack/web/api/endpoints/mpim_spec.rb +0 -38
- data/spec/slack/web/api/errors/service_unavailable_spec.rb +0 -14
- data/spec/slack/web/api/mixins/channels_spec.rb +0 -33
- data/spec/slack/web/api/mixins/groups_spec.rb +0 -33
|
@@ -1,58 +1,85 @@
|
|
|
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
|
|
8
|
+
# supports passing tests in CI even with an actual SLACK_API_TOKEN set
|
|
6
9
|
@token = ENV.delete('SLACK_API_TOKEN')
|
|
7
10
|
Slack::Config.reset
|
|
8
11
|
Slack::RealTime::Config.reset
|
|
9
12
|
Slack::RealTime.configure do |config|
|
|
13
|
+
config.token = '<SLACK_API_TOKEN>'
|
|
10
14
|
config.concurrency = Slack::RealTime::Concurrency::Mock
|
|
11
15
|
end
|
|
12
16
|
end
|
|
17
|
+
|
|
13
18
|
after do
|
|
14
19
|
ENV['SLACK_API_TOKEN'] = @token if @token
|
|
15
20
|
end
|
|
21
|
+
|
|
16
22
|
context 'token' do
|
|
17
|
-
before do
|
|
18
|
-
Slack.configure do |config|
|
|
19
|
-
config.token = 'global default'
|
|
20
|
-
end
|
|
21
|
-
end
|
|
22
23
|
it 'defaults token to global default' do
|
|
23
|
-
client =
|
|
24
|
-
expect(client.token).to eq '
|
|
25
|
-
expect(client.web_client.token).to eq '
|
|
24
|
+
client = described_class.new
|
|
25
|
+
expect(client.token).to eq '<SLACK_API_TOKEN>'
|
|
26
|
+
expect(client.web_client.token).to eq '<SLACK_API_TOKEN>'
|
|
26
27
|
end
|
|
27
28
|
context 'with real time config' do
|
|
28
29
|
before do
|
|
29
|
-
|
|
30
|
+
described_class.configure do |config|
|
|
30
31
|
config.token = 'custom real time token'
|
|
31
32
|
end
|
|
32
33
|
end
|
|
34
|
+
|
|
33
35
|
it 'overrides token to real time config' do
|
|
34
|
-
client =
|
|
36
|
+
client = described_class.new
|
|
35
37
|
expect(client.token).to eq 'custom real time token'
|
|
36
38
|
expect(client.web_client.token).to eq 'custom real time token'
|
|
37
39
|
end
|
|
38
40
|
it 'overrides token to specific token' do
|
|
39
|
-
client =
|
|
41
|
+
client = described_class.new(token: 'local token')
|
|
40
42
|
expect(client.token).to eq 'local token'
|
|
41
43
|
expect(client.web_client.token).to eq 'local token'
|
|
42
44
|
end
|
|
43
45
|
end
|
|
44
46
|
end
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
47
|
+
|
|
48
|
+
context 'websocket_ping_timer' do
|
|
49
|
+
context 'with defaults' do
|
|
50
|
+
let(:client) { described_class.new }
|
|
51
|
+
|
|
52
|
+
it 'defaults to websocket_ping / 2' do
|
|
53
|
+
expect(client.websocket_ping_timer).to eq 15
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
context 'with websocket_ping value changed' do
|
|
58
|
+
let(:client) { described_class.new(websocket_ping: 22) }
|
|
59
|
+
|
|
60
|
+
it 'defaults to websocket_ping / 2' do
|
|
61
|
+
expect(client.websocket_ping_timer).to eq 11
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
context 'client with a full store',
|
|
67
|
+
vcr: { cassette_name: 'web/rtm_start', allow_playback_repeats: true } do
|
|
68
|
+
let(:client) { described_class.new(store_class: Slack::RealTime::Stores::Store) }
|
|
69
|
+
let(:url) { 'wss://cerberus-xxxx.lb.slack-msgs.com/websocket/uid' }
|
|
70
|
+
|
|
48
71
|
describe '#start!' do
|
|
49
72
|
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
73
|
+
|
|
50
74
|
before do
|
|
51
|
-
allow(Slack::RealTime::Socket).to
|
|
75
|
+
allow(Slack::RealTime::Socket).to(
|
|
76
|
+
receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
|
|
77
|
+
)
|
|
52
78
|
allow(socket).to receive(:connect!)
|
|
53
79
|
allow(socket).to receive(:start_sync)
|
|
54
80
|
client.start!
|
|
55
81
|
end
|
|
82
|
+
|
|
56
83
|
describe 'properties provided upon connection' do
|
|
57
84
|
it 'sets url' do
|
|
58
85
|
expect(client.url).to eq url
|
|
@@ -65,28 +92,34 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
65
92
|
expect(client.teams.values.first).to eq client.team
|
|
66
93
|
end
|
|
67
94
|
it 'sets self' do
|
|
68
|
-
expect(client.self.id).to eq '
|
|
95
|
+
expect(client.self.id).to eq 'U0J1GAHN1'
|
|
69
96
|
end
|
|
70
97
|
it 'sets users' do
|
|
71
|
-
expect(client.users.count).to eq
|
|
72
|
-
expect(client.users.values.first['id']).to eq '
|
|
98
|
+
expect(client.users.count).to eq 35
|
|
99
|
+
expect(client.users.values.first['id']).to eq 'U0J1GAHN1'
|
|
73
100
|
end
|
|
74
101
|
it 'sets channels' do
|
|
75
|
-
expect(client.channels.count).to eq
|
|
76
|
-
expect(client.channels.values.first['name']).to eq '
|
|
102
|
+
expect(client.channels.count).to eq 156
|
|
103
|
+
expect(client.channels.values.first['name']).to eq 'general'
|
|
77
104
|
end
|
|
78
105
|
it 'sets ims' do
|
|
79
|
-
expect(client.ims.count).to eq
|
|
80
|
-
expect(client.ims.values.first['user']).to eq '
|
|
106
|
+
expect(client.ims.count).to eq 10
|
|
107
|
+
expect(client.ims.values.first['user']).to eq 'U04KB5WQR'
|
|
81
108
|
end
|
|
82
109
|
it 'sets bots' do
|
|
83
|
-
expect(client.bots.count).to eq
|
|
110
|
+
expect(client.bots.count).to eq 83
|
|
84
111
|
expect(client.bots.values.first['name']).to eq 'bot'
|
|
85
112
|
end
|
|
86
113
|
it 'sets groups' do
|
|
87
114
|
expect(client.groups.count).to eq 1
|
|
88
115
|
end
|
|
116
|
+
it 'includes team name in to_s' do
|
|
117
|
+
expect(client.to_s).to eq(
|
|
118
|
+
"id=#{client.team.id}, name=#{client.team.name}, domain=#{client.team.domain}"
|
|
119
|
+
)
|
|
120
|
+
end
|
|
89
121
|
end
|
|
122
|
+
|
|
90
123
|
it 'uses web client to fetch url' do
|
|
91
124
|
expect(client.web_client).to be_a Slack::Web::Client
|
|
92
125
|
end
|
|
@@ -100,9 +133,10 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
100
133
|
end
|
|
101
134
|
describe '#stop!' do
|
|
102
135
|
before do
|
|
103
|
-
|
|
136
|
+
allow(socket).to receive(:disconnect!)
|
|
104
137
|
client.stop!
|
|
105
138
|
end
|
|
139
|
+
|
|
106
140
|
it 'cannot be invoked twice' do
|
|
107
141
|
client.instance_variable_set('@socket', nil) # caused by a :close callback
|
|
108
142
|
expect do
|
|
@@ -110,12 +144,14 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
110
144
|
end.to raise_error Slack::RealTime::Client::ClientNotStartedError
|
|
111
145
|
end
|
|
112
146
|
end
|
|
147
|
+
|
|
113
148
|
describe '#next_id' do
|
|
114
149
|
it 'increments' do
|
|
115
150
|
previous_id = client.send(:next_id)
|
|
116
151
|
expect(client.send(:next_id)).to eq previous_id + 1
|
|
117
152
|
end
|
|
118
153
|
end
|
|
154
|
+
|
|
119
155
|
context 'subclassed' do
|
|
120
156
|
it 'runs event handlers' do
|
|
121
157
|
event = Slack::RealTime::Event.new(
|
|
@@ -126,19 +162,106 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
126
162
|
expect(client.store.team.name).to eq 'New Team Name Inc.'
|
|
127
163
|
end
|
|
128
164
|
end
|
|
165
|
+
|
|
166
|
+
describe '#run_handlers' do
|
|
167
|
+
describe 'empty events' do
|
|
168
|
+
before do
|
|
169
|
+
@e = client.store.class.events
|
|
170
|
+
client.store.class.events = nil
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
after do
|
|
174
|
+
client.store.class.events = @e
|
|
175
|
+
end
|
|
176
|
+
|
|
177
|
+
it 'returns false when event is nil' do
|
|
178
|
+
expect(client.send(:run_handlers, 'example', {})).to be nil
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
end
|
|
183
|
+
|
|
184
|
+
describe '#start_async' do
|
|
185
|
+
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
186
|
+
|
|
187
|
+
before do
|
|
188
|
+
allow(Slack::RealTime::Socket).to(
|
|
189
|
+
receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
|
|
190
|
+
)
|
|
191
|
+
allow(socket).to receive(:connect!)
|
|
192
|
+
allow(socket).to receive(:start_async)
|
|
193
|
+
client.start_async
|
|
194
|
+
end
|
|
195
|
+
|
|
196
|
+
describe '#run_ping!' do
|
|
197
|
+
it 'sends ping messages when the websocket connection is idle' do
|
|
198
|
+
allow(socket).to receive(:time_since_last_message).and_return(30)
|
|
199
|
+
expect(socket).to receive(:send_data).with('{"type":"ping","id":1}')
|
|
200
|
+
client.run_ping!
|
|
201
|
+
end
|
|
202
|
+
it 'reconnects the websocket if it has been idle for too long' do
|
|
203
|
+
allow(socket).to receive(:time_since_last_message).and_return(75)
|
|
204
|
+
allow(socket).to receive(:connected?).and_return(true)
|
|
205
|
+
expect(socket).to receive(:close)
|
|
206
|
+
expect(socket).to receive(:restart_async)
|
|
207
|
+
client.run_ping!
|
|
208
|
+
end
|
|
209
|
+
[
|
|
210
|
+
EOFError,
|
|
211
|
+
Errno::ECONNRESET,
|
|
212
|
+
Errno::EPIPE,
|
|
213
|
+
Faraday::ClientError,
|
|
214
|
+
Slack::Web::Api::Errors::SlackError
|
|
215
|
+
].each do |err|
|
|
216
|
+
context "raising #{err}" do
|
|
217
|
+
it 'does not terminate the ping worker' do
|
|
218
|
+
allow(socket).to receive(:time_since_last_message) { raise err }
|
|
219
|
+
expect(socket).not_to receive(:send_data)
|
|
220
|
+
client.run_ping!
|
|
221
|
+
end
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
context 'raising Slack::Web::Api::Errors::SlackError' do
|
|
225
|
+
%w[invalid_auth account_inactive].each do |code|
|
|
226
|
+
context code do
|
|
227
|
+
it 'does not terminate the ping worker' do
|
|
228
|
+
allow(socket).to receive(:time_since_last_message) {
|
|
229
|
+
raise Slack::Web::Api::Errors::SlackError, code
|
|
230
|
+
}
|
|
231
|
+
expect(socket).not_to receive(:send_data)
|
|
232
|
+
expect do
|
|
233
|
+
client.run_ping!
|
|
234
|
+
end.to raise_error Slack::Web::Api::Errors::SlackError, code
|
|
235
|
+
end
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
end
|
|
241
|
+
|
|
242
|
+
describe 'to_s' do
|
|
243
|
+
it 'defaults to class instance' do
|
|
244
|
+
expect(client.to_s).to match(/^#<Slack::RealTime::Client:0x\h+>$/)
|
|
245
|
+
end
|
|
129
246
|
end
|
|
130
247
|
end
|
|
248
|
+
|
|
131
249
|
context 'client with starter store', vcr: { cassette_name: 'web/rtm_connect' } do
|
|
132
|
-
let(:client) {
|
|
133
|
-
let(:url) { 'wss://
|
|
250
|
+
let(:client) { described_class.new(store_class: Slack::RealTime::Stores::Starter) }
|
|
251
|
+
let(:url) { 'wss://cerberus-xxxx.lb.slack-msgs.com/websocket/uid' }
|
|
252
|
+
|
|
134
253
|
describe '#start!' do
|
|
135
254
|
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
255
|
+
|
|
136
256
|
before do
|
|
137
|
-
allow(Slack::RealTime::Socket).to
|
|
257
|
+
allow(Slack::RealTime::Socket).to(
|
|
258
|
+
receive(:new).with(url, ping: 30, logger: Slack::Logger.default).and_return(socket)
|
|
259
|
+
)
|
|
138
260
|
allow(socket).to receive(:connect!)
|
|
139
261
|
allow(socket).to receive(:start_sync)
|
|
140
262
|
client.start!
|
|
141
263
|
end
|
|
264
|
+
|
|
142
265
|
describe 'properties provided upon connection' do
|
|
143
266
|
it 'sets url' do
|
|
144
267
|
expect(client.url).to eq url
|
|
@@ -147,7 +270,7 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
147
270
|
expect(client.team.domain).to eq 'dblockdotorg'
|
|
148
271
|
end
|
|
149
272
|
it 'sets self' do
|
|
150
|
-
expect(client.self.id).to eq '
|
|
273
|
+
expect(client.self.id).to eq 'U0J1GAHN1'
|
|
151
274
|
end
|
|
152
275
|
it 'no users' do
|
|
153
276
|
expect(client.users).to be_nil
|
|
@@ -167,7 +290,13 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
167
290
|
it 'no groups' do
|
|
168
291
|
expect(client.groups).to be_nil
|
|
169
292
|
end
|
|
293
|
+
it 'includes team name in to_s' do
|
|
294
|
+
expect(client.to_s).to eq(
|
|
295
|
+
"id=#{client.team.id}, name=#{client.team.name}, domain=#{client.team.domain}"
|
|
296
|
+
)
|
|
297
|
+
end
|
|
170
298
|
end
|
|
299
|
+
|
|
171
300
|
it 'uses web client to fetch url' do
|
|
172
301
|
expect(client.web_client).to be_a Slack::Web::Client
|
|
173
302
|
end
|
|
@@ -181,9 +310,10 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
181
310
|
end
|
|
182
311
|
describe '#stop!' do
|
|
183
312
|
before do
|
|
184
|
-
|
|
313
|
+
allow(socket).to receive(:disconnect!)
|
|
185
314
|
client.stop!
|
|
186
315
|
end
|
|
316
|
+
|
|
187
317
|
it 'cannot be invoked twice' do
|
|
188
318
|
client.instance_variable_set('@socket', nil) # caused by a :close callback
|
|
189
319
|
expect do
|
|
@@ -191,6 +321,7 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
191
321
|
end.to raise_error Slack::RealTime::Client::ClientNotStartedError
|
|
192
322
|
end
|
|
193
323
|
end
|
|
324
|
+
|
|
194
325
|
describe '#next_id' do
|
|
195
326
|
it 'increments' do
|
|
196
327
|
previous_id = client.send(:next_id)
|
|
@@ -199,9 +330,11 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
199
330
|
end
|
|
200
331
|
end
|
|
201
332
|
end
|
|
333
|
+
|
|
202
334
|
context 'client with nil store', vcr: { cassette_name: 'web/rtm_connect' } do
|
|
203
|
-
let(:client) {
|
|
335
|
+
let(:client) { described_class.new(store_class: nil) }
|
|
204
336
|
let(:url) { 'wss://mpmulti-w5tz.slack-msgs.com/websocket/uid' }
|
|
337
|
+
|
|
205
338
|
it 'sets store to nil' do
|
|
206
339
|
expect(client.store).to be nil
|
|
207
340
|
end
|
|
@@ -210,7 +343,7 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
210
343
|
'type' => 'team_rename',
|
|
211
344
|
'name' => 'New Team Name Inc.'
|
|
212
345
|
)
|
|
213
|
-
expect(client).
|
|
346
|
+
expect(client).not_to receive(:run_handlers)
|
|
214
347
|
client.send(:dispatch, event)
|
|
215
348
|
end
|
|
216
349
|
it 'self' do
|
|
@@ -219,9 +352,16 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
219
352
|
it 'team' do
|
|
220
353
|
expect(client.team).to be nil
|
|
221
354
|
end
|
|
355
|
+
describe 'to_s' do
|
|
356
|
+
it 'defaults to class instance' do
|
|
357
|
+
expect(client.to_s).to match(/^#<Slack::RealTime::Client:0x\h+>$/)
|
|
358
|
+
end
|
|
359
|
+
end
|
|
222
360
|
end
|
|
361
|
+
|
|
223
362
|
context 'client with defaults' do
|
|
224
|
-
let(:client) {
|
|
363
|
+
let(:client) { described_class.new }
|
|
364
|
+
|
|
225
365
|
describe '#initialize' do
|
|
226
366
|
it 'sets ping' do
|
|
227
367
|
expect(client.websocket_ping).to eq 30
|
|
@@ -235,44 +375,76 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
235
375
|
it 'sets default store_class' do
|
|
236
376
|
expect(client.send(:store_class)).to eq Slack::RealTime::Store
|
|
237
377
|
end
|
|
238
|
-
(Slack::RealTime::Config::ATTRIBUTES - %i[logger store_class]).each do |key|
|
|
378
|
+
(Slack::RealTime::Config::ATTRIBUTES - %i[logger store_class token]).each do |key|
|
|
239
379
|
it "sets #{key}" do
|
|
240
380
|
expect(client.send(key)).to eq Slack::RealTime::Config.send(key)
|
|
241
381
|
end
|
|
242
382
|
end
|
|
243
383
|
end
|
|
384
|
+
|
|
385
|
+
describe '#run_ping?' do
|
|
386
|
+
it 'returns true when websocket_ping is greater than 0' do
|
|
387
|
+
client.websocket_ping = 30
|
|
388
|
+
expect(client.run_ping?).to be true
|
|
389
|
+
end
|
|
390
|
+
it 'returns false when websocket_ping is less than 1' do
|
|
391
|
+
client.websocket_ping = 0
|
|
392
|
+
expect(client.run_ping?).to be false
|
|
393
|
+
client.websocket_ping = nil
|
|
394
|
+
expect(client.run_ping?).to be false
|
|
395
|
+
end
|
|
396
|
+
end
|
|
244
397
|
end
|
|
398
|
+
|
|
245
399
|
context 'with custom settings' do
|
|
246
400
|
describe '#initialize' do
|
|
247
401
|
Slack::RealTime::Config::ATTRIBUTES.each do |key|
|
|
248
|
-
context key do
|
|
249
|
-
let(:client) {
|
|
402
|
+
context key.to_s do
|
|
403
|
+
let(:client) { described_class.new(key => 'custom') }
|
|
404
|
+
|
|
250
405
|
it "sets #{key}" do
|
|
251
|
-
expect(client.send(key)).
|
|
406
|
+
expect(client.send(key)).not_to eq Slack::RealTime::Config.send(key)
|
|
252
407
|
expect(client.send(key)).to eq 'custom'
|
|
253
408
|
end
|
|
254
409
|
end
|
|
255
410
|
end
|
|
256
411
|
end
|
|
412
|
+
|
|
413
|
+
describe 'logger accessor' do
|
|
414
|
+
let(:client) { described_class.new }
|
|
415
|
+
|
|
416
|
+
it 'exposes public logger' do
|
|
417
|
+
expect(client.logger).to be_a(::Logger)
|
|
418
|
+
end
|
|
419
|
+
it 'exposes public logger=' do
|
|
420
|
+
expect { client.logger = nil }.not_to raise_error(NoMethodError)
|
|
421
|
+
end
|
|
422
|
+
end
|
|
257
423
|
end
|
|
424
|
+
|
|
258
425
|
context 'global config' do
|
|
259
426
|
after do
|
|
260
|
-
|
|
427
|
+
described_class.config.reset
|
|
261
428
|
end
|
|
262
|
-
|
|
263
|
-
let(:
|
|
429
|
+
|
|
430
|
+
let(:url) { 'wss://cerberus-xxxx.lb.slack-msgs.com/websocket/uid' }
|
|
431
|
+
let(:client) { described_class.new }
|
|
432
|
+
|
|
264
433
|
context 'ping' do
|
|
265
434
|
before do
|
|
266
|
-
|
|
435
|
+
described_class.configure do |config|
|
|
267
436
|
config.websocket_ping = 15
|
|
268
437
|
end
|
|
269
438
|
end
|
|
439
|
+
|
|
270
440
|
describe '#initialize' do
|
|
271
441
|
it 'sets ping' do
|
|
272
442
|
expect(client.websocket_ping).to eq 15
|
|
273
443
|
end
|
|
274
444
|
it 'creates a connection with custom ping', vcr: { cassette_name: 'web/rtm_start' } do
|
|
275
|
-
expect(Slack::RealTime::Concurrency::Mock::WebSocket).to
|
|
445
|
+
expect(Slack::RealTime::Concurrency::Mock::WebSocket).to(
|
|
446
|
+
receive(:new).with(url, nil, ping: 15).and_return(ws)
|
|
447
|
+
)
|
|
276
448
|
client.start!
|
|
277
449
|
end
|
|
278
450
|
it 'sets start_options' do
|
|
@@ -280,15 +452,17 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
280
452
|
end
|
|
281
453
|
end
|
|
282
454
|
end
|
|
455
|
+
|
|
283
456
|
context 'proxy' do
|
|
284
457
|
before do
|
|
285
|
-
|
|
458
|
+
described_class.configure do |config|
|
|
286
459
|
config.websocket_proxy = {
|
|
287
460
|
origin: 'http://username:password@proxy.example.com',
|
|
288
461
|
headers: { 'User-Agent' => 'ruby' }
|
|
289
462
|
}
|
|
290
463
|
end
|
|
291
464
|
end
|
|
465
|
+
|
|
292
466
|
describe '#initialize' do
|
|
293
467
|
it 'sets proxy' do
|
|
294
468
|
expect(client.websocket_proxy).to eq(
|
|
@@ -310,40 +484,48 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
310
484
|
end
|
|
311
485
|
end
|
|
312
486
|
end
|
|
487
|
+
|
|
313
488
|
context 'start_options' do
|
|
314
489
|
before do
|
|
315
|
-
|
|
490
|
+
described_class.configure do |config|
|
|
316
491
|
config.start_options = { simple_latest: true }
|
|
317
492
|
end
|
|
318
493
|
end
|
|
494
|
+
|
|
319
495
|
describe '#initialize' do
|
|
320
496
|
it 'sets start_options' do
|
|
321
497
|
expect(client.start_options).to eq(simple_latest: true)
|
|
322
498
|
end
|
|
323
499
|
context 'start!' do
|
|
324
500
|
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
501
|
+
|
|
325
502
|
before do
|
|
326
503
|
allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
|
|
327
504
|
allow(socket).to receive(:connect!)
|
|
328
505
|
allow(socket).to receive(:start_sync)
|
|
329
506
|
end
|
|
507
|
+
|
|
330
508
|
it 'calls rtm_start with start options', vcr: { cassette_name: 'web/rtm_start' } do
|
|
331
|
-
expect(client.web_client).to
|
|
509
|
+
expect(client.web_client).to(
|
|
510
|
+
receive(:rtm_start).with(simple_latest: true).and_call_original
|
|
511
|
+
)
|
|
332
512
|
client.start!
|
|
333
513
|
end
|
|
334
514
|
end
|
|
335
515
|
end
|
|
336
516
|
end
|
|
517
|
+
|
|
337
518
|
context 'store_class' do
|
|
338
519
|
context 'starter' do
|
|
339
520
|
before do
|
|
340
|
-
|
|
521
|
+
described_class.configure do |config|
|
|
341
522
|
config.store_class = Slack::RealTime::Stores::Starter
|
|
342
523
|
end
|
|
343
524
|
end
|
|
525
|
+
|
|
344
526
|
describe '#initialize' do
|
|
345
527
|
it 'can be overriden explicitly' do
|
|
346
|
-
client =
|
|
528
|
+
client = described_class.new(store_class: Slack::RealTime::Store)
|
|
347
529
|
expect(client.send(:store_class)).to eq Slack::RealTime::Store
|
|
348
530
|
end
|
|
349
531
|
it 'sets store_class' do
|
|
@@ -351,11 +533,13 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
351
533
|
end
|
|
352
534
|
context 'start!' do
|
|
353
535
|
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
536
|
+
|
|
354
537
|
before do
|
|
355
538
|
allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
|
|
356
539
|
allow(socket).to receive(:connect!)
|
|
357
540
|
allow(socket).to receive(:start_sync)
|
|
358
541
|
end
|
|
542
|
+
|
|
359
543
|
it 'instantiates the correct store class', vcr: { cassette_name: 'web/rtm_connect' } do
|
|
360
544
|
client.start!
|
|
361
545
|
expect(client.store).to be_a Slack::RealTime::Stores::Starter
|
|
@@ -363,20 +547,24 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
363
547
|
end
|
|
364
548
|
end
|
|
365
549
|
end
|
|
550
|
+
|
|
366
551
|
context 'store' do
|
|
367
552
|
before do
|
|
368
|
-
|
|
553
|
+
described_class.configure do |config|
|
|
369
554
|
config.store_class = Slack::RealTime::Stores::Store
|
|
370
555
|
end
|
|
371
556
|
end
|
|
557
|
+
|
|
372
558
|
describe '#initialize' do
|
|
373
559
|
context 'start!' do
|
|
374
560
|
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
561
|
+
|
|
375
562
|
before do
|
|
376
563
|
allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
|
|
377
564
|
allow(socket).to receive(:connect!)
|
|
378
565
|
allow(socket).to receive(:start_sync)
|
|
379
566
|
end
|
|
567
|
+
|
|
380
568
|
it 'calls rtm_start and not rtm_connect', vcr: { cassette_name: 'web/rtm_start' } do
|
|
381
569
|
expect(client.web_client).to receive(:rtm_start).and_call_original
|
|
382
570
|
client.start!
|
|
@@ -385,18 +573,20 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
385
573
|
end
|
|
386
574
|
end
|
|
387
575
|
end
|
|
576
|
+
|
|
388
577
|
context 'start_method' do
|
|
389
578
|
describe '#initialize' do
|
|
390
579
|
it 'can be overriden explicitly' do
|
|
391
|
-
client =
|
|
580
|
+
client = described_class.new(start_method: :overriden)
|
|
392
581
|
expect(client.send(:start_method)).to eq :overriden
|
|
393
582
|
end
|
|
394
583
|
context 'with start_method' do
|
|
395
584
|
before do
|
|
396
|
-
|
|
585
|
+
described_class.configure do |config|
|
|
397
586
|
config.start_method = :overriden
|
|
398
587
|
end
|
|
399
588
|
end
|
|
589
|
+
|
|
400
590
|
it 'sets start_method' do
|
|
401
591
|
expect(client.send(:start_method)).to eq :overriden
|
|
402
592
|
end
|
|
@@ -407,14 +597,18 @@ RSpec.describe Slack::RealTime::Client do
|
|
|
407
597
|
end.to raise_error RuntimeError, 'overriden'
|
|
408
598
|
end
|
|
409
599
|
end
|
|
600
|
+
|
|
410
601
|
context 'start!' do
|
|
411
602
|
let(:socket) { double(Slack::RealTime::Socket, connected?: true) }
|
|
603
|
+
|
|
412
604
|
before do
|
|
413
605
|
allow(Slack::RealTime::Socket).to receive(:new).and_return(socket)
|
|
414
606
|
allow(socket).to receive(:connect!)
|
|
415
607
|
allow(socket).to receive(:start_sync)
|
|
416
608
|
end
|
|
417
|
-
|
|
609
|
+
|
|
610
|
+
it 'defaults to :rtm_start when using full store',
|
|
611
|
+
vcr: { cassette_name: 'web/rtm_start' } do
|
|
418
612
|
expect(client.web_client).to receive(:rtm_start).and_call_original
|
|
419
613
|
client.start!
|
|
420
614
|
end
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
1
2
|
require 'spec_helper'
|
|
2
3
|
|
|
3
4
|
RSpec.shared_examples_for 'a realtime socket' do
|
|
@@ -9,6 +10,7 @@ RSpec.shared_examples_for 'a realtime socket' do
|
|
|
9
10
|
expect(socket.url).to eq url
|
|
10
11
|
end
|
|
11
12
|
end
|
|
13
|
+
|
|
12
14
|
describe 'api' do
|
|
13
15
|
%i[start_sync start_sync disconnect! connect! connected? send_data close].each do |m|
|
|
14
16
|
it m do
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
RSpec.describe 'with CONCURRENCY', skip: ( # rubocop:disable RSpec/DescribeClass
|
|
5
|
+
(!ENV['CONCURRENCY']) && 'missing CONCURRENCY'
|
|
6
|
+
) do
|
|
7
|
+
it 'detects concurrency' do
|
|
8
|
+
expect(Slack::RealTime::Config.concurrency).to eq Slack::RealTime::Concurrency::Async
|
|
9
|
+
end
|
|
10
|
+
end
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require 'spec_helper'
|
|
3
|
+
|
|
4
|
+
RSpec.describe 'without CONCURRENCY', skip: ( # rubocop:disable RSpec/DescribeClass
|
|
5
|
+
(ENV['CONCURRENCY']) && 'CONCURRENCY is set'
|
|
6
|
+
) do
|
|
7
|
+
it 'raises NoConcurrencyError' do
|
|
8
|
+
expect { Slack::RealTime::Config.concurrency }.to raise_error Slack::RealTime::Config::NoConcurrencyError
|
|
9
|
+
end
|
|
10
|
+
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
|
|
@@ -5,7 +6,7 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
|
|
|
5
6
|
|
|
6
7
|
context 'bot' do
|
|
7
8
|
it 'sets bot data on rtm.start' do
|
|
8
|
-
expect(client.bots.count).to eq
|
|
9
|
+
expect(client.bots.count).to eq 83
|
|
9
10
|
end
|
|
10
11
|
it 'bot_added' do
|
|
11
12
|
expect do
|
|
@@ -36,7 +37,7 @@ RSpec.describe Slack::RealTime::Client, vcr: { cassette_name: 'web/rtm_start' }
|
|
|
36
37
|
}
|
|
37
38
|
)
|
|
38
39
|
client.send(:dispatch, event)
|
|
39
|
-
end.
|
|
40
|
+
end.not_to change(client.bots, :count)
|
|
40
41
|
bot = client.bots['B0751JU2H']
|
|
41
42
|
expect(bot['name']).to eq 'hugbot'
|
|
42
43
|
end
|