diff --git a/app/models/contact.rb b/app/models/contact.rb index f15637f6f..367777efb 100644 --- a/app/models/contact.rb +++ b/app/models/contact.rb @@ -576,4 +576,20 @@ class Contact < ApplicationRecord description end + + def as_csv_row + [ + name, + code, + ident_human_description, + email, + created_at.to_formatted_s(:db), + registrar, + phone, + ] + end + + def self.csv_header + ['Name', 'ID', 'Ident', 'E-mail', 'Created at', 'Registrar', 'Phone'].freeze + end end diff --git a/app/services/csv_generator.rb b/app/services/csv_generator.rb index c0d21ad62..122a04ff5 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, Domain].include?(class_name) + [Version::DomainVersion, Version::ContactVersion, Domain, Contact, Invoice].include?(class_name) end end diff --git a/test/fixtures/files/contacts.csv b/test/fixtures/files/contacts.csv new file mode 100644 index 000000000..73d9104af --- /dev/null +++ b/test/fixtures/files/contacts.csv @@ -0,0 +1,10 @@ +Name,ID,Ident,E-mail,Created at,Registrar,Phone +John,john-001,1234 [US priv],john@inbox.test,2010-07-05 07:30:00,Best Names,+555.555 +William,william-001,12345 [US priv],william@inbox.test,2010-07-05 07:30:00,Best Names,+555.555 +Jane,jane-001,123456 [US priv],jane@mail.test,2010-07-05 07:30:00,Best Names,+555.555 +Acme Ltd,acme-ltd-001,1234567 [US org],acme@outlook.test,2010-07-05 07:30:00,Best Names,+555.555 +Jack,jack-001,12345678 [US org],jack@inbox.test,2010-07-05 07:30:00,Good Names,+555.555 +William,william-002,12345 [US priv],william@inbox.test,2010-07-05 07:30:00,Good Names,+555.555 +Registrar Ltd,registrarltd-001,1234567890 [US org],registrar@inbox.test,2010-07-05 07:30:00,Good Names,+555.555 +any,invalid,[ ],invalid@invalid.test,2010-07-05 07:30:00,Best Names, +any,invalid_email,[ ],invalid@invalid.,2010-07-05 07:30:00,Best Names, diff --git a/test/system/admin_area/contacts/csv_test.rb b/test/system/admin_area/contacts/csv_test.rb new file mode 100644 index 000000000..552bcf437 --- /dev/null +++ b/test/system/admin_area/contacts/csv_test.rb @@ -0,0 +1,19 @@ +require 'application_system_test_case' + +class ContactsCsvTest < ApplicationSystemTestCase + setup { sign_in users(:admin) } + + def test_download_contacts_list_as_csv + travel_to Time.zone.parse('2010-07-05 10:30') + Contact.all.each do |contact| + contact.created_at = Time.zone.now + contact.save(:validate => false) + end + + visit admin_contacts_url + click_link('CSV') + + assert_equal "attachment; filename=\"contacts_#{Time.zone.now.to_formatted_s(:number)}.csv\"; filename*=UTF-8''contacts_#{Time.zone.now.to_formatted_s(:number)}.csv", response_headers['Content-Disposition'] + assert_equal file_fixture('contacts.csv').read, page.body + end +end diff --git a/test/system/admin_area/domains/csv_test.rb b/test/system/admin_area/domains/csv_test.rb index 296117cf8..568815dd7 100644 --- a/test/system/admin_area/domains/csv_test.rb +++ b/test/system/admin_area/domains/csv_test.rb @@ -1,9 +1,9 @@ require 'application_system_test_case' -class AdminAreaCsvTest < ApplicationSystemTestCase +class DomainsCsvTest < ApplicationSystemTestCase setup { sign_in users(:admin) } - def test_downloads_domain_list_as_csv + def test_download_domains_list_as_csv travel_to Time.zone.parse('2010-07-05 10:30') Domain.all.each do |domain| domain.created_at = Time.zone.now