Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'spec/lib/slack/manifest_spec.rb')
-rw-r--r--spec/lib/slack/manifest_spec.rb99
1 files changed, 99 insertions, 0 deletions
diff --git a/spec/lib/slack/manifest_spec.rb b/spec/lib/slack/manifest_spec.rb
new file mode 100644
index 00000000000..d4fdea80ff5
--- /dev/null
+++ b/spec/lib/slack/manifest_spec.rb
@@ -0,0 +1,99 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe Slack::Manifest, feature_category: :integrations do
+ describe '.to_h' do
+ it 'creates the correct manifest' do
+ expect(described_class.to_h).to eq({
+ display_information: {
+ name: "GitLab (#{Gitlab.config.gitlab.host})",
+ description: s_('SlackIntegration|Interact with GitLab without leaving your Slack workspace!'),
+ background_color: '#171321',
+ long_description: "Generated for #{Gitlab.config.gitlab.host} by GitLab #{Gitlab::VERSION}.\r\n\r\n" \
+ "- *Notifications:* Get notifications to your team's Slack channel about events " \
+ "happening inside your GitLab projects.\r\n\r\n- *Slash commands:* Quickly open, " \
+ 'access, or close issues from Slack using the `/gitlab` command. Streamline your ' \
+ 'GitLab deployments with ChatOps.'
+ },
+ features: {
+ app_home: {
+ home_tab_enabled: true,
+ messages_tab_enabled: false,
+ messages_tab_read_only_enabled: true
+ },
+ bot_user: {
+ display_name: 'GitLab',
+ always_online: true
+ },
+ slash_commands: [
+ {
+ command: '/gitlab',
+ url: "#{Gitlab.config.gitlab.url}/api/v4/slack/trigger",
+ description: 'GitLab slash commands',
+ usage_hint: 'your-project-name-or-alias command',
+ should_escape: false
+ }
+ ]
+ },
+ oauth_config: {
+ redirect_urls: [
+ Gitlab.config.gitlab.url
+ ],
+ scopes: {
+ bot: %w[
+ commands
+ chat:write
+ chat:write.public
+ ]
+ }
+ },
+ settings: {
+ event_subscriptions: {
+ request_url: "#{Gitlab.config.gitlab.url}/api/v4/integrations/slack/events",
+ bot_events: %w[
+ app_home_opened
+ ]
+ },
+ interactivity: {
+ is_enabled: true,
+ request_url: "#{Gitlab.config.gitlab.url}/api/v4/integrations/slack/interactions",
+ message_menu_options_url: "#{Gitlab.config.gitlab.url}/api/v4/integrations/slack/options"
+ },
+ org_deploy_enabled: false,
+ socket_mode_enabled: false,
+ token_rotation_enabled: false
+ }
+ })
+ end
+ end
+
+ describe '.to_json' do
+ subject(:to_json) { described_class.to_json }
+
+ shared_examples 'a manifest that matches the JSON schema' do
+ # JSON schema file downloaded from
+ # https://raw.githubusercontent.com/slackapi/manifest-schema/v0.0.0/schemas/manifest.schema.2.0.0.json
+ # via https://github.com/slackapi/manifest-schema.
+ it { is_expected.to match_schema('slack/manifest') }
+ end
+
+ it_behaves_like 'a manifest that matches the JSON schema'
+
+ context 'when the host name is very long' do
+ before do
+ allow(Gitlab.config.gitlab).to receive(:host).and_return('abc' * 20)
+ end
+
+ it_behaves_like 'a manifest that matches the JSON schema'
+ end
+ end
+
+ describe '.share_url' do
+ it 'URI encodes the manifest' do
+ allow(described_class).to receive(:to_h).and_return({ foo: 'bar' })
+
+ expect(described_class.share_url).to eq('https://api.slack.com/apps?new_app=1&manifest_json=%7B%22foo%22%3A%22bar%22%7D')
+ end
+ end
+end