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:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-05-17 19:05:49 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-05-17 19:05:49 +0300
commit43a25d93ebdabea52f99b05e15b06250cd8f07d7 (patch)
treedceebdc68925362117480a5d672bcff122fb625b /spec/models/slack_integration_spec.rb
parent20c84b99005abd1c82101dfeff264ac50d2df211 (diff)
Add latest changes from gitlab-org/gitlab@16-0-stable-eev16.0.0-rc42
Diffstat (limited to 'spec/models/slack_integration_spec.rb')
-rw-r--r--spec/models/slack_integration_spec.rb147
1 files changed, 147 insertions, 0 deletions
diff --git a/spec/models/slack_integration_spec.rb b/spec/models/slack_integration_spec.rb
new file mode 100644
index 00000000000..41beeee598c
--- /dev/null
+++ b/spec/models/slack_integration_spec.rb
@@ -0,0 +1,147 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+
+RSpec.describe SlackIntegration, feature_category: :integrations do
+ describe "Associations" do
+ it { is_expected.to belong_to(:integration) }
+ end
+
+ describe 'authorized_scope_names' do
+ subject(:slack_integration) { create(:slack_integration) }
+
+ it 'accepts assignment to nil' do
+ slack_integration.update!(authorized_scope_names: nil)
+
+ expect(slack_integration.authorized_scope_names).to be_empty
+ end
+
+ it 'accepts assignment to a string' do
+ slack_integration.update!(authorized_scope_names: 'foo')
+
+ expect(slack_integration.authorized_scope_names).to contain_exactly('foo')
+ end
+
+ it 'accepts assignment to an array of strings' do
+ slack_integration.update!(authorized_scope_names: %w[foo bar])
+
+ expect(slack_integration.authorized_scope_names).to contain_exactly('foo', 'bar')
+ end
+
+ it 'accepts assignment to a comma-separated string' do
+ slack_integration.update!(authorized_scope_names: 'foo,bar')
+
+ expect(slack_integration.authorized_scope_names).to contain_exactly('foo', 'bar')
+ end
+
+ it 'strips white-space' do
+ slack_integration.update!(authorized_scope_names: 'foo , bar,baz')
+
+ expect(slack_integration.authorized_scope_names).to contain_exactly('foo', 'bar', 'baz')
+ end
+ end
+
+ describe 'all_features_supported?/upgrade_needed?' do
+ subject(:slack_integration) { create(:slack_integration) }
+
+ context 'with enough scopes' do
+ before do
+ slack_integration.update!(authorized_scope_names: %w[chat:write.public chat:write commands])
+ end
+
+ it { is_expected.to be_all_features_supported }
+ it { is_expected.not_to be_upgrade_needed }
+ end
+
+ %w[chat:write.public chat:write].each do |scope_name|
+ context "without #{scope_name}" do
+ before do
+ scopes = %w[chat:write.public chat:write] - [scope_name]
+ slack_integration.update!(authorized_scope_names: scopes)
+ end
+
+ it { is_expected.not_to be_all_features_supported }
+ it { is_expected.to be_upgrade_needed }
+ end
+ end
+ end
+
+ describe 'feature_available?' do
+ subject(:slack_integration) { create(:slack_integration) }
+
+ context 'without any scopes' do
+ it 'is always true for :commands' do
+ expect(slack_integration).to be_feature_available(:commands)
+ end
+
+ it 'is always false for others' do
+ expect(slack_integration).not_to be_feature_available(:notifications)
+ expect(slack_integration).not_to be_feature_available(:foo)
+ end
+ end
+
+ context 'with enough scopes for notifications' do
+ before do
+ slack_integration.update!(authorized_scope_names: %w[chat:write.public chat:write foo])
+ end
+
+ it 'only has the correct features' do
+ expect(slack_integration).to be_feature_available(:commands)
+ expect(slack_integration).to be_feature_available(:notifications)
+ expect(slack_integration).not_to be_feature_available(:foo)
+ end
+ end
+
+ context 'with enough scopes for commands' do
+ before do
+ slack_integration.update!(authorized_scope_names: %w[commands foo])
+ end
+
+ it 'only has the correct features' do
+ expect(slack_integration).to be_feature_available(:commands)
+ expect(slack_integration).not_to be_feature_available(:notifications)
+ expect(slack_integration).not_to be_feature_available(:foo)
+ end
+ end
+
+ context 'with all scopes' do
+ before do
+ slack_integration.update!(authorized_scope_names: %w[commands chat:write chat:write.public])
+ end
+
+ it 'only has the correct features' do
+ expect(slack_integration).to be_feature_available(:commands)
+ expect(slack_integration).to be_feature_available(:notifications)
+ expect(slack_integration).not_to be_feature_available(:foo)
+ end
+ end
+ end
+
+ describe 'Scopes' do
+ let_it_be(:slack_integration) { create(:slack_integration) }
+ let_it_be(:legacy_slack_integration) { create(:slack_integration, :legacy) }
+
+ describe '#with_bot' do
+ it 'returns records with bot data' do
+ expect(described_class.with_bot).to contain_exactly(slack_integration)
+ end
+ end
+
+ describe '#by_team' do
+ it 'returns records with shared team_id' do
+ team_id = slack_integration.team_id
+ team_slack_integration = create(:slack_integration, team_id: team_id)
+
+ expect(described_class.by_team(team_id)).to contain_exactly(slack_integration, team_slack_integration)
+ end
+ end
+ end
+
+ describe 'Validations' do
+ it { is_expected.to validate_presence_of(:team_id) }
+ it { is_expected.to validate_presence_of(:team_name) }
+ it { is_expected.to validate_presence_of(:alias) }
+ it { is_expected.to validate_presence_of(:user_id) }
+ it { is_expected.to validate_presence_of(:integration) }
+ end
+end