From b65a2ca924ecdb498064ef8ee0d6f412dfd4487f Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Fri, 22 Jan 2021 16:57:37 +0500 Subject: [PATCH 1/3] Add button to download filtered domains --- app/assets/javascripts/admin/application.coffee | 2 ++ app/controllers/admin/domains_controller.rb | 11 ++++++++++- app/views/admin/domains/_search_form.html.erb | 5 +++++ config/locales/admin/domains.en.yml | 1 + 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/app/assets/javascripts/admin/application.coffee b/app/assets/javascripts/admin/application.coffee index 4c7e6acb2..a149d89cf 100644 --- a/app/assets/javascripts/admin/application.coffee +++ b/app/assets/javascripts/admin/application.coffee @@ -8,6 +8,8 @@ $(window).load -> $('[data-toggle="popover"]').popover() + $('[data-toggle="tooltip"]').tooltip() + # doublescroll $('[data-doublescroll]').doubleScroll({ onlyIfScroll: false, diff --git a/app/controllers/admin/domains_controller.rb b/app/controllers/admin/domains_controller.rb index 4a8e5961e..3e2d78671 100644 --- a/app/controllers/admin/domains_controller.rb +++ b/app/controllers/admin/domains_controller.rb @@ -27,8 +27,17 @@ module Admin params[:q][:name_matches] = n_cache # we don't want to show wildcards in search form end 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 end def show diff --git a/app/views/admin/domains/_search_form.html.erb b/app/views/admin/domains/_search_form.html.erb index bc317ea0b..e9487f803 100644 --- a/app/views/admin/domains/_search_form.html.erb +++ b/app/views/admin/domains/_search_form.html.erb @@ -64,6 +64,11 @@   + <%= link_to t('.reset_btn'), admin_domains_path, class: 'btn btn-default' %> diff --git a/config/locales/admin/domains.en.yml b/config/locales/admin/domains.en.yml index c6e96bb15..cee18ee6d 100644 --- a/config/locales/admin/domains.en.yml +++ b/config/locales/admin/domains.en.yml @@ -11,6 +11,7 @@ en: search_form: reset_btn: Reset + download_csv_btn: "Download CSV" form: pending_delete: &pending_delete From 4b388cc6714992670efccd72c2e9edba27ff3ced Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Mon, 25 Jan 2021 15:42:42 +0500 Subject: [PATCH 2/3] Add test for admin csv download --- test/system/admin_area/domains/csv_test.rb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 test/system/admin_area/domains/csv_test.rb diff --git a/test/system/admin_area/domains/csv_test.rb b/test/system/admin_area/domains/csv_test.rb new file mode 100644 index 000000000..0333725dc --- /dev/null +++ b/test/system/admin_area/domains/csv_test.rb @@ -0,0 +1,18 @@ +require 'application_system_test_case' + +class AdminAreaCsvTest < ApplicationSystemTestCase + setup do + sign_in users(:admin) + end + + def test_downloads_domain_list_as_csv + search_params = {"valid_to_lteq"=>nil} + expected_csv = Domain.includes(:registrar, :registrant).search(search_params).result.to_csv + + travel_to Time.zone.parse('2010-07-05 10:30') + visit admin_domains_url + click_link(class: 'glyphicon glyphicon-list-alt') + assert_equal "attachment; filename=\"domains.csv\"; filename*=UTF-8''domains.csv", response_headers['Content-Disposition'] + assert_equal expected_csv, page.body + end +end From d39b346a8445480ad809ac35c4cccf723893f05b Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Mon, 25 Jan 2021 19:45:47 +0500 Subject: [PATCH 3/3] Fix domain filtering in csv download --- .codeclimate.yml | 3 +++ app/views/admin/domains/_search_form.html.erb | 21 +++++++++---------- config/locales/admin/domains.en.yml | 2 +- test/system/admin_area/domains/csv_test.rb | 2 +- 4 files changed, 15 insertions(+), 13 deletions(-) diff --git a/.codeclimate.yml b/.codeclimate.yml index d079d891f..2324522fc 100644 --- a/.codeclimate.yml +++ b/.codeclimate.yml @@ -7,6 +7,9 @@ prepare: plugins: brakeman: enabled: true + checks: + mass_assign_permit!: + enabled: false bundler-audit: enabled: true duplication: diff --git a/app/views/admin/domains/_search_form.html.erb b/app/views/admin/domains/_search_form.html.erb index e9487f803..1b1f50491 100644 --- a/app/views/admin/domains/_search_form.html.erb +++ b/app/views/admin/domains/_search_form.html.erb @@ -6,7 +6,7 @@ <%= f.search_field :name_matches, value: params[:q][:name_matches], class: 'form-control', placeholder: t(:name) %> -
+
<%= f.label :registrant_ident, for: nil %> <%= f.search_field :registrant_ident_eq, class: 'form-control', placeholder: t(:registrant_ident) %> @@ -18,7 +18,7 @@ <%= f.search_field :contacts_ident_eq, class: 'form-control', placeholder: t(:contact_ident) %>
-
+
<%= f.label :nameserver_hostname, for: nil %> <%= f.search_field :nameservers_hostname_eq, class: 'form-control', placeholder: t(:nameserver_hostname) %> @@ -26,7 +26,7 @@
-
+
<%= f.label :registrar_name, for: nil %> <%= f.select :registrar_id_eq, Registrar.all.map { |x| [x, x.id] }, { include_blank: true }, class: 'form-control selectize' %> @@ -38,7 +38,7 @@ <%= f.search_field :valid_to_gteq, value: params[:q][:valid_to_gteq], class: 'form-control js-datepicker', placeholder: t(:valid_to_from) %>
-
+
<%= f.label :valid_to_until, for: nil %> <%= f.search_field :valid_to_lteq, value: params[:q][:valid_to_lteq], class: 'form-control js-datepicker', placeholder: t(:valid_to_until) %> @@ -46,7 +46,7 @@
-
+
<%= label_tag :status, nil, for: nil %> <%= select_tag :statuses_contains, options_for_select(DomainStatus::STATUSES, params[:statuses_contains]), { multiple: true, class: 'form-control js-combobox' } %> @@ -58,18 +58,17 @@ <%= text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) %>
-
+
- + <%= link_to t('.download_csv_btn'), admin_domains_path(format: :csv, params: params.permit!), + "data-toggle" => "tooltip", "data-placement" => "bottom", "title" => t('.download_csv_btn'), + class: 'btn btn-default' %> <%= link_to t('.reset_btn'), admin_domains_path, class: 'btn btn-default' %> +
<% end %> diff --git a/config/locales/admin/domains.en.yml b/config/locales/admin/domains.en.yml index cee18ee6d..ce59294dd 100644 --- a/config/locales/admin/domains.en.yml +++ b/config/locales/admin/domains.en.yml @@ -11,7 +11,7 @@ en: search_form: reset_btn: Reset - download_csv_btn: "Download CSV" + download_csv_btn: CSV form: pending_delete: &pending_delete diff --git a/test/system/admin_area/domains/csv_test.rb b/test/system/admin_area/domains/csv_test.rb index 0333725dc..7d4b44124 100644 --- a/test/system/admin_area/domains/csv_test.rb +++ b/test/system/admin_area/domains/csv_test.rb @@ -11,7 +11,7 @@ class AdminAreaCsvTest < ApplicationSystemTestCase travel_to Time.zone.parse('2010-07-05 10:30') visit admin_domains_url - click_link(class: 'glyphicon glyphicon-list-alt') + click_link('CSV') assert_equal "attachment; filename=\"domains.csv\"; filename*=UTF-8''domains.csv", response_headers['Content-Disposition'] assert_equal expected_csv, page.body end