From 7f8eee52f4272cb2f4f938f2e9ad3196f646b113 Mon Sep 17 00:00:00 2001 From: dinsmol Date: Wed, 11 Aug 2021 22:28:20 +0300 Subject: [PATCH 1/8] added csv download --- .../admin/blocked_domains_controller.rb | 12 +++++++++ .../admin/contact_versions_controller.rb | 11 ++++++++ app/controllers/admin/contacts_controller.rb | 12 +++++++++ app/controllers/admin/disputes_controller.rb | 12 +++++++++ .../admin/domain_versions_controller.rb | 13 +++++++++- app/controllers/admin/epp_logs_controller.rb | 12 +++++++++ app/controllers/admin/repp_logs_controller.rb | 12 +++++++++ .../admin/reserved_domains_controller.rb | 12 +++++++++ app/lib/csv_report_helper.rb | 10 ++++++++ app/models/api_log/epp_log.rb | 1 + app/models/api_log/repp_log.rb | 1 + app/models/blocked_domain.rb | 1 + app/models/dispute.rb | 1 + app/models/domain.rb | 10 +------- app/models/reserved_domain.rb | 1 + app/models/version/contact_version.rb | 4 +-- app/models/version/domain_version.rb | 1 + app/views/admin/blocked_domains/index.haml | 3 ++- app/views/admin/contact_versions/index.haml | 25 ++++++++++--------- app/views/admin/contacts/index.haml | 3 ++- app/views/admin/disputes/index.html.erb | 3 ++- app/views/admin/domain_versions/archive.haml | 3 ++- app/views/admin/epp_logs/index.haml | 4 ++- app/views/admin/repp_logs/index.haml | 4 ++- app/views/admin/reserved_domains/index.haml | 3 ++- config/locales/admin/blocked_domains.en.yml | 1 + config/locales/admin/contact_versions.en.yml | 1 + config/locales/admin/contacts.en.yml | 1 + config/locales/admin/disputes.en.yml | 1 + config/locales/admin/domain_versions.en.yml | 1 + config/locales/admin/epp_logs.en.yml | 1 + config/locales/admin/repp_logs.en.yml | 1 + config/locales/admin/reserved_domains.en.yml | 1 + .../admin_area/blocked_domains_test.rb | 15 ++++++++++- test/integration/admin_area/disputes_test.rb | 13 ++++++++++ test/integration/admin_area/epp_logs_test.rb | 13 ++++++++++ test/integration/admin_area/repp_logs_test.rb | 15 ++++++++++- .../admin_area/reserved_domains_test.rb | 15 ++++++++++- .../admin_area/contact_versions_test.rb | 15 ++++++++++- test/system/admin_area/contacts_test.rb | 13 ++++++++++ .../system/admin_area/domain_versions_test.rb | 13 ++++++++++ 41 files changed, 259 insertions(+), 35 deletions(-) create mode 100644 app/lib/csv_report_helper.rb diff --git a/app/controllers/admin/blocked_domains_controller.rb b/app/controllers/admin/blocked_domains_controller.rb index bf5359b82a..bd9acd14a6 100644 --- a/app/controllers/admin/blocked_domains_controller.rb +++ b/app/controllers/admin/blocked_domains_controller.rb @@ -8,6 +8,18 @@ def index @q = domains.search(params[:q]) @domains = @q.result.page(params[:page]) @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? + + respond_to do |format| + format.html do + render 'admin/blocked_domains/index' + end + format.csv do + raw_csv = @q.result.to_csv + send_data raw_csv, + filename: "blocked_domains_#{Time.zone.now.to_formatted_s(:number)}.csv", + type: "#{Mime[:csv]}; charset=utf-8" + end + end end def new diff --git a/app/controllers/admin/contact_versions_controller.rb b/app/controllers/admin/contact_versions_controller.rb index 9638b341f1..629e7edc71 100644 --- a/app/controllers/admin/contact_versions_controller.rb +++ b/app/controllers/admin/contact_versions_controller.rb @@ -28,6 +28,17 @@ def index @versions = @q.result.page(params[:page]) @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? + respond_to do |format| + format.html do + render 'admin/contact_versions/index' + end + format.csv do + raw_csv = @q.result.to_csv + send_data raw_csv, + filename: "contact_history_#{Time.zone.now.to_formatted_s(:number)}.csv", + type: "#{Mime[:csv]}; charset=utf-8" + end + end end def show diff --git a/app/controllers/admin/contacts_controller.rb b/app/controllers/admin/contacts_controller.rb index e008a05ae3..37e2acbc93 100644 --- a/app/controllers/admin/contacts_controller.rb +++ b/app/controllers/admin/contacts_controller.rb @@ -24,6 +24,18 @@ def index end @contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? + + respond_to do |format| + format.html do + @contacts + end + format.csv do + raw_csv = @q.result.distinct.to_csv + send_data raw_csv, + filename: "contacts_#{Time.zone.now.to_formatted_s(:number)}.csv", + type: "#{Mime[:csv]}; charset=utf-8" + end + end end def filter_by_flags(contacts) diff --git a/app/controllers/admin/disputes_controller.rb b/app/controllers/admin/disputes_controller.rb index 62e0c69b60..fa184b345c 100644 --- a/app/controllers/admin/disputes_controller.rb +++ b/app/controllers/admin/disputes_controller.rb @@ -10,6 +10,18 @@ def index params[:q] ||= {} @disputes = sortable_dispute_query_for(Dispute.active.all, params[:q]) @closed_disputes = sortable_dispute_query_for(Dispute.closed.all, params[:q], closed: true) + + respond_to do |format| + format.html do + render 'admin/disputes/index' + end + format.csv do + raw_csv = @q.result.to_csv + send_data raw_csv, + filename: "disputes_#{Time.zone.now.to_formatted_s(:number)}.csv", + type: "#{Mime[:csv]}; charset=utf-8" + end + end end # GET /admin/disputes/1 diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb index 0240875ece..b7f321fee9 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -44,7 +44,18 @@ def index @q = versions.search(params[:q]) @versions = @q.result.page(params[:page]) @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? - render "admin/domain_versions/archive" + + respond_to do |format| + format.html do + render 'admin/domain_versions/archive' + end + format.csv do + raw_csv = @q.result.to_csv + send_data raw_csv, + filename: "domain_history_#{Time.zone.now.to_formatted_s(:number)}.csv", + type: "#{Mime[:csv]}; charset=utf-8" + end + end end def show diff --git a/app/controllers/admin/epp_logs_controller.rb b/app/controllers/admin/epp_logs_controller.rb index 1a7602b900..3f7975b9ee 100644 --- a/app/controllers/admin/epp_logs_controller.rb +++ b/app/controllers/admin/epp_logs_controller.rb @@ -13,6 +13,18 @@ def index @epp_logs = @epp_logs.page(params[:page]) @count = @q.result.count @epp_logs = @epp_logs.per(params[:results_per_page]) if paginate? + + respond_to do |format| + format.html do + render 'admin/epp_logs/index' + end + format.csv do + raw_csv = @q.result.to_csv + send_data raw_csv, + filename: "epp_logs_#{Time.zone.now.to_formatted_s(:number)}.csv", + type: "#{Mime[:csv]}; charset=utf-8" + end + end end def show diff --git a/app/controllers/admin/repp_logs_controller.rb b/app/controllers/admin/repp_logs_controller.rb index 0bbd15dbeb..f6eabafebb 100644 --- a/app/controllers/admin/repp_logs_controller.rb +++ b/app/controllers/admin/repp_logs_controller.rb @@ -13,6 +13,18 @@ def index @repp_logs = @repp_logs.page(params[:page]) @count = @q.result.count @repp_logs = @repp_logs.per(params[:results_per_page]) if paginate? + + respond_to do |format| + format.html do + render 'admin/repp_logs/index' + end + format.csv do + raw_csv = @q.result.to_csv + send_data raw_csv, + filename: "repp_logs_#{Time.zone.now.to_formatted_s(:number)}.csv", + type: "#{Mime[:csv]}; charset=utf-8" + end + end end def show diff --git a/app/controllers/admin/reserved_domains_controller.rb b/app/controllers/admin/reserved_domains_controller.rb index 78d7528660..aafe334f29 100644 --- a/app/controllers/admin/reserved_domains_controller.rb +++ b/app/controllers/admin/reserved_domains_controller.rb @@ -9,6 +9,18 @@ def index @q = domains.search(params[:q]) @domains = @q.result.page(params[:page]) @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? + + respond_to do |format| + format.html do + render 'admin/reserved_domains/index' + end + format.csv do + raw_csv = @q.result.to_csv + send_data raw_csv, + filename: "reserved_domains_#{Time.zone.now.to_formatted_s(:number)}.csv", + type: "#{Mime[:csv]}; charset=utf-8" + end + end end def new diff --git a/app/lib/csv_report_helper.rb b/app/lib/csv_report_helper.rb new file mode 100644 index 0000000000..ac1e696236 --- /dev/null +++ b/app/lib/csv_report_helper.rb @@ -0,0 +1,10 @@ +module CsvReportHelper + def to_csv + CSV.generate do |csv| + csv << column_names + all.each do |item| + csv << item.attributes.values_at(*column_names) + end + end + end +end diff --git a/app/models/api_log/epp_log.rb b/app/models/api_log/epp_log.rb index eb4aedcd97..6f4fe2644c 100644 --- a/app/models/api_log/epp_log.rb +++ b/app/models/api_log/epp_log.rb @@ -1,4 +1,5 @@ module ApiLog class EppLog < Db + extend CsvReportHelper end end diff --git a/app/models/api_log/repp_log.rb b/app/models/api_log/repp_log.rb index 6bd82956bc..f983c8c99b 100644 --- a/app/models/api_log/repp_log.rb +++ b/app/models/api_log/repp_log.rb @@ -1,4 +1,5 @@ module ApiLog class ReppLog < Db + extend CsvReportHelper end end diff --git a/app/models/blocked_domain.rb b/app/models/blocked_domain.rb index f4e18bffc1..9804e999e1 100644 --- a/app/models/blocked_domain.rb +++ b/app/models/blocked_domain.rb @@ -1,5 +1,6 @@ class BlockedDomain < ApplicationRecord include Versions + extend CsvReportHelper before_save :generate_data after_destroy :remove_data diff --git a/app/models/dispute.rb b/app/models/dispute.rb index f5a948355c..ef9412cc08 100644 --- a/app/models/dispute.rb +++ b/app/models/dispute.rb @@ -1,4 +1,5 @@ class Dispute < ApplicationRecord + extend CsvReportHelper include WhoisStatusPopulate validates :domain_name, :password, :starts_at, :expires_at, presence: true before_validation :fill_empty_passwords, :set_expiry_date diff --git a/app/models/domain.rb b/app/models/domain.rb index b150b1f8b5..ba2fb114c9 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -1,4 +1,5 @@ class Domain < ApplicationRecord + extend CsvReportHelper include UserEvents include Roids include Versions # version/domain_version.rb @@ -720,15 +721,6 @@ def contact_emails_verification_failed contacts.select(&:email_verification_failed?)&.map(&:email)&.uniq end - def self.to_csv - CSV.generate do |csv| - csv << column_names - all.each do |domain| - csv << domain.attributes.values_at(*column_names) - end - end - end - def self.pdf(html) kit = PDFKit.new(html) kit.to_pdf diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb index a45d06e831..ea8eab318e 100644 --- a/app/models/reserved_domain.rb +++ b/app/models/reserved_domain.rb @@ -1,4 +1,5 @@ class ReservedDomain < ApplicationRecord + extend CsvReportHelper include Versions # version/reserved_domain_version.rb include WhoisStatusPopulate before_save :fill_empty_passwords diff --git a/app/models/version/contact_version.rb b/app/models/version/contact_version.rb index 6c5c70a99b..279566287e 100644 --- a/app/models/version/contact_version.rb +++ b/app/models/version/contact_version.rb @@ -1,7 +1,7 @@ class Version::ContactVersion < PaperTrail::Version + extend CsvReportHelper include VersionSession + self.table_name = :log_contacts self.sequence_name = :log_contacts_id_seq - - # scope :deleted, -> { where(event: 'destroy') } end diff --git a/app/models/version/domain_version.rb b/app/models/version/domain_version.rb index b2962d1eed..a9784f3252 100644 --- a/app/models/version/domain_version.rb +++ b/app/models/version/domain_version.rb @@ -1,4 +1,5 @@ class Version::DomainVersion < PaperTrail::Version + extend CsvReportHelper include VersionSession self.table_name = :log_domains diff --git a/app/views/admin/blocked_domains/index.haml b/app/views/admin/blocked_domains/index.haml index e4bcedfc37..df6aa07473 100644 --- a/app/views/admin/blocked_domains/index.haml +++ b/app/views/admin/blocked_domains/index.haml @@ -23,11 +23,12 @@ .form-group = label_tag t(:results_per_page) = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) - .col-md-3{style: 'padding-top: 25px;'} + .col-md-4{style: 'padding-top: 25px;'} %button.btn.btn-primary   %span.glyphicon.glyphicon-search   + = link_to(t('.csv_btn'), admin_blocked_domains_path(format: :csv, params: params.permit!), class: 'btn btn-default') = link_to(t('.reset_btn'), admin_blocked_domains_path, class: 'btn btn-default') %hr .row diff --git a/app/views/admin/contact_versions/index.haml b/app/views/admin/contact_versions/index.haml index 8f293ba5de..67d903176e 100644 --- a/app/views/admin/contact_versions/index.haml +++ b/app/views/admin/contact_versions/index.haml @@ -21,18 +21,19 @@ = label_tag :action = select_tag '[q][event]', options_for_select([['Update', 'update'], ['Destroy', 'destroy'], ['Create', 'create']], params[:q][:event]), { include_blank:true, multiple: false, placeholder: t(:choose), class: 'form-control js-combobox' } .row - .col-md-3 - .col-md-3 - .col-md-3 - .form-group - = label_tag t(:results_per_page) - = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) - .col-md-3{style: 'padding-top: 25px;'} - %button.btn.btn-primary -   - %span.glyphicon.glyphicon-search -   - = link_to(t('.reset_btn'), admin_contact_versions_path, class: 'btn btn-default') + .col-md-3 + .col-md-3 + .col-md-3 + .form-group + = label_tag t(:results_per_page) + = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) + .col-md-3{style: 'padding-top: 25px;float:right;padding-right: 0px;'} + %button.btn.btn-primary +   + %span.glyphicon.glyphicon-search +   + = link_to(t('.csv_btn'), admin_contact_versions_path(format: :csv, params: params.permit!), class: 'btn btn-default') + = link_to(t('.reset_btn'), admin_contact_versions_path, class: 'btn btn-default') %hr diff --git a/app/views/admin/contacts/index.haml b/app/views/admin/contacts/index.haml index 6121bd0fea..ddab394cf5 100644 --- a/app/views/admin/contacts/index.haml +++ b/app/views/admin/contacts/index.haml @@ -69,11 +69,12 @@ = check_box_tag :email_verification_failed, '1',params[:email_verification_failed].eql?('1'), style: 'width:auto;height:auto;float:right' .row - .col-md-3{style: 'padding-top: 25px;float:right;'} + .col-md-3{style: 'padding-top: 25px;float:right;padding-right: 0px'} %button.btn.btn-primary   %span.glyphicon.glyphicon-search   + = link_to(t('.csv_btn'), admin_contacts_path(format: :csv, params: params.permit!), class: 'btn btn-default') = link_to(t('.reset_btn'), admin_contacts_path, class: 'btn btn-default') %hr .row diff --git a/app/views/admin/disputes/index.html.erb b/app/views/admin/disputes/index.html.erb index e32ddb7305..72725cd66d 100644 --- a/app/views/admin/disputes/index.html.erb +++ b/app/views/admin/disputes/index.html.erb @@ -32,12 +32,13 @@ <%= text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) %> -
+
+ <%= link_to(t('.csv_btn'), admin_disputes_path(format: :csv, params: params.permit!), class: 'btn btn-default') %> <%= link_to(t('.reset_btn'), admin_disputes_path, class: 'btn btn-default') %>
diff --git a/app/views/admin/domain_versions/archive.haml b/app/views/admin/domain_versions/archive.haml index 1fd4dad871..30312a9bd3 100644 --- a/app/views/admin/domain_versions/archive.haml +++ b/app/views/admin/domain_versions/archive.haml @@ -27,11 +27,12 @@ .form-group = label_tag t(:results_per_page) = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) - .col-md-3{style: 'padding-top: 25px;'} + .col-md-3{style: 'padding-top: 25px;float:right;padding-right: 0px;'} %button.btn.btn-primary   %span.glyphicon.glyphicon-search   + = link_to(t('.csv_btn'), admin_domain_versions_path(format: :csv, params: params.permit!), class: 'btn btn-default') = link_to(t('.reset_btn'), admin_domain_versions_path, class: 'btn btn-default') %hr diff --git a/app/views/admin/epp_logs/index.haml b/app/views/admin/epp_logs/index.haml index a6f0dae023..43596b317d 100644 --- a/app/views/admin/epp_logs/index.haml +++ b/app/views/admin/epp_logs/index.haml @@ -36,11 +36,12 @@ .form-group = f.label t(:created_before) = f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control js-datepicker', placeholder: t(:created_before) - .col-md-3{style: 'padding-top: 25px;'} + .col-md-3{style: 'padding-top: 25px;float:right;padding-right: 0px;'} %button.btn.btn-primary   %span.glyphicon.glyphicon-search   + = link_to(t('.csv_btn'), admin_epp_logs_path(format: :csv, params: params.permit!), class: 'btn btn-default') = link_to(t('.reset_btn'), admin_epp_logs_path, class: 'btn btn-default') .row .col-md-12 @@ -49,6 +50,7 @@ .pull-right .pagination = t(:result_count, count: @count) if @count > 0 + .row .table-responsive %table.table.table-hover.table-bordered.table-condensed %thead diff --git a/app/views/admin/repp_logs/index.haml b/app/views/admin/repp_logs/index.haml index 061f892fb7..b2aadcae3b 100644 --- a/app/views/admin/repp_logs/index.haml +++ b/app/views/admin/repp_logs/index.haml @@ -35,11 +35,12 @@ .form-group = f.label t(:created_before) = f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control js-datepicker', placeholder: t(:created_before) - .col-md-3{style: 'padding-top: 25px;'} + .col-md-3{style: 'padding-top: 25px;float:right;padding-right: 0px;'} %button.btn.btn-primary   %span.glyphicon.glyphicon-search   + = link_to(t('.csv_btn'), admin_repp_logs_path(format: :csv, params: params.permit!), class: 'btn btn-default') = link_to(t('.reset_btn'), admin_repp_logs_path, class: 'btn btn-default') %hr .row @@ -48,6 +49,7 @@ .pull-right .pagination = t(:result_count, count: @count) if @count > 0 + .row .table-responsive %table.table.table-hover.table-bordered.table-condensed %thead diff --git a/app/views/admin/reserved_domains/index.haml b/app/views/admin/reserved_domains/index.haml index 194cf8875a..5444ba34d9 100644 --- a/app/views/admin/reserved_domains/index.haml +++ b/app/views/admin/reserved_domains/index.haml @@ -23,11 +23,12 @@ .form-group = label_tag t(:results_per_page) = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) - .col-md-3{style: 'padding-top: 25px;'} + .col-md-4{style: 'padding-top: 25px;'} %button.btn.btn-primary   %span.glyphicon.glyphicon-search   + = link_to(t('.csv_btn'), admin_reserved_domains_path(format: :csv, params: params.permit!), class: 'btn btn-default') = link_to(t('.reset_btn'), admin_reserved_domains_path, class: 'btn btn-default') %hr .row diff --git a/config/locales/admin/blocked_domains.en.yml b/config/locales/admin/blocked_domains.en.yml index 3dac6fa5d8..2eb66e39e7 100644 --- a/config/locales/admin/blocked_domains.en.yml +++ b/config/locales/admin/blocked_domains.en.yml @@ -5,3 +5,4 @@ en: title: Blocked domains new_btn: New blocked domain reset_btn: Reset + csv_btn: CSV diff --git a/config/locales/admin/contact_versions.en.yml b/config/locales/admin/contact_versions.en.yml index 89566ab9bd..64062b7f71 100644 --- a/config/locales/admin/contact_versions.en.yml +++ b/config/locales/admin/contact_versions.en.yml @@ -3,3 +3,4 @@ en: contact_versions: index: reset_btn: Reset + csv_btn: CSV diff --git a/config/locales/admin/contacts.en.yml b/config/locales/admin/contacts.en.yml index 44759886a9..295e33acee 100644 --- a/config/locales/admin/contacts.en.yml +++ b/config/locales/admin/contacts.en.yml @@ -3,6 +3,7 @@ en: contacts: index: reset_btn: Reset + csv_btn: CSV edit: new_status_btn: Add new status diff --git a/config/locales/admin/disputes.en.yml b/config/locales/admin/disputes.en.yml index b50ce12cc0..4cb78d7e91 100644 --- a/config/locales/admin/disputes.en.yml +++ b/config/locales/admin/disputes.en.yml @@ -12,6 +12,7 @@ en: title: Disputed domains new_btn: New disputed domain reset_btn: Reset + csv_btn: CSV form: password_hint: Generated automatically if left blank diff --git a/config/locales/admin/domain_versions.en.yml b/config/locales/admin/domain_versions.en.yml index 93111757c9..8bb67bba4a 100644 --- a/config/locales/admin/domain_versions.en.yml +++ b/config/locales/admin/domain_versions.en.yml @@ -3,6 +3,7 @@ en: domain_versions: archive: reset_btn: Reset + csv_btn: CSV registrant_placeholder: Registrant registrant: Registrant diff --git a/config/locales/admin/epp_logs.en.yml b/config/locales/admin/epp_logs.en.yml index ee634b1d0c..3a0600fd88 100644 --- a/config/locales/admin/epp_logs.en.yml +++ b/config/locales/admin/epp_logs.en.yml @@ -4,5 +4,6 @@ en: index: title: EPP log reset_btn: Reset + csv_btn: CSV show: title: EPP log diff --git a/config/locales/admin/repp_logs.en.yml b/config/locales/admin/repp_logs.en.yml index 0a58fe7bab..978270df6b 100644 --- a/config/locales/admin/repp_logs.en.yml +++ b/config/locales/admin/repp_logs.en.yml @@ -4,6 +4,7 @@ en: index: title: REPP log reset_btn: Reset + csv_btn: CSV show: title: REPP log diff --git a/config/locales/admin/reserved_domains.en.yml b/config/locales/admin/reserved_domains.en.yml index cc1a3c4d71..e8ccebf1b1 100644 --- a/config/locales/admin/reserved_domains.en.yml +++ b/config/locales/admin/reserved_domains.en.yml @@ -5,6 +5,7 @@ en: title: Reserved domains new_btn: New reserved domain reset_btn: Reset + csv_btn: CSV form: password_hint: Generated automatically if left blank diff --git a/test/integration/admin_area/blocked_domains_test.rb b/test/integration/admin_area/blocked_domains_test.rb index 7df9d30e71..b4195240a3 100644 --- a/test/integration/admin_area/blocked_domains_test.rb +++ b/test/integration/admin_area/blocked_domains_test.rb @@ -3,7 +3,7 @@ # /admin/blocked_domains -class AdminAreaBlockedDomainsIntegrationTest < JavaScriptApplicationSystemTestCase +class AdminAreaBlockedDomainsIntegrationTest < JavaScriptApplicationSystemTestCase setup do WebMock.allow_net_connect! sign_in users(:admin) @@ -48,6 +48,19 @@ def test_find_blocked_domain_from_blocked_list assert_text @domain.name end + def test_download_blocked_domains + now = Time.zone.parse('2010-07-05 08:00') + travel_to now + + get admin_blocked_domains_path(format: :csv) + + assert_response :ok + assert_equal 'text/csv; charset=utf-8', response.headers['Content-Type'] + assert_equal %(attachment; filename="blocked_domains_#{Time.zone.now.to_formatted_s(:number)}.csv"; filename*=UTF-8''blocked_domains_#{Time.zone.now.to_formatted_s(:number)}.csv), + response.headers['Content-Disposition'] + assert_not_empty response.body + end + private def visit_admin_blocked_domains_path diff --git a/test/integration/admin_area/disputes_test.rb b/test/integration/admin_area/disputes_test.rb index 3362b95ba5..6a5fea960f 100644 --- a/test/integration/admin_area/disputes_test.rb +++ b/test/integration/admin_area/disputes_test.rb @@ -70,4 +70,17 @@ def test_can_not_create_overlapping_dispute assert_text 'Dispute already exists for this domain at given timeframe' end + + def test_download_disputes + now = Time.zone.parse('2010-07-05 08:00') + travel_to now + + get admin_disputes_path(format: :csv) + + assert_response :ok + assert_equal 'text/csv; charset=utf-8', response.headers['Content-Type'] + assert_equal %(attachment; filename="disputes_#{Time.zone.now.to_formatted_s(:number)}.csv"; filename*=UTF-8''disputes_#{Time.zone.now.to_formatted_s(:number)}.csv), + response.headers['Content-Disposition'] + assert_not_empty response.body + end end diff --git a/test/integration/admin_area/epp_logs_test.rb b/test/integration/admin_area/epp_logs_test.rb index 82c450fadf..dc159511b4 100644 --- a/test/integration/admin_area/epp_logs_test.rb +++ b/test/integration/admin_area/epp_logs_test.rb @@ -36,6 +36,19 @@ def test_dates_sort assert_match /#{date_now}/, epp_log_date end + def test_download_epp_logs + now = Time.zone.parse('2010-07-05 08:00') + travel_to now + + get admin_epp_logs_path(format: :csv) + + assert_response :ok + assert_equal 'text/csv; charset=utf-8', response.headers['Content-Type'] + assert_equal %(attachment; filename="epp_logs_#{Time.zone.now.to_formatted_s(:number)}.csv"; filename*=UTF-8''epp_logs_#{Time.zone.now.to_formatted_s(:number)}.csv), + response.headers['Content-Disposition'] + assert_not_empty response.body + end + private def send_epp_request_hello diff --git a/test/integration/admin_area/repp_logs_test.rb b/test/integration/admin_area/repp_logs_test.rb index 6630a6d577..24ab665f40 100644 --- a/test/integration/admin_area/repp_logs_test.rb +++ b/test/integration/admin_area/repp_logs_test.rb @@ -15,9 +15,22 @@ def test_show_repp_log_page visit admin_repp_logs_path get repp_v1_contacts_path visit admin_repp_logs_path - + find(:xpath, "//tbody/tr/td/a", match: :first).click assert_text 'REPP log' end + + def test_download_repp_logs + now = Time.zone.parse('2010-07-05 08:00') + travel_to now + + get admin_repp_logs_path(format: :csv) + + assert_response :ok + assert_equal 'text/csv; charset=utf-8', response.headers['Content-Type'] + assert_equal %(attachment; filename="repp_logs_#{Time.zone.now.to_formatted_s(:number)}.csv"; filename*=UTF-8''repp_logs_#{Time.zone.now.to_formatted_s(:number)}.csv), + response.headers['Content-Disposition'] + assert_not_empty response.body + end end diff --git a/test/integration/admin_area/reserved_domains_test.rb b/test/integration/admin_area/reserved_domains_test.rb index c09c3723ba..ba409a2f66 100644 --- a/test/integration/admin_area/reserved_domains_test.rb +++ b/test/integration/admin_area/reserved_domains_test.rb @@ -12,7 +12,7 @@ class AdminAreaReservedDomainsIntegrationTest < JavaScriptApplicationSystemTestC end def test_remove_reserved_domain - visit admin_reserved_domains_path + visit admin_reserved_domains_path click_link_or_button 'Delete', match: :first page.driver.browser.switch_to.alert.accept @@ -36,4 +36,17 @@ def test_update_reserved_domain assert_text 'Domain updated!' end + + def test_download_reserved_domains + now = Time.zone.parse('2010-07-05 08:00') + travel_to now + + get admin_reserved_domains_path(format: :csv) + + assert_response :ok + assert_equal 'text/csv; charset=utf-8', response.headers['Content-Type'] + assert_equal %(attachment; filename="reserved_domains_#{Time.zone.now.to_formatted_s(:number)}.csv"; filename*=UTF-8''reserved_domains_#{Time.zone.now.to_formatted_s(:number)}.csv), + response.headers['Content-Disposition'] + assert_not_empty response.body + end end diff --git a/test/system/admin_area/contact_versions_test.rb b/test/system/admin_area/contact_versions_test.rb index 801353e28f..f040646bba 100644 --- a/test/system/admin_area/contact_versions_test.rb +++ b/test/system/admin_area/contact_versions_test.rb @@ -26,7 +26,7 @@ def create_contact_with_history VALUES ('Contact', 75, 'update', '1-AdminUser', '{"id": 75, "code": "test_code", "auth_info": "8b4d462aa04194ca78840a", "registrar_id": #{@registrar.id}, "old_field": "value", "legal_id": "123"}', - '{"other_made_up_field": "value"}', + '{"other_made_up_field": "value"}', '2018-04-23 15:50:48.113491', '2018-04-23 12:44:56', '{"legal_documents":[null]}', null, null ) @@ -56,4 +56,17 @@ def test_removed_fields_are_not_causing_errors_in_details_view assert_text 'Best Names' assert_text '23.04.18, 18:50 update 1-AdminUser' end + + def test_download_contact_history + now = Time.zone.parse('2010-07-05 08:00') + travel_to now + + get admin_contact_versions_path(format: :csv) + + assert_response :ok + assert_equal 'text/csv; charset=utf-8', response.headers['Content-Type'] + assert_equal %(attachment; filename="contact_history_#{Time.zone.now.to_formatted_s(:number)}.csv"; filename*=UTF-8''contact_history_#{Time.zone.now.to_formatted_s(:number)}.csv), + response.headers['Content-Disposition'] + assert_not_empty response.body + end end diff --git a/test/system/admin_area/contacts_test.rb b/test/system/admin_area/contacts_test.rb index ea37c7bc48..8fca6684bf 100644 --- a/test/system/admin_area/contacts_test.rb +++ b/test/system/admin_area/contacts_test.rb @@ -39,4 +39,17 @@ def test_display_details assert_text('Street Main Street City New York Postcode 12345 ' \ 'State New York State Country United States of America') end + + def test_download_contacts + now = Time.zone.parse('2010-07-05 08:00') + travel_to now + + get admin_contacts_path(format: :csv) + + assert_response :ok + assert_equal 'text/csv; charset=utf-8', response.headers['Content-Type'] + 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_not_empty response.body + end end diff --git a/test/system/admin_area/domain_versions_test.rb b/test/system/admin_area/domain_versions_test.rb index 65f081fe49..e440b09350 100644 --- a/test/system/admin_area/domain_versions_test.rb +++ b/test/system/admin_area/domain_versions_test.rb @@ -88,6 +88,19 @@ def test_search_name_param 'http://www.example.com/admin/domain_versions?q[name]=shop.test&q[registrant]=&q[registrar]=&q[event]=&results_per_page=' end + def test_download_domain_history + now = Time.zone.parse('2010-07-05 08:00') + travel_to now + + get admin_domain_versions_path(format: :csv) + + assert_response :ok + assert_equal 'text/csv; charset=utf-8', response.headers['Content-Type'] + assert_equal %(attachment; filename="domain_history_#{Time.zone.now.to_formatted_s(:number)}.csv"; filename*=UTF-8''domain_history_#{Time.zone.now.to_formatted_s(:number)}.csv), + response.headers['Content-Disposition'] + assert_not_empty response.body + end + def test_search_event_param # TODO end From 8f17712232e26bcf36bce9e0b163e007b5b5a578 Mon Sep 17 00:00:00 2001 From: dinsmol Date: Thu, 12 Aug 2021 11:25:19 +0300 Subject: [PATCH 2/8] fixed codeclimate error --- .../admin/domain_versions_controller.rb | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb index b7f321fee9..e2224f84eb 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -45,17 +45,7 @@ def index @versions = @q.result.page(params[:page]) @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? - respond_to do |format| - format.html do - render 'admin/domain_versions/archive' - end - format.csv do - raw_csv = @q.result.to_csv - send_data raw_csv, - filename: "domain_history_#{Time.zone.now.to_formatted_s(:number)}.csv", - type: "#{Mime[:csv]}; charset=utf-8" - end - end + render_by_format end def show @@ -83,5 +73,19 @@ def search def create_where_string(key, value) " AND object->>'#{key}' ~* '#{value}'" end + + def render_by_format + respond_to do |format| + format.html do + render 'admin/domain_versions/archive' + end + format.csv do + raw_csv = @q.result.to_csv + send_data raw_csv, + filename: "domain_history_#{Time.zone.now.to_formatted_s(:number)}.csv", + type: "#{Mime[:csv]}; charset=utf-8" + end + end + end end end From d2d31c049c71c1f4eeb1d24270bb9af1bed453ea Mon Sep 17 00:00:00 2001 From: dinsmol Date: Thu, 12 Aug 2021 12:02:34 +0300 Subject: [PATCH 3/8] refactored --- app/controllers/admin/base_controller.rb | 14 ++++++++++++++ .../admin/blocked_domains_controller.rb | 12 +----------- .../admin/contact_versions_controller.rb | 12 +----------- app/controllers/admin/contacts_controller.rb | 12 +----------- app/controllers/admin/disputes_controller.rb | 12 +----------- .../admin/domain_versions_controller.rb | 16 +--------------- app/controllers/admin/domains_controller.rb | 10 +--------- app/controllers/admin/epp_logs_controller.rb | 13 +------------ app/controllers/admin/repp_logs_controller.rb | 13 +------------ .../admin/reserved_domains_controller.rb | 12 +----------- app/lib/{csv_report_helper.rb => to_csv.rb} | 2 +- app/models/api_log/epp_log.rb | 2 +- app/models/api_log/repp_log.rb | 2 +- app/models/blocked_domain.rb | 2 +- app/models/dispute.rb | 2 +- app/models/domain.rb | 2 +- app/models/reserved_domain.rb | 2 +- app/models/version/contact_version.rb | 2 +- app/models/version/domain_version.rb | 2 +- 19 files changed, 32 insertions(+), 112 deletions(-) rename app/lib/{csv_report_helper.rb => to_csv.rb} (88%) diff --git a/app/controllers/admin/base_controller.rb b/app/controllers/admin/base_controller.rb index b5e91f2abd..d38c023169 100644 --- a/app/controllers/admin/base_controller.rb +++ b/app/controllers/admin/base_controller.rb @@ -21,5 +21,19 @@ def user_for_paper_trail def paginate? params[:results_per_page].to_i.positive? end + + def render_by_format(page, filename) + respond_to do |format| + format.html do + render page + end + format.csv do + raw_csv = @q.result.to_csv + send_data raw_csv, + filename: "#{filename}_#{Time.zone.now.to_formatted_s(:number)}.csv", + type: "#{Mime[:csv]}; charset=utf-8" + end + end + end end end diff --git a/app/controllers/admin/blocked_domains_controller.rb b/app/controllers/admin/blocked_domains_controller.rb index bd9acd14a6..d9bcb4f0f0 100644 --- a/app/controllers/admin/blocked_domains_controller.rb +++ b/app/controllers/admin/blocked_domains_controller.rb @@ -9,17 +9,7 @@ def index @domains = @q.result.page(params[:page]) @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? - respond_to do |format| - format.html do - render 'admin/blocked_domains/index' - end - format.csv do - raw_csv = @q.result.to_csv - send_data raw_csv, - filename: "blocked_domains_#{Time.zone.now.to_formatted_s(:number)}.csv", - type: "#{Mime[:csv]}; charset=utf-8" - end - end + render_by_format('admin/blocked_domains/index', 'blocked_domains') end def new diff --git a/app/controllers/admin/contact_versions_controller.rb b/app/controllers/admin/contact_versions_controller.rb index 629e7edc71..b720290d80 100644 --- a/app/controllers/admin/contact_versions_controller.rb +++ b/app/controllers/admin/contact_versions_controller.rb @@ -28,17 +28,7 @@ def index @versions = @q.result.page(params[:page]) @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? - respond_to do |format| - format.html do - render 'admin/contact_versions/index' - end - format.csv do - raw_csv = @q.result.to_csv - send_data raw_csv, - filename: "contact_history_#{Time.zone.now.to_formatted_s(:number)}.csv", - type: "#{Mime[:csv]}; charset=utf-8" - end - end + render_by_format('admin/contact_versions/index', 'contact_history') end def show diff --git a/app/controllers/admin/contacts_controller.rb b/app/controllers/admin/contacts_controller.rb index 37e2acbc93..ea6ba066a8 100644 --- a/app/controllers/admin/contacts_controller.rb +++ b/app/controllers/admin/contacts_controller.rb @@ -25,17 +25,7 @@ def index @contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? - respond_to do |format| - format.html do - @contacts - end - format.csv do - raw_csv = @q.result.distinct.to_csv - send_data raw_csv, - filename: "contacts_#{Time.zone.now.to_formatted_s(:number)}.csv", - type: "#{Mime[:csv]}; charset=utf-8" - end - end + render_by_format('admin/contacts/index', 'contacts') end def filter_by_flags(contacts) diff --git a/app/controllers/admin/disputes_controller.rb b/app/controllers/admin/disputes_controller.rb index fa184b345c..2b9eb041f6 100644 --- a/app/controllers/admin/disputes_controller.rb +++ b/app/controllers/admin/disputes_controller.rb @@ -11,17 +11,7 @@ def index @disputes = sortable_dispute_query_for(Dispute.active.all, params[:q]) @closed_disputes = sortable_dispute_query_for(Dispute.closed.all, params[:q], closed: true) - respond_to do |format| - format.html do - render 'admin/disputes/index' - end - format.csv do - raw_csv = @q.result.to_csv - send_data raw_csv, - filename: "disputes_#{Time.zone.now.to_formatted_s(:number)}.csv", - type: "#{Mime[:csv]}; charset=utf-8" - end - end + render_by_format('admin/disputes/index', 'disputes') end # GET /admin/disputes/1 diff --git a/app/controllers/admin/domain_versions_controller.rb b/app/controllers/admin/domain_versions_controller.rb index e2224f84eb..511da6a0bd 100644 --- a/app/controllers/admin/domain_versions_controller.rb +++ b/app/controllers/admin/domain_versions_controller.rb @@ -45,7 +45,7 @@ def index @versions = @q.result.page(params[:page]) @versions = @versions.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? - render_by_format + render_by_format('admin/domain_versions/archive', 'domain_history') end def show @@ -73,19 +73,5 @@ def search def create_where_string(key, value) " AND object->>'#{key}' ~* '#{value}'" end - - def render_by_format - respond_to do |format| - format.html do - render 'admin/domain_versions/archive' - end - format.csv do - raw_csv = @q.result.to_csv - send_data raw_csv, - filename: "domain_history_#{Time.zone.now.to_formatted_s(:number)}.csv", - type: "#{Mime[:csv]}; charset=utf-8" - end - end - end end end diff --git a/app/controllers/admin/domains_controller.rb b/app/controllers/admin/domains_controller.rb index 3e2d786719..5d3bd82da9 100644 --- a/app/controllers/admin/domains_controller.rb +++ b/app/controllers/admin/domains_controller.rb @@ -29,15 +29,7 @@ def index end @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? - respond_to do |format| - format.html do - @domains - end - format.csv do - raw_csv = @domains.to_csv - send_data raw_csv, filename: 'domains.csv', type: "#{Mime[:csv]}; charset=utf-8" - end - end + render_by_format('admin/domains/index', 'domains') end def show diff --git a/app/controllers/admin/epp_logs_controller.rb b/app/controllers/admin/epp_logs_controller.rb index 3f7975b9ee..e375a859ff 100644 --- a/app/controllers/admin/epp_logs_controller.rb +++ b/app/controllers/admin/epp_logs_controller.rb @@ -14,17 +14,7 @@ def index @count = @q.result.count @epp_logs = @epp_logs.per(params[:results_per_page]) if paginate? - respond_to do |format| - format.html do - render 'admin/epp_logs/index' - end - format.csv do - raw_csv = @q.result.to_csv - send_data raw_csv, - filename: "epp_logs_#{Time.zone.now.to_formatted_s(:number)}.csv", - type: "#{Mime[:csv]}; charset=utf-8" - end - end + render_by_format('admin/epp_logs/index', 'epp_logs') end def show @@ -43,7 +33,6 @@ def set_default_dates params[:q][:created_at_gteq] = Date.send(default_date).strftime("%Y-%m-%d") end - end end end diff --git a/app/controllers/admin/repp_logs_controller.rb b/app/controllers/admin/repp_logs_controller.rb index f6eabafebb..b26236e77d 100644 --- a/app/controllers/admin/repp_logs_controller.rb +++ b/app/controllers/admin/repp_logs_controller.rb @@ -14,17 +14,7 @@ def index @count = @q.result.count @repp_logs = @repp_logs.per(params[:results_per_page]) if paginate? - respond_to do |format| - format.html do - render 'admin/repp_logs/index' - end - format.csv do - raw_csv = @q.result.to_csv - send_data raw_csv, - filename: "repp_logs_#{Time.zone.now.to_formatted_s(:number)}.csv", - type: "#{Mime[:csv]}; charset=utf-8" - end - end + render_by_format('admin/repp_logs/index', 'repp_logs') end def show @@ -44,7 +34,6 @@ def set_default_dates params[:q][:created_at_gteq] = Date.send(default_date).strftime("%Y-%m-%d") end - end end end diff --git a/app/controllers/admin/reserved_domains_controller.rb b/app/controllers/admin/reserved_domains_controller.rb index aafe334f29..430913fa18 100644 --- a/app/controllers/admin/reserved_domains_controller.rb +++ b/app/controllers/admin/reserved_domains_controller.rb @@ -10,17 +10,7 @@ def index @domains = @q.result.page(params[:page]) @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? - respond_to do |format| - format.html do - render 'admin/reserved_domains/index' - end - format.csv do - raw_csv = @q.result.to_csv - send_data raw_csv, - filename: "reserved_domains_#{Time.zone.now.to_formatted_s(:number)}.csv", - type: "#{Mime[:csv]}; charset=utf-8" - end - end + render_by_format('admin/reserved_domains/index', 'reserved_domains') end def new diff --git a/app/lib/csv_report_helper.rb b/app/lib/to_csv.rb similarity index 88% rename from app/lib/csv_report_helper.rb rename to app/lib/to_csv.rb index ac1e696236..fa9b9a66c6 100644 --- a/app/lib/csv_report_helper.rb +++ b/app/lib/to_csv.rb @@ -1,4 +1,4 @@ -module CsvReportHelper +module ToCsv def to_csv CSV.generate do |csv| csv << column_names diff --git a/app/models/api_log/epp_log.rb b/app/models/api_log/epp_log.rb index 6f4fe2644c..feed1ecadf 100644 --- a/app/models/api_log/epp_log.rb +++ b/app/models/api_log/epp_log.rb @@ -1,5 +1,5 @@ module ApiLog class EppLog < Db - extend CsvReportHelper + extend ToCsv end end diff --git a/app/models/api_log/repp_log.rb b/app/models/api_log/repp_log.rb index f983c8c99b..62dcee2383 100644 --- a/app/models/api_log/repp_log.rb +++ b/app/models/api_log/repp_log.rb @@ -1,5 +1,5 @@ module ApiLog class ReppLog < Db - extend CsvReportHelper + extend ToCsv end end diff --git a/app/models/blocked_domain.rb b/app/models/blocked_domain.rb index 9804e999e1..286345ea49 100644 --- a/app/models/blocked_domain.rb +++ b/app/models/blocked_domain.rb @@ -1,6 +1,6 @@ class BlockedDomain < ApplicationRecord include Versions - extend CsvReportHelper + extend ToCsv before_save :generate_data after_destroy :remove_data diff --git a/app/models/dispute.rb b/app/models/dispute.rb index ef9412cc08..cbf93566a2 100644 --- a/app/models/dispute.rb +++ b/app/models/dispute.rb @@ -1,5 +1,5 @@ class Dispute < ApplicationRecord - extend CsvReportHelper + extend ToCsv include WhoisStatusPopulate validates :domain_name, :password, :starts_at, :expires_at, presence: true before_validation :fill_empty_passwords, :set_expiry_date diff --git a/app/models/domain.rb b/app/models/domain.rb index ba2fb114c9..010e06cc43 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -1,5 +1,5 @@ class Domain < ApplicationRecord - extend CsvReportHelper + extend ToCsv include UserEvents include Roids include Versions # version/domain_version.rb diff --git a/app/models/reserved_domain.rb b/app/models/reserved_domain.rb index ea8eab318e..97fe84b724 100644 --- a/app/models/reserved_domain.rb +++ b/app/models/reserved_domain.rb @@ -1,5 +1,5 @@ class ReservedDomain < ApplicationRecord - extend CsvReportHelper + extend ToCsv include Versions # version/reserved_domain_version.rb include WhoisStatusPopulate before_save :fill_empty_passwords diff --git a/app/models/version/contact_version.rb b/app/models/version/contact_version.rb index 279566287e..95bd4b6773 100644 --- a/app/models/version/contact_version.rb +++ b/app/models/version/contact_version.rb @@ -1,5 +1,5 @@ class Version::ContactVersion < PaperTrail::Version - extend CsvReportHelper + extend ToCsv include VersionSession self.table_name = :log_contacts diff --git a/app/models/version/domain_version.rb b/app/models/version/domain_version.rb index a9784f3252..2c6848d4bb 100644 --- a/app/models/version/domain_version.rb +++ b/app/models/version/domain_version.rb @@ -1,5 +1,5 @@ class Version::DomainVersion < PaperTrail::Version - extend CsvReportHelper + extend ToCsv include VersionSession self.table_name = :log_domains From 5ce22debf21b4c1d92237448ce82fbcd302593fd Mon Sep 17 00:00:00 2001 From: dinsmol Date: Thu, 12 Aug 2021 12:12:19 +0300 Subject: [PATCH 4/8] fixed codeclimate error --- app/controllers/admin/base_controller.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/app/controllers/admin/base_controller.rb b/app/controllers/admin/base_controller.rb index d38c023169..016c0a750b 100644 --- a/app/controllers/admin/base_controller.rb +++ b/app/controllers/admin/base_controller.rb @@ -24,9 +24,7 @@ def paginate? def render_by_format(page, filename) respond_to do |format| - format.html do - render page - end + format.html { render page } format.csv do raw_csv = @q.result.to_csv send_data raw_csv, From 8457cb1d18a4db2bf07d61f882b77446808bffdb Mon Sep 17 00:00:00 2001 From: dinsmol Date: Thu, 12 Aug 2021 12:18:42 +0300 Subject: [PATCH 5/8] fixed test --- test/system/admin_area/domains/csv_test.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/system/admin_area/domains/csv_test.rb b/test/system/admin_area/domains/csv_test.rb index 7d4b44124f..c84e2cf0eb 100644 --- a/test/system/admin_area/domains/csv_test.rb +++ b/test/system/admin_area/domains/csv_test.rb @@ -12,7 +12,7 @@ def test_downloads_domain_list_as_csv travel_to Time.zone.parse('2010-07-05 10:30') visit admin_domains_url click_link('CSV') - assert_equal "attachment; filename=\"domains.csv\"; filename*=UTF-8''domains.csv", response_headers['Content-Disposition'] + assert_equal "attachment; filename=\"domains_#{Time.zone.now.to_formatted_s(:number)}.csv\"; filename*=UTF-8''domains_#{Time.zone.now.to_formatted_s(:number)}.csv", response_headers['Content-Disposition'] assert_equal expected_csv, page.body end end From 67d7a307a18b5a841e903e013bf0003f02e3286c Mon Sep 17 00:00:00 2001 From: dinsmol Date: Fri, 13 Aug 2021 12:45:54 +0300 Subject: [PATCH 6/8] replaced each to find_each --- app/lib/to_csv.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/lib/to_csv.rb b/app/lib/to_csv.rb index fa9b9a66c6..32c288978f 100644 --- a/app/lib/to_csv.rb +++ b/app/lib/to_csv.rb @@ -2,7 +2,7 @@ module ToCsv def to_csv CSV.generate do |csv| csv << column_names - all.each do |item| + all.find_each do |item| csv << item.attributes.values_at(*column_names) end end From 2ffa28692fee8d14cf7ec0160424199e6123cdad Mon Sep 17 00:00:00 2001 From: dinsmol Date: Mon, 16 Aug 2021 15:05:13 +0300 Subject: [PATCH 7/8] reordered csv columns --- app/models/domain.rb | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/app/models/domain.rb b/app/models/domain.rb index 010e06cc43..17d0e86f42 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -1,5 +1,4 @@ class Domain < ApplicationRecord - extend ToCsv include UserEvents include Roids include Versions # version/domain_version.rb @@ -281,6 +280,21 @@ def registrant_user_indirect_domains(registrant_user) ) end + def to_csv + CSV.generate do |csv| + headers = column_names.dup + swap_elements(headers, [[0, 1], [1, 5]]) + headers[0] = 'Domain' + headers[1] = headers[1].humanize + csv << headers + all.find_each do |item| + row = item.attributes.values_at(*column_names) + swap_elements(row, [[0, 1], [1, 5]]) + csv << row + end + end + end + private def registrant_user_domains_by_registrant(registrant_user) @@ -741,4 +755,11 @@ def self.outzone_candidates def self.uses_zone?(zone) exists?(["name ILIKE ?", "%.#{zone.origin}"]) end + + def swap_elements(array, indexes) + indexes.each do |index| + array[index[0]], array[index[1]] = array[index[1]], array[index[0]] + end + array + end end From b742bb7576d146226d4bb2e7e8d5fa43f0da569b Mon Sep 17 00:00:00 2001 From: dinsmol Date: Wed, 18 Aug 2021 16:22:52 +0300 Subject: [PATCH 8/8] fixed error --- app/models/domain.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/domain.rb b/app/models/domain.rb index 17d0e86f42..4686e270f1 100644 --- a/app/models/domain.rb +++ b/app/models/domain.rb @@ -756,7 +756,7 @@ def self.uses_zone?(zone) exists?(["name ILIKE ?", "%.#{zone.origin}"]) end - def swap_elements(array, indexes) + def self.swap_elements(array, indexes) indexes.each do |index| array[index[0]], array[index[1]] = array[index[1]], array[index[0]] end