diff --git a/app/models/data_privacy_task.rb b/app/models/data_privacy_task.rb index 899623f46..2ce0e1c61 100644 --- a/app/models/data_privacy_task.rb +++ b/app/models/data_privacy_task.rb @@ -19,6 +19,13 @@ class DataPrivacyTask < ApplicationModel validates_with DataPrivacyTask::Validation def perform + perform_deletable + update!(state: 'completed') + rescue => e + handle_exception(e) + end + + def perform_deletable return if deletable.blank? prepare_deletion_preview @@ -29,10 +36,6 @@ class DataPrivacyTask < ApplicationModel else deletable.destroy end - - update!(state: 'completed') - rescue => e - handle_exception(e) end def handle_exception(e) diff --git a/app/models/data_privacy_task/validation.rb b/app/models/data_privacy_task/validation.rb index 6f39d0916..8fbe325a4 100644 --- a/app/models/data_privacy_task/validation.rb +++ b/app/models/data_privacy_task/validation.rb @@ -17,12 +17,14 @@ class DataPrivacyTask::Validation < ActiveModel::Validator private def check_for_user + return if !record.deletable_type_changed? return if deletable_is_user? invalid_because(:deletable, 'is not a User') end def check_for_system_user + return if !record.deletable_id_changed? return if !deletable_is_user? return if deletable.id != 1 @@ -30,6 +32,7 @@ class DataPrivacyTask::Validation < ActiveModel::Validator end def check_for_current_user + return if !record.deletable_id_changed? return if !deletable_is_user? return if deletable.id != UserInfo.current_user_id @@ -37,6 +40,7 @@ class DataPrivacyTask::Validation < ActiveModel::Validator end def check_for_last_admin + return if !record.deletable_id_changed? return if !deletable_is_user? return if !last_admin? @@ -44,6 +48,7 @@ class DataPrivacyTask::Validation < ActiveModel::Validator end def check_for_existing_task + return if !record.deletable_id_changed? return if !deletable_is_user? return if !tasks_exists? diff --git a/spec/jobs/data_privacy_task_job_spec.rb b/spec/jobs/data_privacy_task_job_spec.rb index d3a45c4ee..507666cbb 100644 --- a/spec/jobs/data_privacy_task_job_spec.rb +++ b/spec/jobs/data_privacy_task_job_spec.rb @@ -20,6 +20,13 @@ RSpec.describe DataPrivacyTaskJob, type: :job do expect { user.reload }.to raise_error(ActiveRecord::RecordNotFound) end + it 'checks if deletion does not crash if the user is already deleted' do + task = create(:data_privacy_task, deletable: user) + user.destroy + described_class.perform_now + expect(task.reload.state).to eq('completed') + end + it 'checks if the organization is deleted' do create(:data_privacy_task, deletable: user) described_class.perform_now