summaryrefslogtreecommitdiff
path: root/spec/migrations/add_projects_emails_enabled_column_data_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/migrations/add_projects_emails_enabled_column_data_spec.rb')
-rw-r--r--spec/migrations/add_projects_emails_enabled_column_data_spec.rb75
1 files changed, 75 insertions, 0 deletions
diff --git a/spec/migrations/add_projects_emails_enabled_column_data_spec.rb b/spec/migrations/add_projects_emails_enabled_column_data_spec.rb
new file mode 100644
index 00000000000..1d021ecd439
--- /dev/null
+++ b/spec/migrations/add_projects_emails_enabled_column_data_spec.rb
@@ -0,0 +1,75 @@
+# frozen_string_literal: true
+
+require 'spec_helper'
+require 'rake_helper'
+require_migration!
+
+RSpec.describe AddProjectsEmailsEnabledColumnData, :migration, feature_category: :database do
+ before :all do
+ Rake.application.rake_require 'active_record/railties/databases'
+ Rake.application.rake_require 'tasks/gitlab/db'
+
+ # empty task as env is already loaded
+ Rake::Task.define_task :environment
+ end
+
+ let(:migration) { described_class::MIGRATION }
+ let(:project_settings) { table(:project_settings) }
+ let(:projects) { table(:projects) }
+ let(:namespaces) { table(:namespaces) }
+
+ before do
+ stub_const("#{described_class.name}::SUB_BATCH_SIZE", 2)
+ end
+
+ it 'schedules background migrations', :aggregate_failures do
+ migrate!
+
+ expect(migration).to have_scheduled_batched_migration(
+ table_name: :projects,
+ column_name: :id,
+ interval: described_class::DELAY_INTERVAL
+ )
+ end
+
+ describe '#down' do
+ it 'deletes all batched migration records' do
+ migrate!
+ schema_migrate_down!
+
+ expect(migration).not_to have_scheduled_batched_migration
+ end
+ end
+
+ it 'sets emails_enabled to be the opposite of emails_disabled' do
+ disabled_records_to_migrate = 4
+ enabled_records_to_migrate = 2
+
+ disabled_records_to_migrate.times do |i|
+ namespace = namespaces.create!(name: 'namespace', path: "namespace#{i}")
+ project = projects.create!(name: "Project Disabled #{i}",
+ path: "projectDisabled#{i}",
+ namespace_id: namespace.id,
+ project_namespace_id: namespace.id,
+ emails_disabled: true)
+ project_settings.create!(project_id: project.id)
+ end
+
+ enabled_records_to_migrate.times do |i|
+ namespace = namespaces.create!(name: 'namespace', path: "namespace#{i}")
+ project = projects.create!(name: "Project Enabled #{i}",
+ path: "projectEnabled#{i}",
+ namespace_id: namespace.id,
+ project_namespace_id: namespace.id,
+ emails_disabled: false)
+ project_settings.create!(project_id: project.id)
+ end
+
+ migrate!
+ run_rake_task('gitlab:db:execute_batched_migrations')
+ # rubocop: disable CodeReuse/ActiveRecord
+ expect(project_settings.where(emails_enabled: true).count).to eq(enabled_records_to_migrate)
+ expect(project_settings.where(emails_enabled: false).count).to eq(disabled_records_to_migrate)
+ # rubocop: enable CodeReuse/ActiveRecord
+ end
+end