From 6263ded68ff1d3fbc4116a876b628b1d0971b9f2 Mon Sep 17 00:00:00 2001 From: Thiago Youssef Date: Fri, 11 Mar 2022 14:37:46 +0200 Subject: [PATCH] Fix admin domains CSV output --- app/models/domain.rb | 29 ++++++++++++++++++++++ app/models/version/domain_version.rb | 19 +------------- app/services/csv_generator.rb | 2 +- test/fixtures/files/domains.csv | 9 +++++-- test/system/admin_area/domains/csv_test.rb | 5 ++++ 5 files changed, 43 insertions(+), 21 deletions(-) diff --git a/app/models/domain.rb b/app/models/domain.rb index 873216cf1..2f084ed4d 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -753,6 +753,35 @@ class Domain < ApplicationRecord contacts.select(&:email_verification_failed?)&.map(&:email)&.uniq end + def as_csv_row + [ + name, + registrant_name, + valid_to.to_formatted_s(:db), + registrar, + created_at.to_formatted_s(:db), + statuses, + contacts.pluck(:code), + force_delete_date, + force_delete_data + ] + end + + def registrant_name + return registrant.name if registrant + + ver = Version::ContactVersion.where(item_id: registrant_id).last + contact = Contact.all_versions_for([registrant_id], created_at).first + + contact = ObjectVersionsParser.new(ver).parse if contact.nil? && ver + + contact.try(:name) || 'Deleted' + end + + def self.csv_header + ['Domain', 'Registrant', 'Valid to', 'Registrar', 'Created at', 'Statuses', 'Contacts code', 'Force delete date', 'Force delete data'].freeze + end + def self.pdf(html) kit = PDFKit.new(html) kit.to_pdf diff --git a/app/models/version/domain_version.rb b/app/models/version/domain_version.rb index 240adc866..52b10fc53 100644 --- a/app/models/version/domain_version.rb +++ b/app/models/version/domain_version.rb @@ -12,7 +12,7 @@ class Version::DomainVersion < PaperTrail::Version [ domain.name, - registrant_name(domain), + domain.registrant_name, domain.registrar, event, created_at.to_formatted_s(:db) @@ -59,21 +59,4 @@ class Version::DomainVersion < PaperTrail::Version def self.csv_header ['Name', 'Registrant', 'Registrar', 'Action', 'Created at'].freeze end - - private - - def registrant_name(domain) - return domain.registrant.name if domain.registrant - - ver = Version::ContactVersion.where(item_id: domain.registrant_id).last - contact = Contact.all_versions_for([domain.registrant_id], created_at).first - - if contact.nil? && ver - merged_obj = ver.object_changes.to_h.transform_values(&:last) - result = ver.object.to_h.merge(merged_obj)&.slice(*Contact&.column_names) - contact = Contact.new(result) - end - - contact.try(:name) || 'Deleted' - end end diff --git a/app/services/csv_generator.rb b/app/services/csv_generator.rb index 43c116b7e..c0d21ad62 100644 --- a/app/services/csv_generator.rb +++ b/app/services/csv_generator.rb @@ -12,6 +12,6 @@ class CsvGenerator private def self.custom_csv(class_name) - [Version::DomainVersion, Version::ContactVersion].include?(class_name) + [Version::DomainVersion, Version::ContactVersion, Domain].include?(class_name) end end diff --git a/test/fixtures/files/domains.csv b/test/fixtures/files/domains.csv index 10a6e2b65..69e9df8a8 100644 --- a/test/fixtures/files/domains.csv +++ b/test/fixtures/files/domains.csv @@ -1,2 +1,7 @@ -Domain,Registrant,Valid to,Registrar,Created at,Statuses,Contacts code,Force delete date,Force delete data -hospital.test,Thiago,05/07/2010 03:00,Good Names,05/07/2009 03:00,[],[john-001, william-001, william-001],08/03/2022 00:00, +Domain,Registrant,Valid to,Registrar,Created at,Statuses,Contacts code,Force delete date,Force delete data +shop.test,John,2010-07-04 21:00:00,Best Names,2010-07-05 07:30:00,"[""ok""]","[""william-001"", ""jane-001"", ""acme-ltd-001""]",2010-07-08, +airport.test,John,2010-07-05 00:00:00,Best Names,2010-07-05 07:30:00,"[""ok""]","[""john-001"", ""william-001"", ""william-001""]",, +library.test,Acme Ltd,2010-07-05 00:00:00,Best Names,2010-07-05 07:30:00,"[""inactive""]","[""john-001"", ""acme-ltd-001""]",, +metro.test,Jack,2010-07-05 00:00:00,Good Names,2010-07-05 07:30:00,[],"[""jack-001"", ""jack-001""]",, +hospital.test,John,2010-07-05 00:00:00,Good Names,2010-07-05 07:30:00,"[""inactive""]","[""john-001"", ""john-001""]",, +invalid.test,any,2010-07-04 21:00:00,Best Names,2010-07-05 07:30:00,"[""inactive""]","[""invalid"", ""invalid""]",, diff --git a/test/system/admin_area/domains/csv_test.rb b/test/system/admin_area/domains/csv_test.rb index cae01b884..296117cf8 100644 --- a/test/system/admin_area/domains/csv_test.rb +++ b/test/system/admin_area/domains/csv_test.rb @@ -5,6 +5,11 @@ class AdminAreaCsvTest < ApplicationSystemTestCase def test_downloads_domain_list_as_csv travel_to Time.zone.parse('2010-07-05 10:30') + Domain.all.each do |domain| + domain.created_at = Time.zone.now + domain.save(:validate => false) + end + visit admin_domains_url click_link('CSV')