diff options
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.rb | 75 |
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 |