gitlab-org--gitlab-foss/spec/models/concerns/batch_nullify_dependent_associations_spec.rb

49 lines
1.6 KiB
Ruby

# frozen_string_literal: true
require 'spec_helper'
RSpec.describe BatchNullifyDependentAssociations do
before do
test_user = Class.new(ActiveRecord::Base) do
self.table_name = 'users'
has_many :closed_issues, foreign_key: :closed_by_id, class_name: 'Issue', dependent: :nullify
has_many :issues, foreign_key: :author_id, class_name: 'Issue', dependent: :nullify
has_many :updated_issues, foreign_key: :updated_by_id, class_name: 'Issue'
include BatchNullifyDependentAssociations
end
stub_const('TestUser', test_user)
end
describe '.dependent_associations_to_nullify' do
it 'returns only associations with `dependent: :nullify` associations' do
expect(TestUser.dependent_associations_to_nullify.map(&:name)).to match_array([:closed_issues, :issues])
end
end
describe '#nullify_dependent_associations_in_batches' do
let_it_be(:user) { create(:user) }
let_it_be(:updated_by_issue) { create(:issue, updated_by: user) }
before do
create(:issue, closed_by: user)
create(:issue, closed_by: user)
end
it 'nullifies multiple settings' do
expect do
test_user = TestUser.find(user.id)
test_user.nullify_dependent_associations_in_batches
end.to change { Issue.where(closed_by_id: user.id).count }.by(-2)
end
it 'excludes associations' do
expect do
test_user = TestUser.find(user.id)
test_user.nullify_dependent_associations_in_batches(exclude: [:closed_issues])
end.not_to change { Issue.where(closed_by_id: user.id).count }
end
end
end