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
path: root/spec
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2023-08-02 15:10:59 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2023-08-02 15:10:59 +0300
commit7069eb1ee6cd6af1fa769df5a1175dffc4e3ddb1 (patch)
tree9656bb7b020ab8b8dc60cdcc7975b0ecfb20a0eb /spec
parenta1131ca818b35bf982bb157d767c87ef3fc3819b (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'spec')
-rw-r--r--spec/factories/namespace_package_settings.rb3
-rw-r--r--spec/features/issues/user_edits_issue_spec.rb2
-rw-r--r--spec/graphql/mutations/namespace/package_settings/update_spec.rb18
-rw-r--r--spec/graphql/types/namespace/package_settings_type_spec.rb2
-rw-r--r--spec/lib/gitlab/metrics/dashboard/finder_spec.rb2
-rw-r--r--spec/lib/gitlab/metrics/dashboard/service_selector_spec.rb14
-rw-r--r--spec/models/namespace/aggregation_schedule_spec.rb18
-rw-r--r--spec/models/namespace/package_setting_spec.rb23
-rw-r--r--spec/requests/api/graphql/mutations/namespace/package_settings/update_spec.rb30
-rw-r--r--spec/services/metrics/dashboard/custom_metric_embed_service_spec.rb147
-rw-r--r--spec/services/namespaces/package_settings/update_service_spec.rb6
-rw-r--r--spec/support/shared_examples/services/namespace_package_settings_shared_examples.rb4
-rw-r--r--spec/tooling/danger/required_stops_spec.rb98
13 files changed, 179 insertions, 188 deletions
diff --git a/spec/factories/namespace_package_settings.rb b/spec/factories/namespace_package_settings.rb
index 042808f042f..9d794e794a4 100644
--- a/spec/factories/namespace_package_settings.rb
+++ b/spec/factories/namespace_package_settings.rb
@@ -10,6 +10,9 @@ FactoryBot.define do
generic_duplicates_allowed { true }
generic_duplicate_exception_regex { 'foo' }
+ nuget_duplicates_allowed { true }
+ nuget_duplicate_exception_regex { 'foo' }
+
trait :group do
namespace { association(:group) }
end
diff --git a/spec/features/issues/user_edits_issue_spec.rb b/spec/features/issues/user_edits_issue_spec.rb
index 01781ceedc0..45d95db8ff1 100644
--- a/spec/features/issues/user_edits_issue_spec.rb
+++ b/spec/features/issues/user_edits_issue_spec.rb
@@ -146,7 +146,7 @@ RSpec.describe "Issues > User edits issue", :js, feature_category: :team_plannin
end
end
- describe 'update labels' do
+ describe 'update labels', quarantine: 'https://gitlab.com/gitlab-org/gitlab/-/issues/345229' do
it 'will not send ajax request when no data is changed' do
page.within '.labels' do
click_on 'Edit'
diff --git a/spec/graphql/mutations/namespace/package_settings/update_spec.rb b/spec/graphql/mutations/namespace/package_settings/update_spec.rb
index 576f514183f..b7f9eac3755 100644
--- a/spec/graphql/mutations/namespace/package_settings/update_spec.rb
+++ b/spec/graphql/mutations/namespace/package_settings/update_spec.rb
@@ -31,6 +31,8 @@ RSpec.describe Mutations::Namespace::PackageSettings::Update, feature_category:
maven_duplicate_exception_regex: 'SNAPSHOT',
generic_duplicates_allowed: true,
generic_duplicate_exception_regex: 'foo',
+ nuget_duplicates_allowed: true,
+ nuget_duplicate_exception_regex: 'foo',
maven_package_requests_forwarding: nil,
lock_maven_package_requests_forwarding: false,
npm_package_requests_forwarding: nil,
@@ -42,6 +44,8 @@ RSpec.describe Mutations::Namespace::PackageSettings::Update, feature_category:
maven_duplicate_exception_regex: 'RELEASE',
generic_duplicates_allowed: false,
generic_duplicate_exception_regex: 'bar',
+ nuget_duplicates_allowed: false,
+ nuget_duplicate_exception_regex: 'bar',
maven_package_requests_forwarding: true,
lock_maven_package_requests_forwarding: true,
npm_package_requests_forwarding: true,
@@ -69,6 +73,18 @@ RSpec.describe Mutations::Namespace::PackageSettings::Update, feature_category:
)
end
end
+
+ context 'when nuget_duplicates_option FF is disabled' do
+ let_it_be(:params) { { namespace_path: namespace.full_path, nuget_duplicates_allowed: false } }
+
+ before do
+ stub_feature_flags(nuget_duplicates_option: false)
+ end
+
+ it 'raises an error' do
+ expect { subject }.to raise_error(Gitlab::Graphql::Errors::ResourceNotAvailable, /feature flag is disabled/)
+ end
+ end
end
RSpec.shared_examples 'denying access to namespace package setting' do
@@ -95,6 +111,8 @@ RSpec.describe Mutations::Namespace::PackageSettings::Update, feature_category:
maven_duplicate_exception_regex: 'RELEASE',
generic_duplicates_allowed: false,
generic_duplicate_exception_regex: 'bar',
+ nuget_duplicates_allowed: false,
+ nuget_duplicate_exception_regex: 'bar',
maven_package_requests_forwarding: true,
lock_maven_package_requests_forwarding: true,
npm_package_requests_forwarding: true,
diff --git a/spec/graphql/types/namespace/package_settings_type_spec.rb b/spec/graphql/types/namespace/package_settings_type_spec.rb
index 40048b7dfa6..d823f2017b6 100644
--- a/spec/graphql/types/namespace/package_settings_type_spec.rb
+++ b/spec/graphql/types/namespace/package_settings_type_spec.rb
@@ -21,6 +21,8 @@ RSpec.describe GitlabSchema.types['PackageSettings'], feature_category: :package
maven_duplicate_exception_regex
generic_duplicates_allowed
generic_duplicate_exception_regex
+ nuget_duplicates_allowed
+ nuget_duplicate_exception_regex
maven_package_requests_forwarding
lock_maven_package_requests_forwarding
npm_package_requests_forwarding
diff --git a/spec/lib/gitlab/metrics/dashboard/finder_spec.rb b/spec/lib/gitlab/metrics/dashboard/finder_spec.rb
index 55eb60146dd..6fc9e05037c 100644
--- a/spec/lib/gitlab/metrics/dashboard/finder_spec.rb
+++ b/spec/lib/gitlab/metrics/dashboard/finder_spec.rb
@@ -60,8 +60,6 @@ RSpec.describe Gitlab::Metrics::Dashboard::Finder, :use_clean_rails_memory_store
}
end
- it_behaves_like 'misconfigured dashboard service response', :not_found
-
context 'when the metric exists' do
before do
create(:prometheus_metric, project: project)
diff --git a/spec/lib/gitlab/metrics/dashboard/service_selector_spec.rb b/spec/lib/gitlab/metrics/dashboard/service_selector_spec.rb
index dcaaa5873c8..b9ed89d9ee7 100644
--- a/spec/lib/gitlab/metrics/dashboard/service_selector_spec.rb
+++ b/spec/lib/gitlab/metrics/dashboard/service_selector_spec.rb
@@ -30,20 +30,6 @@ RSpec.describe Gitlab::Metrics::Dashboard::ServiceSelector do
it { is_expected.to be Metrics::Dashboard::DefaultEmbedService }
end
-
- context 'with a system dashboard and "custom" group' do
- let(:arguments) do
- {
- embedded: true,
- dashboard_path: system_dashboard_path,
- group: business_metric_title,
- title: 'Total Requests',
- y_label: 'req/sec'
- }
- end
-
- it { is_expected.to be Metrics::Dashboard::CustomMetricEmbedService }
- end
end
end
end
diff --git a/spec/models/namespace/aggregation_schedule_spec.rb b/spec/models/namespace/aggregation_schedule_spec.rb
index ea9dddf2513..c05344ff729 100644
--- a/spec/models/namespace/aggregation_schedule_spec.rb
+++ b/spec/models/namespace/aggregation_schedule_spec.rb
@@ -16,21 +16,11 @@ RSpec.describe Namespace::AggregationSchedule, :clean_gitlab_redis_shared_state,
aggregation_schedule.save!
end
- context 'when reduce_aggregation_schedule_lease FF is enabled' do
- it 'returns namespace_aggregation_schedule_lease_duration value from Gitlabsettings' do
- allow(::Gitlab::CurrentSettings).to receive(:namespace_aggregation_schedule_lease_duration_in_seconds)
- .and_return(240)
- stub_feature_flags(reduce_aggregation_schedule_lease: true)
+ it 'returns namespace_aggregation_schedule_lease_duration value from Gitlab CurrentSettings' do
+ allow(::Gitlab::CurrentSettings).to receive(:namespace_aggregation_schedule_lease_duration_in_seconds)
+ .and_return(240)
- expect(aggregation_schedule.default_lease_timeout).to eq 4.minutes.to_i
- end
- end
-
- context 'when reduce_aggregation_schedule_lease FF is disabled' do
- it 'is 30 minutes' do
- stub_feature_flags(reduce_aggregation_schedule_lease: false)
- expect(aggregation_schedule.default_lease_timeout).to eq 30.minutes.to_i
- end
+ expect(aggregation_schedule.default_lease_timeout).to eq 4.minutes.to_i
end
end
diff --git a/spec/models/namespace/package_setting_spec.rb b/spec/models/namespace/package_setting_spec.rb
index 9dfb58301b1..f3fda200fda 100644
--- a/spec/models/namespace/package_setting_spec.rb
+++ b/spec/models/namespace/package_setting_spec.rb
@@ -2,7 +2,7 @@
require 'spec_helper'
-RSpec.describe Namespace::PackageSetting do
+RSpec.describe Namespace::PackageSetting, feature_category: :package_registry do
describe 'relationships' do
it { is_expected.to belong_to(:namespace) }
end
@@ -15,6 +15,9 @@ RSpec.describe Namespace::PackageSetting do
it { is_expected.not_to allow_value(nil).for(:maven_duplicates_allowed) }
it { is_expected.to allow_value(true, false).for(:generic_duplicates_allowed) }
it { is_expected.not_to allow_value(nil).for(:generic_duplicates_allowed) }
+ it { is_expected.to allow_value(true).for(:nuget_duplicates_allowed) }
+ it { is_expected.to allow_value(false).for(:nuget_duplicates_allowed) }
+ it { is_expected.not_to allow_value(nil).for(:nuget_duplicates_allowed) }
end
describe 'regex values' do
@@ -25,7 +28,7 @@ RSpec.describe Namespace::PackageSetting do
valid_regexps = %w[SNAPSHOT .* v.+ v10.1.* (?:v.+|SNAPSHOT|TEMP)]
invalid_regexps = ['[', '(?:v.+|SNAPSHOT|TEMP']
- [:maven_duplicate_exception_regex, :generic_duplicate_exception_regex].each do |attribute|
+ %i[maven_duplicate_exception_regex generic_duplicate_exception_regex nuget_duplicate_exception_regex].each do |attribute|
valid_regexps.each do |valid_regexp|
it { is_expected.to allow_value(valid_regexp).for(attribute) }
end
@@ -44,18 +47,18 @@ RSpec.describe Namespace::PackageSetting do
context 'package types with package_settings' do
# As more package types gain settings they will be added to this list
- [:maven_package, :generic_package].each do |format|
+ %i[maven_package generic_package nuget_package].each do |format|
context "with package_type:#{format}" do
- let_it_be(:package) { create(format, name: 'foo', version: 'beta') } # rubocop:disable Rails/SaveBang
+ let_it_be(:package) { create(format, name: 'foo', version: '1.0.0-beta') }
let_it_be(:package_type) { package.package_type }
let_it_be(:package_setting) { package.project.namespace.package_settings }
where(:duplicates_allowed, :duplicate_exception_regex, :result) do
- true | '' | true
- false | '' | false
- false | '.*' | true
- false | 'fo.*' | true
- false | 'be.*' | true
+ true | '' | true
+ false | '' | false
+ false | '.*' | true
+ false | 'fo.*' | true
+ false | '.*be.*' | true
end
with_them do
@@ -75,7 +78,7 @@ RSpec.describe Namespace::PackageSetting do
end
context 'package types without package_settings' do
- [:npm_package, :conan_package, :nuget_package, :pypi_package, :composer_package, :golang_package, :debian_package].each do |format|
+ %i[npm_package conan_package pypi_package composer_package golang_package debian_package].each do |format|
context "with package_type:#{format}" do
let_it_be(:package) { create(format) } # rubocop:disable Rails/SaveBang
let_it_be(:package_setting) { package.project.namespace.package_settings }
diff --git a/spec/requests/api/graphql/mutations/namespace/package_settings/update_spec.rb b/spec/requests/api/graphql/mutations/namespace/package_settings/update_spec.rb
index 2f26a2f92b2..480e184a60c 100644
--- a/spec/requests/api/graphql/mutations/namespace/package_settings/update_spec.rb
+++ b/spec/requests/api/graphql/mutations/namespace/package_settings/update_spec.rb
@@ -15,6 +15,8 @@ RSpec.describe 'Updating the package settings', feature_category: :package_regis
maven_duplicate_exception_regex: 'foo-.*',
generic_duplicates_allowed: false,
generic_duplicate_exception_regex: 'bar-.*',
+ nuget_duplicates_allowed: false,
+ nuget_duplicate_exception_regex: 'bar-.*',
maven_package_requests_forwarding: true,
lock_maven_package_requests_forwarding: true,
npm_package_requests_forwarding: true,
@@ -32,6 +34,8 @@ RSpec.describe 'Updating the package settings', feature_category: :package_regis
mavenDuplicateExceptionRegex
genericDuplicatesAllowed
genericDuplicateExceptionRegex
+ nugetDuplicatesAllowed
+ nugetDuplicateExceptionRegex
mavenPackageRequestsForwarding
lockMavenPackageRequestsForwarding
npmPackageRequestsForwarding
@@ -58,6 +62,8 @@ RSpec.describe 'Updating the package settings', feature_category: :package_regis
expect(package_settings_response['mavenDuplicateExceptionRegex']).to eq(params[:maven_duplicate_exception_regex])
expect(package_settings_response['genericDuplicatesAllowed']).to eq(params[:generic_duplicates_allowed])
expect(package_settings_response['genericDuplicateExceptionRegex']).to eq(params[:generic_duplicate_exception_regex])
+ expect(package_settings_response['nugetDuplicatesAllowed']).to eq(params[:nuget_duplicates_allowed])
+ expect(package_settings_response['nugetDuplicateExceptionRegex']).to eq(params[:nuget_duplicate_exception_regex])
expect(package_settings_response['mavenPackageRequestsForwarding']).to eq(params[:maven_package_requests_forwarding])
expect(package_settings_response['lockMavenPackageRequestsForwarding']).to eq(params[:lock_maven_package_requests_forwarding])
expect(package_settings_response['pypiPackageRequestsForwarding']).to eq(params[:pypi_package_requests_forwarding])
@@ -98,6 +104,8 @@ RSpec.describe 'Updating the package settings', feature_category: :package_regis
maven_duplicate_exception_regex: 'SNAPSHOT',
generic_duplicates_allowed: true,
generic_duplicate_exception_regex: 'foo',
+ nuget_duplicates_allowed: true,
+ nuget_duplicate_exception_regex: 'foo',
maven_package_requests_forwarding: nil,
lock_maven_package_requests_forwarding: false,
npm_package_requests_forwarding: nil,
@@ -109,6 +117,8 @@ RSpec.describe 'Updating the package settings', feature_category: :package_regis
maven_duplicate_exception_regex: 'foo-.*',
generic_duplicates_allowed: false,
generic_duplicate_exception_regex: 'bar-.*',
+ nuget_duplicates_allowed: false,
+ nuget_duplicate_exception_regex: 'bar-.*',
maven_package_requests_forwarding: true,
lock_maven_package_requests_forwarding: true,
npm_package_requests_forwarding: true,
@@ -119,6 +129,26 @@ RSpec.describe 'Updating the package settings', feature_category: :package_regis
it_behaves_like 'returning a success'
it_behaves_like 'rejecting invalid regex'
+
+ context 'when nuget_duplicates_option FF is disabled' do
+ let(:params) do
+ {
+ namespace_path: namespace.full_path,
+ 'nugetDuplicatesAllowed' => false
+ }
+ end
+
+ before do
+ stub_feature_flags(nuget_duplicates_option: false)
+ end
+
+ it 'raises an error', :aggregate_failures do
+ subject
+
+ expect(graphql_errors.size).to eq(1)
+ expect(graphql_errors.first['message']).to include('feature flag is disabled')
+ end
+ end
end
RSpec.shared_examples 'accepting the mutation request creating the package settings' do
diff --git a/spec/services/metrics/dashboard/custom_metric_embed_service_spec.rb b/spec/services/metrics/dashboard/custom_metric_embed_service_spec.rb
deleted file mode 100644
index 8117296b048..00000000000
--- a/spec/services/metrics/dashboard/custom_metric_embed_service_spec.rb
+++ /dev/null
@@ -1,147 +0,0 @@
-# frozen_string_literal: true
-
-require 'spec_helper'
-
-RSpec.describe Metrics::Dashboard::CustomMetricEmbedService, feature_category: :metrics do
- include MetricsDashboardHelpers
-
- let_it_be(:project, reload: true) { build(:project) }
- let_it_be(:user) { create(:user) }
- let_it_be(:environment) { create(:environment, project: project) }
-
- before do
- project.add_maintainer(user) if user
- end
-
- let(:dashboard_path) { system_dashboard_path }
- let(:group) { business_metric_title }
- let(:title) { 'title' }
- let(:y_label) { 'y_label' }
-
- describe '.valid_params?' do
- let(:valid_params) do
- {
- embedded: true,
- dashboard_path: dashboard_path,
- group: group,
- title: title,
- y_label: y_label
- }
- end
-
- subject { described_class.valid_params?(params) }
-
- let(:params) { valid_params }
-
- it { is_expected.to be_truthy }
-
- context 'missing embedded' do
- let(:params) { valid_params.except(:embedded) }
-
- it { is_expected.to be_falsey }
- end
-
- context 'not embedded' do
- let(:params) { valid_params.merge(embedded: 'false') }
-
- it { is_expected.to be_falsey }
- end
-
- context 'non-system dashboard' do
- let(:dashboard_path) { '.gitlab/dashboards/test.yml' }
-
- it { is_expected.to be_falsey }
- end
-
- context 'undefined dashboard' do
- let(:params) { valid_params.except(:dashboard_path) }
-
- it { is_expected.to be_truthy }
- end
-
- context 'non-custom metric group' do
- let(:group) { 'Different Group' }
-
- it { is_expected.to be_falsey }
- end
-
- context 'missing group' do
- let(:group) { nil }
-
- it { is_expected.to be_falsey }
- end
-
- context 'missing title' do
- let(:title) { nil }
-
- it { is_expected.to be_falsey }
- end
-
- context 'undefined y-axis label' do
- let(:params) { valid_params.except(:y_label) }
-
- it { is_expected.to be_falsey }
- end
- end
-
- describe '#get_dashboard' do
- let(:service_params) do
- [
- project,
- user,
- {
- embedded: true,
- environment: environment,
- dashboard_path: dashboard_path,
- group: group,
- title: title,
- y_label: y_label
- }
- ]
- end
-
- let(:service_call) { described_class.new(*service_params).get_dashboard }
-
- it_behaves_like 'misconfigured dashboard service response', :not_found
- it_behaves_like 'raises error for users with insufficient permissions'
-
- context 'the custom metric exists' do
- let!(:metric) { create(:prometheus_metric, project: project) }
-
- it_behaves_like 'valid embedded dashboard service response'
-
- it 'does not cache the unprocessed dashboard' do
- # Fail spec if any method of Cache class is called.
- stub_const('Gitlab::Metrics::Dashboard::Cache', double)
-
- described_class.new(*service_params).get_dashboard
- end
-
- context 'multiple metrics meet criteria' do
- let!(:metric_2) { create(:prometheus_metric, project: project, query: 'avg(metric_2)') }
-
- it_behaves_like 'valid embedded dashboard service response'
-
- it 'includes both metrics in a single panel' do
- result = service_call
-
- panel_groups = result[:dashboard][:panel_groups]
- panels = panel_groups[0][:panels]
- metrics = panels[0][:metrics]
- queries = metrics.map { |metric| metric[:query_range] }
-
- expect(panel_groups.length).to eq(1)
- expect(panels.length).to eq(1)
- expect(metrics.length).to eq(2)
- expect(queries).to include('avg(metric_2)', 'avg(metric)')
- end
- end
- end
-
- context 'when the metric exists in another project' do
- let!(:metric) { create(:prometheus_metric, project: create(:project)) }
-
- it_behaves_like 'misconfigured dashboard service response', :not_found
- end
- end
-end
diff --git a/spec/services/namespaces/package_settings/update_service_spec.rb b/spec/services/namespaces/package_settings/update_service_spec.rb
index 385fd7c130e..8a4a51e409c 100644
--- a/spec/services/namespaces/package_settings/update_service_spec.rb
+++ b/spec/services/namespaces/package_settings/update_service_spec.rb
@@ -38,6 +38,8 @@ RSpec.describe ::Namespaces::PackageSettings::UpdateService, feature_category: :
maven_duplicate_exception_regex: 'SNAPSHOT',
generic_duplicates_allowed: true,
generic_duplicate_exception_regex: 'foo',
+ nuget_duplicates_allowed: true,
+ nuget_duplicate_exception_regex: 'foo',
maven_package_requests_forwarding: true,
lock_maven_package_requests_forwarding: false,
npm_package_requests_forwarding: nil,
@@ -49,6 +51,8 @@ RSpec.describe ::Namespaces::PackageSettings::UpdateService, feature_category: :
maven_duplicate_exception_regex: 'RELEASE',
generic_duplicates_allowed: false,
generic_duplicate_exception_regex: 'bar',
+ nuget_duplicates_allowed: false,
+ nuget_duplicate_exception_regex: 'bar',
maven_package_requests_forwarding: true,
lock_maven_package_requests_forwarding: true,
npm_package_requests_forwarding: true,
@@ -98,6 +102,8 @@ RSpec.describe ::Namespaces::PackageSettings::UpdateService, feature_category: :
maven_duplicate_exception_regex: 'RELEASE',
generic_duplicates_allowed: false,
generic_duplicate_exception_regex: 'bar',
+ nuget_duplicates_allowed: false,
+ nuget_duplicate_exception_regex: 'bar',
maven_package_requests_forwarding: true,
lock_maven_package_requests_forwarding: true,
npm_package_requests_forwarding: true,
diff --git a/spec/support/shared_examples/services/namespace_package_settings_shared_examples.rb b/spec/support/shared_examples/services/namespace_package_settings_shared_examples.rb
index 11a786fdefb..6f0fd1aa4ed 100644
--- a/spec/support/shared_examples/services/namespace_package_settings_shared_examples.rb
+++ b/spec/support/shared_examples/services/namespace_package_settings_shared_examples.rb
@@ -9,6 +9,8 @@ RSpec.shared_examples 'updating the namespace package setting attributes' do |to
.and change { namespace.package_settings.reload.maven_duplicate_exception_regex }.from(from[:maven_duplicate_exception_regex]).to(to[:maven_duplicate_exception_regex])
.and change { namespace.package_settings.reload.generic_duplicates_allowed }.from(from[:generic_duplicates_allowed]).to(to[:generic_duplicates_allowed])
.and change { namespace.package_settings.reload.generic_duplicate_exception_regex }.from(from[:generic_duplicate_exception_regex]).to(to[:generic_duplicate_exception_regex])
+ .and change { namespace.package_settings.reload.nuget_duplicates_allowed }.from(from[:nuget_duplicates_allowed]).to(to[:nuget_duplicates_allowed])
+ .and change { namespace.package_settings.reload.nuget_duplicate_exception_regex }.from(from[:nuget_duplicate_exception_regex]).to(to[:nuget_duplicate_exception_regex])
end
end
@@ -30,6 +32,8 @@ RSpec.shared_examples 'creating the namespace package setting' do
expect(namespace.package_setting_relation.maven_duplicate_exception_regex).to eq(package_settings[:maven_duplicate_exception_regex])
expect(namespace.package_setting_relation.generic_duplicates_allowed).to eq(package_settings[:generic_duplicates_allowed])
expect(namespace.package_setting_relation.generic_duplicate_exception_regex).to eq(package_settings[:generic_duplicate_exception_regex])
+ expect(namespace.package_setting_relation.nuget_duplicates_allowed).to eq(package_settings[:nuget_duplicates_allowed])
+ expect(namespace.package_setting_relation.nuget_duplicate_exception_regex).to eq(package_settings[:nuget_duplicate_exception_regex])
end
it_behaves_like 'returning a success'
diff --git a/spec/tooling/danger/required_stops_spec.rb b/spec/tooling/danger/required_stops_spec.rb
new file mode 100644
index 00000000000..7a90f19ac09
--- /dev/null
+++ b/spec/tooling/danger/required_stops_spec.rb
@@ -0,0 +1,98 @@
+# frozen_string_literal: true
+
+require 'gitlab-dangerfiles'
+require 'danger'
+require 'danger/plugins/internal/helper'
+require 'gitlab/dangerfiles/spec_helper'
+
+require_relative '../../../tooling/danger/required_stops'
+require_relative '../../../tooling/danger/project_helper'
+
+RSpec.describe Tooling::Danger::RequiredStops, feature_category: :tooling do
+ include_context "with dangerfile"
+
+ let(:fake_danger) { DangerSpecHelper.fake_danger.include(described_class) }
+ let(:fake_project_helper) { instance_double(Tooling::Danger::ProjectHelper) }
+ let(:warning_comment) { described_class::WARNING_COMMENT.chomp }
+
+ subject(:required_stops) { fake_danger.new(helper: fake_helper) }
+
+ before do
+ allow(required_stops).to receive(:project_helper).and_return(fake_project_helper)
+ end
+
+ describe '#add_comment_for_finalized_migrations' do
+ let(:file_lines) { file_diff.map { |line| line.delete_prefix('+').delete_prefix('-') } }
+
+ before do
+ allow(required_stops.project_helper).to receive(:file_lines).and_return(file_lines)
+ allow(required_stops.helper).to receive(:all_changed_files).and_return([filename])
+ allow(required_stops.helper).to receive(:changed_lines).with(filename).and_return(file_diff)
+ end
+
+ shared_examples "adds comment to added migration finalizations" do
+ context 'when model has a newly added migration finalization' do
+ let(:file_diff) do
+ [
+ "+ def up",
+ "+ finalize_background_migration(MIGRATION)",
+ "+ end",
+ "+ def up",
+ "+ finalize_background_migration('MyMigration')",
+ "+ end",
+ "+ def up",
+ "+ ensure_batched_background_migration_is_finished(",
+ "+ end",
+ "+ def up",
+ "+ ensure_batched_background_migration_is_finished('MyMigration')",
+ "+ end",
+ "+ def up",
+ "+ finalize_batched_background_migration(",
+ "+ end",
+ "+ def up",
+ "+ finalize_batched_background_migration('MyMigration')",
+ "+ end"
+ ]
+ end
+
+ it 'adds comment at the correct line' do
+ matching_line_numbers = [2, 5, 8, 11, 14, 17]
+ matching_line_numbers.each do |line_number|
+ expect(required_stops).to receive(:markdown).with("\n#{warning_comment}", file: filename, line: line_number)
+ end
+
+ required_stops.add_comment_for_finalized_migrations
+ end
+ end
+
+ context 'when model does not have migration finalization statement' do
+ let(:file_diff) do
+ [
+ "+ queue_batched_background_migration(",
+ "- ensure_batched_background_migration_is_finished("
+ ]
+ end
+
+ it 'does not add comment' do
+ expect(required_stops).not_to receive(:markdown)
+
+ required_stops.add_comment_for_finalized_migrations
+ end
+ end
+ end
+
+ context 'when model has a newly added migration finalization' do
+ context 'with regular migration' do
+ let(:filename) { 'db/migrate/my_migration.rb' }
+
+ include_examples 'adds comment to added migration finalizations'
+ end
+
+ context 'with post migration' do
+ let(:filename) { 'db/post_migrate/my_migration.rb' }
+
+ include_examples 'adds comment to added migration finalizations'
+ end
+ end
+ end
+end