debian-mirror-gitlab/spec/migrations/add_projects_emails_enabled_column_data_spec.rb
2023-04-23 21:23:45 +05:30

76 lines
2.4 KiB
Ruby

# 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