diff --git a/.rubocop_todo/gitlab/namespaced_class.yml b/.rubocop_todo/gitlab/namespaced_class.yml index 0ec0bc6686974674f54bf7f1a3499fad73d96f39..4f5d5ab3a80dce62562d0f01f294f8f4e6cc3b71 100644 --- a/.rubocop_todo/gitlab/namespaced_class.yml +++ b/.rubocop_todo/gitlab/namespaced_class.yml @@ -307,6 +307,7 @@ Gitlab/NamespacedClass: - 'app/models/service_desk_setting.rb' - 'app/models/service_list.rb' - 'app/models/shard.rb' + - 'app/models/slack_integration.rb' - 'app/models/snippet.rb' - 'app/models/snippet_blob.rb' - 'app/models/snippet_input_action.rb' @@ -938,7 +939,6 @@ Gitlab/NamespacedClass: - 'ee/app/models/scim_identity.rb' - 'ee/app/models/scim_oauth_access_token.rb' - 'ee/app/models/scoped_label_set.rb' - - 'ee/app/models/slack_integration.rb' - 'ee/app/models/smartcard_identity.rb' - 'ee/app/models/software_license.rb' - 'ee/app/models/software_license_policy.rb' diff --git a/.rubocop_todo/layout/argument_alignment.yml b/.rubocop_todo/layout/argument_alignment.yml index 4fda4e8f2b6b0daa119e527afd73e66679305b1f..b39f2181ceea6d0f7e6ba78db523932640fa146a 100644 --- a/.rubocop_todo/layout/argument_alignment.yml +++ b/.rubocop_todo/layout/argument_alignment.yml @@ -1118,7 +1118,6 @@ Layout/ArgumentAlignment: - 'ee/app/models/scim_identity.rb' - 'ee/app/models/security/finding.rb' - 'ee/app/models/security/orchestration_policy_rule_schedule.rb' - - 'ee/app/models/slack_integration.rb' - 'ee/app/models/smartcard_identity.rb' - 'ee/app/models/status_page/project_setting.rb' - 'ee/app/models/vulnerabilities/external_issue_link.rb' diff --git a/.rubocop_todo/layout/space_in_lambda_literal.yml b/.rubocop_todo/layout/space_in_lambda_literal.yml index 144b4eb04a7969da044fa620c2846a6a9e0423c1..7c914f47443d70410dad73e3c1efc587458175ed 100644 --- a/.rubocop_todo/layout/space_in_lambda_literal.yml +++ b/.rubocop_todo/layout/space_in_lambda_literal.yml @@ -233,7 +233,6 @@ Layout/SpaceInLambdaLiteral: - 'ee/app/models/security/scan.rb' - 'ee/app/models/security/training.rb' - 'ee/app/models/security/training_provider.rb' - - 'ee/app/models/slack_integration.rb' - 'ee/app/models/software_license.rb' - 'ee/app/models/software_license_policy.rb' - 'ee/app/models/vulnerabilities/external_issue_link.rb' diff --git a/.rubocop_todo/lint/unused_block_argument.yml b/.rubocop_todo/lint/unused_block_argument.yml index a70c3823c1dbb4a31099def9061bc87bfaacdee3..f4c0ddf38cf801f93b69636492e8b5d5bdbf34d6 100644 --- a/.rubocop_todo/lint/unused_block_argument.yml +++ b/.rubocop_todo/lint/unused_block_argument.yml @@ -135,7 +135,6 @@ Lint/UnusedBlockArgument: - 'ee/spec/factories/projects.rb' - 'ee/spec/factories/protected_branches.rb' - 'ee/spec/factories/protected_environments.rb' - - 'ee/spec/factories/slack_integrations.rb' - 'ee/spec/factories/users.rb' - 'ee/spec/features/groups/group_settings_spec.rb' - 'ee/spec/graphql/mutations/dast/profiles/update_spec.rb' diff --git a/.rubocop_todo/rails/inverse_of.yml b/.rubocop_todo/rails/inverse_of.yml index de45a47fed6c1f8a2148162dc2116e2bae6bc409..412d28a11da7a35f433eee6029d8b78a7d9c5abe 100644 --- a/.rubocop_todo/rails/inverse_of.yml +++ b/.rubocop_todo/rails/inverse_of.yml @@ -76,7 +76,6 @@ Rails/InverseOf: - 'ee/app/models/incident_management/escalation_rule.rb' - 'ee/app/models/incident_management/oncall_participant.rb' - 'ee/app/models/insight.rb' - - 'ee/app/models/integrations/gitlab_slack_application.rb' - 'ee/app/models/iteration.rb' - 'ee/app/models/requirements_management/requirement.rb' - 'ee/app/models/requirements_management/test_report.rb' diff --git a/.rubocop_todo/rspec/missing_feature_category.yml b/.rubocop_todo/rspec/missing_feature_category.yml index 6fa47e8788fba50c3f12b258d23a1be4ccf62799..150eb5cc9294252c582aa8aeab595399933cd173 100644 --- a/.rubocop_todo/rspec/missing_feature_category.yml +++ b/.rubocop_todo/rspec/missing_feature_category.yml @@ -1036,7 +1036,6 @@ RSpec/MissingFeatureCategory: - 'ee/spec/lib/quality/seeders/vulnerabilities_spec.rb' - 'ee/spec/lib/sidebars/groups/menus/analytics_menu_spec.rb' - 'ee/spec/lib/sidebars/groups/menus/security_compliance_menu_spec.rb' - - 'ee/spec/lib/slack/api_spec.rb' - 'ee/spec/lib/slack/block_kit/app_home_opened_spec.rb' - 'ee/spec/lib/slack/block_kit/incident_management/incident_modal_opened_spec.rb' - 'ee/spec/lib/system_check/app/search_check_spec.rb' diff --git a/.rubocop_todo/style/numbered_parameters.yml b/.rubocop_todo/style/numbered_parameters.yml index 3251cc0bcad1d5f61eaa1eb84cf78e561843013e..aa3df93ab8f7724f9ee066406aeb2334e15921d8 100644 --- a/.rubocop_todo/style/numbered_parameters.yml +++ b/.rubocop_todo/style/numbered_parameters.yml @@ -25,7 +25,6 @@ Style/NumberedParameters: - 'app/services/web_hooks/log_execution_service.rb' - 'ee/app/models/ee/project.rb' - 'ee/app/models/security/finding.rb' - - 'ee/app/models/slack_integration.rb' - 'ee/app/models/vulnerabilities/feedback.rb' - 'ee/app/services/security/ingestion/tasks/hooks_execution.rb' - 'ee/app/services/security/ingestion/tasks/ingest_remediations.rb' diff --git a/ee/app/models/integrations/gitlab_slack_application.rb b/app/models/integrations/gitlab_slack_application.rb similarity index 98% rename from ee/app/models/integrations/gitlab_slack_application.rb rename to app/models/integrations/gitlab_slack_application.rb index 006b6ee456ab1b64bf85af3de507a0d74b00bf69..b0f54f39e8cf3f937fb55949a17dbabad4e1fab6 100644 --- a/ee/app/models/integrations/gitlab_slack_application.rb +++ b/app/models/integrations/gitlab_slack_application.rb @@ -17,7 +17,7 @@ class GitlabSlackApplication < BaseSlackNotification attribute :vulnerability_events, default: false attribute :wiki_page_events, default: false - has_one :slack_integration, foreign_key: :integration_id + has_one :slack_integration, foreign_key: :integration_id, inverse_of: :integration delegate :bot_access_token, :bot_user_id, to: :slack_integration, allow_nil: true def update_active_status diff --git a/ee/app/models/integrations/slack_workspace/api_scope.rb b/app/models/integrations/slack_workspace/api_scope.rb similarity index 100% rename from ee/app/models/integrations/slack_workspace/api_scope.rb rename to app/models/integrations/slack_workspace/api_scope.rb diff --git a/ee/app/models/integrations/slack_workspace/integration_api_scope.rb b/app/models/integrations/slack_workspace/integration_api_scope.rb similarity index 100% rename from ee/app/models/integrations/slack_workspace/integration_api_scope.rb rename to app/models/integrations/slack_workspace/integration_api_scope.rb diff --git a/ee/app/models/slack_integration.rb b/app/models/slack_integration.rb similarity index 86% rename from ee/app/models/slack_integration.rb rename to app/models/slack_integration.rb index 390100deebfa4e324c61a0ad3764121de1e25078..22e911aeacd32d611eb3645fb9a2acba087f7aa0 100644 --- a/ee/app/models/slack_integration.rb +++ b/app/models/slack_integration.rb @@ -31,13 +31,13 @@ class SlackIntegration < ApplicationRecord through: :slack_integrations_scopes scope :with_bot, -> { where.not(bot_user_id: nil) } - scope :by_team, -> (team_id) { where(team_id: team_id) } + scope :by_team, ->(team_id) { where(team_id: team_id) } validates :team_id, presence: true validates :team_name, presence: true validates :alias, presence: true, - uniqueness: { scope: :team_id, message: 'This alias has already been taken' }, - length: 2..4096 + uniqueness: { scope: :team_id, message: 'This alias has already been taken' }, + length: 2..4096 validates :user_id, presence: true validates :integration, presence: true @@ -65,11 +65,11 @@ def upgrade_needed? end def all_features_supported? - ALL_FEATURES.all? { feature_available?(_1) } # rubocop: disable Gitlab/FeatureAvailableUsage + ALL_FEATURES.all? { |feature| feature_available?(feature) } # rubocop: disable Gitlab/FeatureAvailableUsage end def authorized_scope_names=(names) - names = Array.wrap(names).flat_map { _1.split(',') }.map(&:strip) + names = Array.wrap(names).flat_map { |name| name.split(',') }.map(&:strip) scopes = ::Integrations::SlackWorkspace::ApiScope.find_or_initialize_by_names(names) self.slack_api_scopes = scopes diff --git a/ee/spec/factories/integrations.rb b/ee/spec/factories/integrations.rb index 37c9e149df12aade385dfd399f4bcd13973509d4..ee13feafc66654c62cd7ebec51268f302b3c63b2 100644 --- a/ee/spec/factories/integrations.rb +++ b/ee/spec/factories/integrations.rb @@ -1,29 +1,6 @@ # frozen_string_literal: true FactoryBot.define do - factory :gitlab_slack_application_integration, class: 'Integrations::GitlabSlackApplication' do - project - active { true } - type { 'Integrations::GitlabSlackApplication' } - slack_integration { association :slack_integration, integration: instance } - - transient do - all_channels { true } - end - - after(:build) do |integration, evaluator| - next unless evaluator.all_channels - - integration.event_channel_names.each do |name| - integration.send("#{name}=".to_sym, "##{name}") - end - end - - trait :all_features_supported do - slack_integration { association :slack_integration, :all_features_supported, integration: instance } - end - end - factory :github_integration, class: 'Integrations::Github' do project type { 'Integrations::Github' } diff --git a/ee/lib/slack/api.rb b/lib/slack/api.rb similarity index 100% rename from ee/lib/slack/api.rb rename to lib/slack/api.rb diff --git a/spec/factories/integrations.rb b/spec/factories/integrations.rb index d765e5562b6915738b261ef10455d412ff8ce1f6..0b940c552e57dc03b7dec099a599f495a4e4ba2b 100644 --- a/spec/factories/integrations.rb +++ b/spec/factories/integrations.rb @@ -43,6 +43,29 @@ end end + factory :gitlab_slack_application_integration, class: 'Integrations::GitlabSlackApplication' do + project + active { true } + type { 'Integrations::GitlabSlackApplication' } + slack_integration { association :slack_integration, integration: instance } + + transient do + all_channels { true } + end + + after(:build) do |integration, evaluator| + next unless evaluator.all_channels + + integration.event_channel_names.each do |name| + integration.send("#{name}=".to_sym, "##{name}") + end + end + + trait :all_features_supported do + slack_integration { association :slack_integration, :all_features_supported, integration: instance } + end + end + factory :packagist_integration, class: 'Integrations::Packagist' do project type { 'Integrations::Packagist' } diff --git a/ee/spec/factories/slack_integrations.rb b/spec/factories/slack_integrations.rb similarity index 93% rename from ee/spec/factories/slack_integrations.rb rename to spec/factories/slack_integrations.rb index bffafa644a9ebb00598d6689646132eaa0b38432..a43ba8e7453f13fced4e3296752377da589cd5f1 100644 --- a/ee/spec/factories/slack_integrations.rb +++ b/spec/factories/slack_integrations.rb @@ -17,7 +17,7 @@ end trait :all_features_supported do - after(:build) do |slack_integration, evaluator| + after(:build) do |slack_integration, _evaluator| slack_integration.authorized_scope_names = %w[commands chat:write chat:write.public] end end diff --git a/ee/spec/lib/slack/api_spec.rb b/spec/lib/slack/api_spec.rb similarity index 94% rename from ee/spec/lib/slack/api_spec.rb rename to spec/lib/slack/api_spec.rb index 29b6a055bd3f81f06af02de3830d103828ec1782..360e02841640ad793b53a28b75e7f6ec0ee4ff53 100644 --- a/ee/spec/lib/slack/api_spec.rb +++ b/spec/lib/slack/api_spec.rb @@ -2,7 +2,7 @@ require 'spec_helper' -RSpec.describe Slack::API do +RSpec.describe Slack::API, feature_category: :integrations do describe '#post' do let(:slack_installation) { build(:slack_integration) } let(:api_method) { 'api_method_call' } diff --git a/ee/spec/models/integrations/gitlab_slack_application_spec.rb b/spec/models/integrations/gitlab_slack_application_spec.rb similarity index 100% rename from ee/spec/models/integrations/gitlab_slack_application_spec.rb rename to spec/models/integrations/gitlab_slack_application_spec.rb diff --git a/ee/spec/models/integrations/slack_workspace/api_scope_spec.rb b/spec/models/integrations/slack_workspace/api_scope_spec.rb similarity index 100% rename from ee/spec/models/integrations/slack_workspace/api_scope_spec.rb rename to spec/models/integrations/slack_workspace/api_scope_spec.rb diff --git a/ee/spec/models/slack_integration_spec.rb b/spec/models/slack_integration_spec.rb similarity index 100% rename from ee/spec/models/slack_integration_spec.rb rename to spec/models/slack_integration_spec.rb