Browse Source

Redirect to year filter if it is not selected

pull/2423/head
Kat 2 years ago committed by kosiakkatrina
parent
commit
9963f99403
  1. 4
      app/controllers/lettings_logs_controller.rb
  2. 42
      app/controllers/lettings_logs_filters_controller.rb
  3. 10
      app/models/forms/filter_form.rb
  4. 12
      app/views/filters/lettings_log_filters/years.html.erb
  5. 5
      config/routes.rb
  6. 63
      spec/requests/lettings_logs_controller_spec.rb

4
app/controllers/lettings_logs_controller.rb

@ -88,9 +88,11 @@ class LettingsLogsController < LogsController
end end
def download_csv def download_csv
redirect_to filters_years_lettings_logs_path(search: search_term, codes_only: codes_only_export?) and return if session_filters["years"].blank? || session_filters["years"].count != 1
unpaginated_filtered_logs = filter_manager.filtered_logs(current_user.lettings_logs, search_term, session_filters) unpaginated_filtered_logs = filter_manager.filtered_logs(current_user.lettings_logs, search_term, session_filters)
render "download_csv", locals: { search_term:, count: unpaginated_filtered_logs.size, post_path: email_csv_lettings_logs_path, codes_only: codes_only_export? } render "download_csv", locals: { search_term:, count: unpaginated_filtered_logs.size, post_path: email_csv_lettings_logs_path, codes_only: codes_only_export?, session_filters: }
end end
def email_csv def email_csv

42
app/controllers/lettings_logs_filters_controller.rb

@ -0,0 +1,42 @@
class LettingsLogsFiltersController < ApplicationController
before_action :session_filters, if: :current_user, only: %i[update]
before_action -> { filter_manager.serialize_filters_to_session }, if: :current_user, only: %i[update]
%w[years status needstype assigned_to owned_by managed_by].each do |filter|
define_method(filter) do
@filter_form = Forms::FilterForm.new
@filter_type = "lettings_logs"
render "filters/lettings_log_filters/#{filter}"
end
end
def update
@filter_form = Forms::FilterForm.new(filter_form_params)
if @filter_form.valid?
session_filters
redirect_to csv_download_lettings_logs_path(search: "", codes_only: true)
else
@filter_type = "lettings_logs"
@search_term = params["search"]
@codes_only = params["codes_only"]
render "filters/lettings_log_filters/years", status: :unprocessable_entity
end
end
end
private
def filter_form_params
filter_params = params.permit(years: [], status: [], needstypes: [], assigned_to: [], owned_by: [], managed_by: [])
filter_params[:years] = session_filters["years"] if filter_params[:years].blank?
filter_params
end
def session_filters
filter_manager.session_filters
end
def filter_manager
FilterManager.new(current_user:, session:, params:, filter_type: "lettings_logs")
end

10
app/models/forms/filter_form.rb

@ -0,0 +1,10 @@
module Forms
class FilterForm
include ActiveModel::Model
include ActiveModel::Validations
attr_accessor :years, :status, :needstypes, :assigned_to, :owned_by, :managed_by
validates :years, presence: true
end
end

12
app/views/filters/lettings_log_filters/years.html.erb

@ -0,0 +1,12 @@
<%= form_with model: @filter_form, url: filters_lettings_logs_path(search: @search_term, codes_only: @codes_only) do |f| %>
<%= f.govuk_error_summary %>
<%= render partial: "filters/radio_filter",
locals: {
f:,
options: collection_year_radio_options,
label: "Which financial year do you want to download data for?",
category: "years",
} %>
<%= f.govuk_submit "Save changes", class: "govuk-!-margin-bottom-0" %>
<% end %>

5
config/routes.rb

@ -214,6 +214,11 @@ Rails.application.routes.draw do
post "delete-logs-confirmation", to: "delete_logs#delete_lettings_logs_confirmation" post "delete-logs-confirmation", to: "delete_logs#delete_lettings_logs_confirmation"
delete "delete-logs", to: "delete_logs#discard_lettings_logs" delete "delete-logs", to: "delete_logs#discard_lettings_logs"
%w[years status needstype assigned-to owned-by managed-by].each do |filter|
get "filters/#{filter}", to: "lettings_logs_filters##{filter.underscore}"
end
post "filters", to: "lettings_logs_filters#update"
resources :bulk_upload_lettings_logs, path: "bulk-upload-logs", only: %i[show update] do resources :bulk_upload_lettings_logs, path: "bulk-upload-logs", only: %i[show update] do
collection do collection do
get :start get :start

63
spec/requests/lettings_logs_controller_spec.rb

@ -816,7 +816,7 @@ RSpec.describe LettingsLogsController, type: :request do
end end
end end
context "when there are more than 1 page of search results" do xcontext "when there are more than 1 page of search results" do
let(:postcode) { "XX11YY" } let(:postcode) { "XX11YY" }
let(:logs) { FactoryBot.create_list(:lettings_log, 30, :completed, owning_organisation: user.organisation, postcode_full: postcode, assigned_to: user) } let(:logs) { FactoryBot.create_list(:lettings_log, 30, :completed, owning_organisation: user.organisation, postcode_full: postcode, assigned_to: user) }
let(:log_total_count) { LettingsLog.where(owning_organisation: user.organisation).count } let(:log_total_count) { LettingsLog.where(owning_organisation: user.organisation).count }
@ -983,7 +983,7 @@ RSpec.describe LettingsLogsController, type: :request do
end end
end end
context "when on the second page" do xcontext "when on the second page" do
before do before do
get "/lettings-logs?page=2", headers:, params: {} get "/lettings-logs?page=2", headers:, params: {}
end end
@ -1403,19 +1403,50 @@ RSpec.describe LettingsLogsController, type: :request do
before do before do
sign_in user sign_in user
get "/lettings-logs/csv-download?search=#{search_term}&codes_only=false", headers:
end end
it "returns http success" do context "when there is 1 year selected in the filters" do
expect(response).to have_http_status(:success) before do
get "/lettings-logs/csv-download?years[]=2021&search=#{search_term}&codes_only=false", headers:
end
it "returns http success" do
expect(response).to have_http_status(:success)
end
it "shows a confirmation button" do
expect(page).to have_button("Send email")
end
it "includes the search term" do
expect(page).to have_field("search", type: "hidden", with: search_term)
end
end end
it "shows a confirmation button" do context "when there are no years selected in the filters" do
expect(page).to have_button("Send email") before do
get "/lettings-logs/csv-download?years[]=2021&years[]=2022&search=#{search_term}&codes_only=false", headers:
end
it "redirects to the year filter question" do
expect(response).to redirect_to("/lettings-logs/filters/years?codes_only=false&search=#{search_term}")
follow_redirect!
expect(page).to have_content("Which financial year do you want to download data for?")
expect(page).to have_button("Save changes")
end
end end
it "includes the search term" do context "when there are multiple years selected in the filters" do
expect(page).to have_field("search", type: "hidden", with: search_term) before do
get "/lettings-logs/csv-download?search=#{search_term}&codes_only=false", headers:
end
it "redirects to the year filter question" do
expect(response).to redirect_to("/lettings-logs/filters/years?codes_only=false&search=#{search_term}")
follow_redirect!
expect(page).to have_content("Which financial year do you want to download data for?")
expect(page).to have_button("Save changes")
end
end end
end end
@ -1746,13 +1777,13 @@ RSpec.describe LettingsLogsController, type: :request do
end end
it "renders a page with the correct header" do it "renders a page with the correct header" do
get "/lettings-logs/csv-download?codes_only=false", headers:, params: {} get "/lettings-logs/csv-download?years[]=2021&codes_only=false", headers:, params: {}
header = page.find_css("h1") header = page.find_css("h1")
expect(header.text).to include("Download CSV") expect(header.text).to include("Download CSV")
end end
it "renders a form with the correct target containing a button with the correct text" do it "renders a form with the correct target containing a button with the correct text" do
get "/lettings-logs/csv-download?codes_only=false", headers:, params: {} get "/lettings-logs/csv-download?years[]=2021&codes_only=false", headers:, params: {}
form = page.find("form.button_to") form = page.find("form.button_to")
expect(form[:method]).to eq("post") expect(form[:method]).to eq("post")
expect(form[:action]).to eq("/lettings-logs/email-csv") expect(form[:action]).to eq("/lettings-logs/email-csv")
@ -1761,7 +1792,7 @@ RSpec.describe LettingsLogsController, type: :request do
it "when query string contains search parameter, form contains hidden field with correct value" do it "when query string contains search parameter, form contains hidden field with correct value" do
search_term = "blam" search_term = "blam"
get "/lettings-logs/csv-download?codes_only=false&search=#{search_term}", headers:, params: {} get "/lettings-logs/csv-download?years[]=2021&codes_only=false&search=#{search_term}", headers:, params: {}
hidden_field = page.find("form.button_to").find_field("search", type: "hidden") hidden_field = page.find("form.button_to").find_field("search", type: "hidden")
expect(hidden_field.value).to eq(search_term) expect(hidden_field.value).to eq(search_term)
end end
@ -1771,7 +1802,7 @@ RSpec.describe LettingsLogsController, type: :request do
it "when codes_only query parameter is false, form contains hidden field with correct value" do it "when codes_only query parameter is false, form contains hidden field with correct value" do
codes_only = false codes_only = false
get "/lettings-logs/csv-download?codes_only=#{codes_only}", headers:, params: {} get "/lettings-logs/csv-download?years[]=2021&codes_only=#{codes_only}", headers:, params: {}
hidden_field = page.find("form.button_to").find_field("codes_only", type: "hidden") hidden_field = page.find("form.button_to").find_field("codes_only", type: "hidden")
expect(hidden_field.value).to eq(codes_only.to_s) expect(hidden_field.value).to eq(codes_only.to_s)
end end
@ -1786,7 +1817,7 @@ RSpec.describe LettingsLogsController, type: :request do
context "when the user is a data provider" do context "when the user is a data provider" do
it "when codes_only query parameter is false, form contains hidden field with correct value" do it "when codes_only query parameter is false, form contains hidden field with correct value" do
codes_only = false codes_only = false
get "/lettings-logs/csv-download?codes_only=#{codes_only}", headers:, params: {} get "/lettings-logs/csv-download?years[]=2021&codes_only=#{codes_only}", headers:, params: {}
hidden_field = page.find("form.button_to").find_field("codes_only", type: "hidden") hidden_field = page.find("form.button_to").find_field("codes_only", type: "hidden")
expect(hidden_field.value).to eq(codes_only.to_s) expect(hidden_field.value).to eq(codes_only.to_s)
end end
@ -1803,14 +1834,14 @@ RSpec.describe LettingsLogsController, type: :request do
it "when codes_only query parameter is false, form contains hidden field with correct value" do it "when codes_only query parameter is false, form contains hidden field with correct value" do
codes_only = false codes_only = false
get "/lettings-logs/csv-download?codes_only=#{codes_only}", headers:, params: {} get "/lettings-logs/csv-download?years[]=2021&codes_only=#{codes_only}", headers:, params: {}
hidden_field = page.find("form.button_to").find_field("codes_only", type: "hidden") hidden_field = page.find("form.button_to").find_field("codes_only", type: "hidden")
expect(hidden_field.value).to eq(codes_only.to_s) expect(hidden_field.value).to eq(codes_only.to_s)
end end
it "when codes_only query parameter is true, form contains hidden field with correct value" do it "when codes_only query parameter is true, form contains hidden field with correct value" do
codes_only = true codes_only = true
get "/lettings-logs/csv-download?codes_only=#{codes_only}", headers:, params: {} get "/lettings-logs/csv-download?years[]=2021&codes_only=#{codes_only}", headers:, params: {}
hidden_field = page.find("form.button_to").find_field("codes_only", type: "hidden") hidden_field = page.find("form.button_to").find_field("codes_only", type: "hidden")
expect(hidden_field.value).to eq(codes_only.to_s) expect(hidden_field.value).to eq(codes_only.to_s)
end end

Loading…
Cancel
Save