Browse Source

Fixes #4437 - DataPrivacy tasks never are cleaned up.

Rolf Schmidt 2 years ago
parent
commit
f1950113b3

+ 5 - 0
app/models/data_privacy_task.rb

@@ -102,4 +102,9 @@ class DataPrivacyTask < ApplicationModel
   def prepare_deletion_preview_anonymize
     preferences[:user] = Pseudonymisation.of_hash(preferences[:user])
   end
+
+  def self.cleanup(diff = 6.months)
+    where('created_at < ?', diff.ago).destroy_all
+    true
+  end
 end

+ 18 - 0
db/migrate/20230125114758_issue4437_add_cleanup.rb

@@ -0,0 +1,18 @@
+# Copyright (C) 2012-2023 Zammad Foundation, https://zammad-foundation.org/
+
+class Issue4437AddCleanup < ActiveRecord::Migration[6.1]
+  def change
+    # return if it's a new setup
+    return if !Setting.exists?(name: 'system_init_done')
+
+    Scheduler.create_if_not_exists(
+      name:          "Clean up 'DataPrivacyTask'.",
+      method:        'DataPrivacyTask.cleanup',
+      period:        1.day,
+      prio:          2,
+      active:        true,
+      updated_by_id: 1,
+      created_by_id: 1,
+    )
+  end
+end

+ 9 - 0
db/seeds/schedulers.rb

@@ -183,6 +183,15 @@ Scheduler.create_if_not_exists(
   updated_by_id: 1,
   created_by_id: 1,
 )
+Scheduler.create_if_not_exists(
+  name:          __("Clean up 'DataPrivacyTask'."),
+  method:        'DataPrivacyTask.cleanup',
+  period:        1.day,
+  prio:          2,
+  active:        true,
+  updated_by_id: 1,
+  created_by_id: 1,
+)
 Scheduler.create_or_update(
   name:          __('Delete obsolete classic IMAP backup.'),
   method:        'ImapAuthenticationMigrationCleanupJob.perform_now',

+ 4 - 0
i18n/zammad.pot

@@ -2127,6 +2127,10 @@ msgstr ""
 msgid "Clean up 'Cti::Log'."
 msgstr ""
 
+#: db/seeds/schedulers.rb
+msgid "Clean up 'DataPrivacyTask'."
+msgstr ""
+
 #: db/seeds/schedulers.rb
 msgid "Clean up 'HttpLog'."
 msgstr ""

+ 22 - 0
spec/models/data_privacy_task_spec.rb

@@ -84,4 +84,26 @@ RSpec.describe DataPrivacyTask, type: :model do
       end
     end
   end
+
+  describe '.cleanup' do
+    let(:task) { create(:data_privacy_task) }
+
+    it 'does does not delete new tasks' do
+      task
+      described_class.cleanup
+      expect { task.reload }.not_to raise_error
+    end
+
+    it 'does does delete old tasks' do
+      travel_to 7.months.ago
+      task
+      travel_back
+      described_class.cleanup
+      expect { task.reload }.to raise_error(ActiveRecord::RecordNotFound)
+    end
+
+    it 'does make sure that the cleanup returns truthy value for scheduler' do
+      expect(described_class.cleanup).to be(true)
+    end
+  end
 end