From 7f308d412393661fd7e471de33feb0fc1ee10cd7 Mon Sep 17 00:00:00 2001 From: Artur Beljajev Date: Sat, 7 Dec 2019 20:38:58 +0200 Subject: [PATCH] Add audit log to registrant verifications Closes #1425 --- app/models/domain.rb | 1 + app/models/registrant_verification.rb | 2 + ...ete_orphaned_registrant_verifications.rake | 15 +++++++ test/models/registrant_verification_test.rb | 12 ++++++ ..._orphaned_registrant_verifications_test.rb | 43 +++++++++++++++++++ 5 files changed, 73 insertions(+) create mode 100644 lib/tasks/data_migrations/delete_orphaned_registrant_verifications.rake create mode 100644 test/models/registrant_verification_test.rb create mode 100644 test/tasks/data_migrations/delete_orphaned_registrant_verifications_test.rb diff --git a/app/models/domain.rb b/app/models/domain.rb index 96eb89616..c14d1bc4d 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -57,6 +57,7 @@ class Domain < ApplicationRecord has_many :legal_documents, as: :documentable accepts_nested_attributes_for :legal_documents, reject_if: proc { |attrs| attrs[:body].blank? } + has_many :registrant_verifications, dependent: :destroy after_initialize do self.pending_json = {} if pending_json.blank? diff --git a/app/models/registrant_verification.rb b/app/models/registrant_verification.rb index e6b68d955..96528c887 100644 --- a/app/models/registrant_verification.rb +++ b/app/models/registrant_verification.rb @@ -1,6 +1,8 @@ # Used in Registrant portal to collect registrant verifications # Registrant postgres user can access this table directly. class RegistrantVerification < ApplicationRecord + has_paper_trail + # actions CONFIRMED = 'confirmed' REJECTED = 'rejected' diff --git a/lib/tasks/data_migrations/delete_orphaned_registrant_verifications.rake b/lib/tasks/data_migrations/delete_orphaned_registrant_verifications.rake new file mode 100644 index 000000000..f65db547e --- /dev/null +++ b/lib/tasks/data_migrations/delete_orphaned_registrant_verifications.rake @@ -0,0 +1,15 @@ +namespace :data_migrations do + task delete_orphaned_registrant_verifications: :environment do + orphaned_registrant_verifications = RegistrantVerification.where.not(domain_id: Domain.ids) + orphaned_registrant_verification_count = orphaned_registrant_verifications.count + processed_registrant_verification_count = 0 + + orphaned_registrant_verifications.each do |registrant_verification| + registrant_verification.destroy! + processed_registrant_verification_count += 1 + end + + puts "Processed: #{processed_registrant_verification_count} out of" \ + " #{orphaned_registrant_verification_count}" + end +end diff --git a/test/models/registrant_verification_test.rb b/test/models/registrant_verification_test.rb new file mode 100644 index 000000000..4bb7b6a1c --- /dev/null +++ b/test/models/registrant_verification_test.rb @@ -0,0 +1,12 @@ +require 'test_helper' + +class RegistrantVerificationTest < ActiveSupport::TestCase + def test_audit_log + registrant_verification = registrant_verifications(:one) + random_action = "random#{rand(100)}" + + assert_difference -> { PaperTrail::Version.count } do + registrant_verification.update_attributes!(action: random_action) + end + end +end diff --git a/test/tasks/data_migrations/delete_orphaned_registrant_verifications_test.rb b/test/tasks/data_migrations/delete_orphaned_registrant_verifications_test.rb new file mode 100644 index 000000000..df576332e --- /dev/null +++ b/test/tasks/data_migrations/delete_orphaned_registrant_verifications_test.rb @@ -0,0 +1,43 @@ +require 'test_helper' + +class ArchiveOrphanedRegistrantVerificationsTest < ActiveSupport::TestCase + def test_deletes_orphaned_registrant_verifications + create_orphaned_registrant_verification + + assert_difference 'RegistrantVerification.count', -1 do + capture_io do + run_task + end + end + end + + def test_keeps_non_orphaned_registrant_verifications_intact + assert_no_difference 'RegistrantVerification.count' do + capture_io do + run_task + end + end + end + + def test_output + create_orphaned_registrant_verification + + assert_output "Processed: 1 out of 1\n" do + run_task + end + end + + private + + def create_orphaned_registrant_verification + non_existent_domain_id = 55 + assert_not_includes Domain.ids, non_existent_domain_id + + RegistrantVerification.connection.disable_referential_integrity do + registrant_verifications(:one).update_columns(domain_id: non_existent_domain_id) + end + end + + def run_task + Rake::Task['data_migrations:delete_orphaned_registrant_verifications'].execute end +end