diff --git a/app/controllers/registrant/domains_controller.rb b/app/controllers/registrant/domains_controller.rb
index b8cd8f37a..fc66806e2 100644
--- a/app/controllers/registrant/domains_controller.rb
+++ b/app/controllers/registrant/domains_controller.rb
@@ -4,11 +4,29 @@ class Registrant::DomainsController < RegistrantController
params[:q] ||= {}
normalize_search_parameters do
- @q = current_user_domains.search(params[:q])
- @domains = @q.result.page(params[:page])
+ @q = current_user_domains.search(search_params)
end
- @domains = @domains.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?
+ domains = @q.result
+
+ respond_to do |format|
+ format.html do
+ @domains = domains.page(params[:page])
+ domains_per_page = params[:results_per_page].to_i
+ @domains = @domains.per(domains_per_page) if domains_per_page.positive?
+ end
+ format.csv do
+ raw_csv = @q.result.to_csv
+ send_data raw_csv, filename: 'domains.csv', type: "#{Mime[:csv]}; charset=utf-8"
+ end
+ format.pdf do
+ view = ActionView::Base.new(ActionController::Base.view_paths, domains: domains)
+ raw_html = view.render(file: 'registrant/domains/list_pdf', layout: false)
+ raw_pdf = domains.pdf(raw_html)
+
+ send_data raw_pdf, filename: 'domains.pdf'
+ end
+ end
end
def show
@@ -32,23 +50,6 @@ class Registrant::DomainsController < RegistrantController
end
end
- def download_list
- authorize! :view, :registrant_domains
- params[:q] ||= {}
- normalize_search_parameters do
- @q = current_user_domains.search(params[:q])
- @domains = @q
- end
-
- respond_to do |format|
- format.csv { render text: @domains.result.to_csv }
- format.pdf do
- pdf = @domains.result.pdf(render_to_string('registrant/domains/download_list', layout: false))
- send_data pdf, filename: 'domains.pdf'
- end
- end
- end
-
private
def normalize_search_parameters
@@ -70,4 +71,9 @@ class Registrant::DomainsController < RegistrantController
registrant_domain_delete_confirm_url(token: domain.registrant_verification_token)
end
end
+
+ def search_params
+ params.require(:q).permit(:name_matches, :registrant_ident_eq, :valid_to_gteq, :valid_to_lteq,
+ :results_per_page)
+ end
end
\ No newline at end of file
diff --git a/app/controllers/registrar/contacts_controller.rb b/app/controllers/registrar/contacts_controller.rb
index f343f9bfb..ec280a46c 100644
--- a/app/controllers/registrar/contacts_controller.rb
+++ b/app/controllers/registrar/contacts_controller.rb
@@ -30,37 +30,29 @@ class Registrar
normalize_search_parameters do
@q = contacts.search(search_params)
- @contacts = @q.result(distinct: :true).page(params[:page])
end
- @contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i.positive?
- end
-
- def download_list
- authorize! :view, Depp::Contact
-
- params[:q] ||= {}
- params[:q].delete_if { |_k, v| v.blank? }
- if params[:q].length == 1 && params[:q][:name_matches].present?
- @contacts = Contact.find_by(name: params[:q][:name_matches])
- end
-
- contacts = current_registrar_user.registrar.contacts.includes(:registrar)
- contacts = contacts.filter_by_states(params[:statuses_contains]) if params[:statuses_contains]
-
- normalize_search_parameters do
- @q = contacts.search(params[:q])
- @contacts = @q.result
- end
+ contacts = @q.result
respond_to do |format|
- format.csv { render text: @contacts.to_csv }
+ format.html do
+ contacts_per_page = params[:results_per_page].to_i
+ @contacts = contacts.page(params[:page])
+ @contacts = @contacts.per(contacts_per_page) if contacts_per_page.positive?
+ end
+ format.csv do
+ raw_csv = contacts.to_csv
+ send_data raw_csv, filename: 'contacts.csv', type: "#{Mime[:csv]}; charset=utf-8"
+ end
format.pdf do
- pdf = @contacts.pdf(render_to_string('registrar/contacts/download_list', layout: false))
- send_data pdf, filename: 'contacts.pdf'
+ view = ActionView::Base.new(ActionController::Base.view_paths, contacts: contacts)
+ view.class_eval { include ::ApplicationHelper }
+ raw_html = view.render(file: 'registrar/contacts/list_pdf', layout: false)
+ raw_pdf = contacts.pdf(raw_html)
+
+ send_data raw_pdf, filename: 'contacts.pdf'
end
end
-
end
def new
diff --git a/app/controllers/registrar/domains_controller.rb b/app/controllers/registrar/domains_controller.rb
index d2969bb69..bdab2eefc 100644
--- a/app/controllers/registrar/domains_controller.rb
+++ b/app/controllers/registrar/domains_controller.rb
@@ -47,9 +47,10 @@ class Registrar
domain_presenters << ::DomainPresenter.new(domain: domain, view: view_context)
end
- csv = Registrar::DomainListCSVPresenter.new(domains: domain_presenters, view: view_context).to_s
+ raw_csv = Registrar::DomainListCSVPresenter.new(domains: domain_presenters,
+ view: view_context).to_s
filename = "Domains_#{l(Time.zone.now, format: :filename)}.csv"
- send_data(csv, filename: filename)
+ send_data raw_csv, filename: filename, type: "#{Mime[:csv]}; charset=utf-8"
end
end
end
diff --git a/app/views/registrant/domains/download_list.haml b/app/views/registrant/domains/download_list.haml
deleted file mode 100644
index f0af344cd..000000000
--- a/app/views/registrant/domains/download_list.haml
+++ /dev/null
@@ -1,28 +0,0 @@
-!!!
-%html
- %head
- %meta{:content => "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
- %title Contacts
- %body
- .col-md-12
- .table-responsive
- %table.table.table-hover.table-bordered.table-condensed
- %thead
- %tr
- %th{class: 'col-xs-2'}
- =t(:name)
- %th{class: 'col-xs-2'}
- =t('.registrant')
- %th{class: 'col-xs-2'}
- =t(:valid_to)
- %th{class: 'col-xs-2'}
- =t(:registrar_name)
- %tbody
- - @domains.result.each do |x|
- %tr
- %td= x.name
- %td= x.registrant
- %td= l(x.valid_to, format: :short)
- %td= x.registrar
- .row
- .col-md-6
diff --git a/app/views/registrant/domains/index.html.erb b/app/views/registrant/domains/index.html.erb
index acb9afcff..1254bfbc8 100644
--- a/app/views/registrant/domains/index.html.erb
+++ b/app/views/registrant/domains/index.html.erb
@@ -18,6 +18,13 @@
<%= f.search_field :registrant_ident_eq, class: 'form-control', placeholder: t(:registrant_ident) %>
+
+
+
+ <%= label_tag t(:results_per_page) %>
+ <%= text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) %>
+
+
@@ -32,43 +39,27 @@
<%= f.search_field :valid_to_lteq, value: params[:q][:valid_to_lteq], class: 'form-control js-datepicker', placeholder: t(:valid_to_until) %>
-
-
- <%= label_tag t(:results_per_page) %>
- <%= text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) %>
-
-
+
-
-
diff --git a/app/views/registrant/domains/list_pdf.html.erb b/app/views/registrant/domains/list_pdf.html.erb
new file mode 100644
index 000000000..4ce4f5ed0
--- /dev/null
+++ b/app/views/registrant/domains/list_pdf.html.erb
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+ <%= Domain.human_attribute_name :name %> |
+ <%= Registrant.model_name.human %> |
+ <%= Domain.human_attribute_name :valid_to %> |
+ <%= Registrar.model_name.human %> |
+
+
+
+
+ <% @domains.each do |domain| %>
+
+ <%= domain.name %> |
+ <%= domain.registrant %> |
+ <%= l(domain.valid_to, format: :short) %> |
+ <%= domain.registrar %> |
+
+ <% end %>
+
+
+
+
+
+
+
diff --git a/app/views/registrar/contacts/_search_form.html.erb b/app/views/registrar/contacts/_search_form.html.erb
new file mode 100644
index 000000000..e15ff1880
--- /dev/null
+++ b/app/views/registrar/contacts/_search_form.html.erb
@@ -0,0 +1,117 @@
+<%= search_form_for [:registrar, @q], html: { style: 'margin-bottom: 0;', class: 'js-form', autocomplete: 'off' } do |f| %>
+
+
+
+ <%= f.label :name %>
+ <%= f.search_field :name_matches, value: params[:q][:name_matches], class: 'form-control', placeholder: t(:name) %>
+
+
+
+
+
+ <%= f.label t(:id) %>
+ <%= f.search_field :code_eq, class: 'form-control', placeholder: t(:id) %>
+
+
+
+
+
+ <%= f.label t(:ident) %>
+ <%= f.search_field :ident_matches, class: 'form-control', placeholder: t(:ident) %>
+
+
+
+
+
+ <%= label_tag t(:ident_type) %>
+ <%= select_tag '[q][ident_type_eq]', options_for_select(ident_types, params[:q][:ident_type_eq]), { include_blank: true, placeholder: t(:choose), class: 'form-control selectize' } %>
+
+
+
+
+
+
+
+ <%= f.label t(:email) %>
+ <%= f.search_field :email_matches, class: 'form-control', placeholder: t(:email) %>
+
+
+
+
+
+ <%= label_tag t(:country) %>
+ <%= select_tag '[q][country_code_eq]', SortedCountry.all_options(params[:q][:country_code_eq]), { include_blank: true, placeholder: t(:choose), class: 'form-control selectize' } %>
+
+
+
+
+
+ <%= label_tag t(:contact_type) %>
+ <%= select_tag '[q][domain_contacts_type_in]', options_for_select([['admin', 'AdminDomainContact'], ['tech', 'TechDomainContact'], ['registrant', 'registrant']], params[:q][:domain_contacts_type_in]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' } %>
+
+
+
+
+
+
+
+ <%= f.label t(:registrar_name) %>
+ <%= f.select :registrar_id_eq, Registrar.all.map { |x| [x, x.id] }, { include_blank: true }, class: 'form-control selectize', placeholder: t(:choose) %>
+
+
+
+
+
+ <%= f.label t(:created_at_from) %>
+ <%= f.search_field :created_at_gteq, value: params[:q][:created_at_gteq], class: 'form-control js-datepicker', placeholder: t(:created_at_from) %>
+
+
+
+
+
+ <%= f.label t(:created_at_until) %>
+ <%= f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control js-datepicker', placeholder: t(:created_at_until) %>
+
+
+
+
+
+ <%= f.label t(:updated_at) %>
+ <%= f.search_field :updated_at_gteq, value: params[:q][:updated_at_gteq], class: 'form-control js-datepicker', placeholder: t(:updated_at) %>
+
+
+
+
+
+
+
+ <%= label_tag t(:status) %>
+ <%= select_tag :statuses_contains, options_for_select(Contact::STATUSES, params[:statuses_contains]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' } %>
+
+
+
+
+
+ <%= label_tag t(:results_per_page) %>
+ <%= text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) %>
+
+
+
+
+
+
+
+
+
+ <%= button_tag t('.download_pdf_btn'),
+ formaction: registrar_contacts_path(format: :pdf),
+ name: nil,
+ class: 'btn btn-default' %>
+ <%= button_tag t('.download_csv_btn'),
+ formaction: registrar_contacts_path(format: :csv),
+ name: nil,
+ class: 'btn btn-default' %>
+ <%= link_to(t('.reset_btn'), registrar_contacts_path, class: 'btn btn-default') %>
+
+
+<% end %>
diff --git a/app/views/registrar/contacts/download_list.haml b/app/views/registrar/contacts/download_list.haml
deleted file mode 100644
index 51423a3f2..000000000
--- a/app/views/registrar/contacts/download_list.haml
+++ /dev/null
@@ -1,30 +0,0 @@
-!!!
-%html
- %head
- %meta{:content => "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
- %title Contacts
- %body
- .row
- .col-md-12
- .table-responsive
- %table.table.table-hover.table-bordered.table-condensed
- %thead
- %tr
- %th{class: 'col-xs-2'}
- =t(:name)
- %th{class: 'col-xs-2'}
- =t(:id)
- %th{class: 'col-xs-2'}
- =t(:ident)
- %th{class: 'col-xs-2'}
- =t(:created_at)
- %th{class: 'col-xs-2'}
- =t(:registrar_name)
- %tbody
- - @contacts.each do |contact|
- %tr
- %td= contact
- %td= contact.code
- %td= ident_for(contact)
- %td= l(contact.created_at, format: :short)
- %td= contact.registrar
diff --git a/app/views/registrar/contacts/index.haml b/app/views/registrar/contacts/index.haml
deleted file mode 100644
index 518e6eccf..000000000
--- a/app/views/registrar/contacts/index.haml
+++ /dev/null
@@ -1,120 +0,0 @@
-- content_for :actions do
- = link_to(t(:new), new_registrar_contact_path, class: 'btn btn-primary')
-= render 'shared/title', name: t(:contacts)
-
-.row
- .col-md-12
- = search_form_for [:registrar, @q], html: { style: 'margin-bottom: 0;', class: 'js-form', autocomplete: 'off' } do |f|
- .row
- .col-md-3
- .form-group
- = f.label :name
- = f.search_field :name_matches, value: params[:q][:name_matches], class: 'form-control', placeholder: t(:name)
- .col-md-3
- .form-group
- = f.label t(:id)
- = f.search_field :code_eq, class: 'form-control', placeholder: t(:id)
- .col-md-3
- .form-group
- = f.label t(:ident)
- = f.search_field :ident_matches, class: 'form-control', placeholder: t(:ident)
- .col-md-3
- .form-group
- = label_tag t(:ident_type)
- = select_tag '[q][ident_type_eq]', options_for_select(ident_types, params[:q][:ident_type_eq]), { include_blank: true, placeholder: t(:choose), class: 'form-control selectize' }
- .row
- .col-md-3
- .form-group
- = f.label t(:email)
- = f.search_field :email_matches, class: 'form-control', placeholder: t(:email)
- .col-md-3
- .form-group
- = label_tag t(:country)
- = select_tag '[q][country_code_eq]', SortedCountry.all_options(params[:q][:country_code_eq]), { include_blank: true, placeholder: t(:choose), class: 'form-control selectize' }
- .col-md-6
- .form-group
- = label_tag t(:contact_type)
- = select_tag '[q][domain_contacts_type_in]', options_for_select([['admin', 'AdminDomainContact'], ['tech', 'TechDomainContact'], ['registrant', 'registrant']], params[:q][:domain_contacts_type_in]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' }
- .row
- .col-md-3
- .form-group
- = f.label t(:registrar_name)
- = f.select :registrar_id_eq, Registrar.all.map { |x| [x, x.id] }, { include_blank: true }, class: 'form-control selectize', placeholder: t(:choose)
- .col-md-3
- .form-group
- = f.label t(:created_at_from)
- = f.search_field :created_at_gteq, value: params[:q][:created_at_gteq], class: 'form-control js-datepicker', placeholder: t(:created_at_from)
- .col-md-3
- .form-group
- = f.label t(:created_at_until)
- = f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control js-datepicker', placeholder: t(:created_at_until)
- .col-md-3
- .form-group
- = f.label t(:updated_at)
- = f.search_field :updated_at_gteq, value: params[:q][:updated_at_gteq], class: 'form-control js-datepicker', placeholder: t(:updated_at)
- .row
- .col-md-6
- .form-group
- = label_tag t(:status)
- = select_tag :statuses_contains, options_for_select(Contact::STATUSES, params[:statuses_contains]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' }
- .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'), registrar_contacts_path, class: 'btn btn-default')
- .row
- .col-md-3
- .btn-group{:role => "group"}
- %button.btn.btn-default.dropdown-toggle{"aria-expanded" => "false", "aria-haspopup" => "true", "data-toggle" => "dropdown", :type => "button"}
- Download
- %span.caret
- %ul.dropdown-menu
- %li= link_to 'PDF', download_list_registrar_contacts_path(q: params[:q], format: "pdf")
- %li= link_to 'CSV', download_list_registrar_contacts_path(q: params[:q], format: "csv")
- .col-md-3
- .col-md-3
- .col-md-3
-
-%hr
-.row
- .col-md-12
- .table-responsive
- %table.table.table-hover.table-bordered.table-condensed.contacts
- %thead
- %tr
- %th{class: 'col-xs-2'}
- = sort_link(@q, 'name', t(:name))
- %th{class: 'col-xs-2'}
- = sort_link(@q, 'code', t(:id))
- %th{class: 'col-xs-2'}
- = sort_link(@q, 'ident', t(:ident))
- %th{class: 'col-xs-2'}
- = sort_link(@q, 'email', t(:created_at))
- %th{class: 'col-xs-2'}
- = sort_link(@q, 'registrar_name', t(:registrar_name))
- %th{class: 'col-xs-2'}= t(:actions)
- %tbody
- - @contacts.each do |contact|
- %tr
- %td= link_to(contact.name, registrar_contact_path(id: contact.code))
- %td= contact.code
- %td= ident_for(contact)
- %td= l(contact.created_at, format: :short)
- %td
- - if contact.registrar
- = contact.registrar
- %td
- = link_to(t(:edit), edit_registrar_contact_path(contact.code), class: 'btn btn-primary btn-xs')
- = link_to(t(:delete), delete_registrar_contact_path(contact.code), class: 'btn btn-default btn-xs')
-
-.row
- .col-md-6
- = paginate @contacts
- .col-md-6.text-right
- .pagination
- = t(:result_count, count: @contacts.total_count)
diff --git a/app/views/registrar/contacts/index.html.erb b/app/views/registrar/contacts/index.html.erb
new file mode 100644
index 000000000..4a7e8759a
--- /dev/null
+++ b/app/views/registrar/contacts/index.html.erb
@@ -0,0 +1,77 @@
+<% content_for :actions do %>
+ <%= link_to(t(:new), new_registrar_contact_path, class: 'btn btn-primary') %>
+<% end %>
+<%= render 'shared/title', name: t(:contacts) %>
+
+
+ <%= render 'search_form' %>
+
+
+
+
+
+
+ <%= paginate @contacts %>
+
+
+
+
+
diff --git a/app/views/registrar/contacts/list_pdf.html.erb b/app/views/registrar/contacts/list_pdf.html.erb
new file mode 100644
index 000000000..b9bbb1c0e
--- /dev/null
+++ b/app/views/registrar/contacts/list_pdf.html.erb
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+ <%= Contact.human_attribute_name :name %> |
+ <%= Contact.human_attribute_name :code %> |
+ <%= Contact.human_attribute_name :ident %> |
+ <%= Contact.human_attribute_name :created_at %> |
+ <%= Registrar.model_name.human %> |
+
+
+
+
+ <% @contacts.each do |contact| %>
+
+ <%= contact %> |
+ <%= contact.code %> |
+ <%= ident_for(contact) %> |
+ <%= l(contact.created_at, format: :short) %> |
+ <%= contact.registrar %> |
+
+ <% end %>
+
+
+
+
+
+
+
diff --git a/app/views/registrar/domains/_search_form.html.erb b/app/views/registrar/domains/_search_form.html.erb
index b494e0d8d..743f8de60 100644
--- a/app/views/registrar/domains/_search_form.html.erb
+++ b/app/views/registrar/domains/_search_form.html.erb
@@ -74,14 +74,14 @@
-
+
- <%= button_tag t('.download_btn'), class: 'btn btn-primary export-domains-csv-btn',
- formaction: registrar_domains_path(format: 'csv') %>
+ <%= button_tag t('.download_btn'), formaction: registrar_domains_path(format: 'csv'),
+ class: 'btn btn-default' %>
<%= link_to t('.reset_btn'), registrar_domains_path, class: 'btn btn-default' %>
diff --git a/config/initializers/pdfkit.rb b/config/initializers/pdfkit.rb
index d7bbc64b8..eb0828729 100644
--- a/config/initializers/pdfkit.rb
+++ b/config/initializers/pdfkit.rb
@@ -6,7 +6,8 @@ PDFKit.configure do |config|
config.wkhtmltopdf = installed
config.default_options = {
page_size: 'A4',
- quiet: true
+ quiet: true,
+ encoding: 'utf-8',
# :print_media_type => true
}
end
diff --git a/config/locales/registrant/domains.en.yml b/config/locales/registrant/domains.en.yml
index 2dbdce79a..1e02d00e1 100644
--- a/config/locales/registrant/domains.en.yml
+++ b/config/locales/registrant/domains.en.yml
@@ -4,11 +4,10 @@ en:
index:
header: Domains
registrant: Registrant
+ download_pdf_btn: Download PDF
+ download_csv_btn: Download CSV
reset_btn: Reset
- download_list:
- registrant: Registrant
-
partials:
registrant:
header: Registrant
diff --git a/config/locales/registrar/contacts.en.yml b/config/locales/registrar/contacts.en.yml
index 84afd481d..590e419d2 100644
--- a/config/locales/registrar/contacts.en.yml
+++ b/config/locales/registrar/contacts.en.yml
@@ -1,7 +1,9 @@
en:
registrar:
contacts:
- index:
+ search_form:
+ download_pdf_btn: Download PDF
+ download_csv_btn: Download CSV
reset_btn: Reset
partials:
diff --git a/config/locales/registrar/domains.en.yml b/config/locales/registrar/domains.en.yml
index 31380074f..c98002b8f 100644
--- a/config/locales/registrar/domains.en.yml
+++ b/config/locales/registrar/domains.en.yml
@@ -17,7 +17,7 @@ en:
transfer_btn: Transfer
search_form:
- download_btn: Download as CSV
+ download_btn: Download CSV
reset_btn: Reset
domain:
diff --git a/config/routes.rb b/config/routes.rb
index 4b65087b5..4c1e25864 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -87,7 +87,6 @@ Rails.application.routes.draw do
collection do
get 'check'
- get 'download_list'
end
end
@@ -151,11 +150,6 @@ Rails.application.routes.draw do
resources :registrars, only: :show
resources :domains, only: %i[index show] do
resources :contacts, only: %i[show edit update]
-
- collection do
- get :download_list
- end
-
member do
get 'confirmation'
end
diff --git a/test/integration/registrant_area/domains_test.rb b/test/integration/registrant_area/domains_test.rb
new file mode 100644
index 000000000..11709dd5b
--- /dev/null
+++ b/test/integration/registrant_area/domains_test.rb
@@ -0,0 +1,25 @@
+require 'test_helper'
+
+class RegistrantAreaDomainsIntegrationTest < ApplicationIntegrationTest
+ setup do
+ sign_in users(:registrant)
+ end
+
+ def test_downloads_list_as_csv
+ get registrant_domains_path(format: :csv)
+
+ assert_response :ok
+ assert_equal "#{Mime[:csv]}; charset=utf-8", response.headers['Content-Type']
+ assert_equal 'attachment; filename="domains.csv"', response.headers['Content-Disposition']
+ assert_not_empty response.body
+ end
+
+ def test_downloads_list_as_pdf
+ get registrant_domains_path(format: :pdf)
+
+ assert_response :ok
+ assert_equal Mime[:pdf], response.headers['Content-Type']
+ assert_equal 'attachment; filename="domains.pdf"', response.headers['Content-Disposition']
+ assert_not_empty response.body
+ end
+end
diff --git a/test/integration/registrar_area/contacts_test.rb b/test/integration/registrar_area/contacts_test.rb
new file mode 100644
index 000000000..2597518b1
--- /dev/null
+++ b/test/integration/registrar_area/contacts_test.rb
@@ -0,0 +1,25 @@
+require 'test_helper'
+
+class RegistrarAreaContactsIntegrationTest < ApplicationIntegrationTest
+ setup do
+ sign_in users(:api_bestnames)
+ end
+
+ def test_downloads_list_as_csv
+ get registrar_contacts_path(format: :csv)
+
+ assert_response :ok
+ assert_equal "#{Mime[:csv]}; charset=utf-8", response.headers['Content-Type']
+ assert_equal 'attachment; filename="contacts.csv"', response.headers['Content-Disposition']
+ assert_not_empty response.body
+ end
+
+ def test_downloads_list_as_pdf
+ get registrar_contacts_path(format: :pdf)
+
+ assert_response :ok
+ assert_equal Mime[:pdf], response.headers['Content-Type']
+ assert_equal 'attachment; filename="contacts.pdf"', response.headers['Content-Disposition']
+ assert_not_empty response.body
+ end
+end
diff --git a/test/integration/registrar_area/domains_test.rb b/test/integration/registrar_area/domains_test.rb
new file mode 100644
index 000000000..eaa43e674
--- /dev/null
+++ b/test/integration/registrar_area/domains_test.rb
@@ -0,0 +1,20 @@
+require 'test_helper'
+
+class RegistrarAreaDomainsIntegrationTest < ApplicationIntegrationTest
+ setup do
+ sign_in users(:api_bestnames)
+ end
+
+ def test_downloads_list_as_csv
+ now = Time.zone.parse('2010-07-05 08:00')
+ travel_to now
+
+ get registrar_domains_path(format: :csv)
+
+ assert_response :ok
+ assert_equal "#{Mime[:csv]}; charset=utf-8", response.headers['Content-Type']
+ assert_equal %(attachment; filename="Domains_#{l(now, format: :filename)}.csv"),
+ response.headers['Content-Disposition']
+ assert_not_empty response.body
+ end
+end
diff --git a/test/system/registrar_area/domains_test.rb b/test/system/registrar_area/domains_test.rb
index 00d5c9e43..db51d7096 100644
--- a/test/system/registrar_area/domains_test.rb
+++ b/test/system/registrar_area/domains_test.rb
@@ -14,7 +14,7 @@ class RegistrarDomainsTest < ApplicationSystemTestCase
CSV
visit registrar_domains_url
- click_button 'Download as CSV'
+ click_button 'Download CSV'
assert_equal 'attachment; filename="Domains_2010-07-05_10.30.csv"', response_headers['Content-Disposition']
assert_equal expected_csv, page.body
end