diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2023-05-17 19:05:49 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2023-05-17 19:05:49 +0300 |
commit | 43a25d93ebdabea52f99b05e15b06250cd8f07d7 (patch) | |
tree | dceebdc68925362117480a5d672bcff122fb625b /spec/models/slack_integration_spec.rb | |
parent | 20c84b99005abd1c82101dfeff264ac50d2df211 (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.rb | 147 |
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 |