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/migrations/deduplicate_inactive_alert_integrations_spec.rb')
-rw-r--r--spec/migrations/deduplicate_inactive_alert_integrations_spec.rb71
1 files changed, 71 insertions, 0 deletions
diff --git a/spec/migrations/deduplicate_inactive_alert_integrations_spec.rb b/spec/migrations/deduplicate_inactive_alert_integrations_spec.rb
new file mode 100644
index 00000000000..7f963a9bd0a
--- /dev/null
+++ b/spec/migrations/deduplicate_inactive_alert_integrations_spec.rb
@@ -0,0 +1,71 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require_migration!
+
+RSpec.describe DeduplicateInactiveAlertIntegrations, feature_category: :incident_management do
+ let!(:namespace_class) { table(:namespaces) }
+ let!(:project_class) { table(:projects) }
+ let!(:integration_class) { table(:alert_management_http_integrations) }
+
+ let!(:namespace_0) { namespace_class.create!(name: 'namespace1', path: 'namespace1') }
+ let!(:namespace_1) { namespace_class.create!(name: 'namespace2', path: 'namespace2') }
+ let!(:namespace_2) { namespace_class.create!(name: 'namespace3', path: 'namespace3') }
+
+ let!(:project_with_inactive_duplicate) { create_project(namespace_0, namespace_0) }
+ let!(:project_with_multiple_duplicates) { create_project(namespace_0, namespace_1) }
+ let!(:project_without_duplicates) { create_project(namespace_0, namespace_2) }
+
+ let!(:integrations) do
+ [
+ create_integration(project_with_inactive_duplicate, 'default'),
+ create_integration(project_with_inactive_duplicate, 'other'),
+ create_integration(project_with_inactive_duplicate, 'other', active: false),
+ create_integration(project_with_multiple_duplicates, 'default', active: false),
+ create_integration(project_with_multiple_duplicates, 'default', active: false),
+ create_integration(project_with_multiple_duplicates, 'other', active: false),
+ create_integration(project_with_multiple_duplicates, 'other'),
+ create_integration(project_without_duplicates, 'default'),
+ create_integration(project_without_duplicates, 'other', active: false)
+ ]
+ end
+
+ describe '#up' do
+ it 'updates the endpoint identifier of duplicate inactive integrations' do
+ expect { migrate! }
+ .to not_change { integrations[0].reload }
+ .and not_change { integrations[1].reload }
+ .and not_change { integrations[6].reload }
+ .and not_change { integrations[7].reload }
+ .and not_change { integrations[8].reload }
+
+ expect { integrations[2].reload }.to raise_error(ActiveRecord::RecordNotFound)
+ expect { integrations[3].reload }.to raise_error(ActiveRecord::RecordNotFound)
+ expect { integrations[4].reload }.to raise_error(ActiveRecord::RecordNotFound)
+ expect { integrations[5].reload }.to raise_error(ActiveRecord::RecordNotFound)
+
+ endpoints = integration_class.pluck(:endpoint_identifier, :project_id)
+ expect(endpoints.uniq).to match_array(endpoints)
+ end
+ end
+
+ private
+
+ def create_integration(project, endpoint_identifier, active: true)
+ integration_class.create!(
+ project_id: project.id,
+ endpoint_identifier: endpoint_identifier,
+ active: active,
+ encrypted_token_iv: 'iv',
+ encrypted_token: 'token',
+ name: "HTTP Integration - #{endpoint_identifier}"
+ )
+ end
+
+ def create_project(namespace, project_namespace)
+ project_class.create!(
+ namespace_id: namespace.id,
+ project_namespace_id: project_namespace.id
+ )
+ end
+end