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
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)
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
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"
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
collection do
get :start

63
spec/requests/lettings_logs_controller_spec.rb

@ -816,7 +816,7 @@ RSpec.describe LettingsLogsController, type: :request do
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(: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 }
@ -983,7 +983,7 @@ RSpec.describe LettingsLogsController, type: :request do
end
end
context "when on the second page" do
xcontext "when on the second page" do
before do
get "/lettings-logs?page=2", headers:, params: {}
end
@ -1403,19 +1403,50 @@ RSpec.describe LettingsLogsController, type: :request do
before do
sign_in user
get "/lettings-logs/csv-download?search=#{search_term}&codes_only=false", headers:
end
it "returns http success" do
expect(response).to have_http_status(:success)
context "when there is 1 year selected in the filters" do
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
it "shows a confirmation button" do
expect(page).to have_button("Send email")
context "when there are no years selected in the filters" do
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
it "includes the search term" do
expect(page).to have_field("search", type: "hidden", with: search_term)
context "when there are multiple years selected in the filters" do
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
@ -1746,13 +1777,13 @@ RSpec.describe LettingsLogsController, type: :request do
end
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")
expect(header.text).to include("Download CSV")
end
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")
expect(form[:method]).to eq("post")
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
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")
expect(hidden_field.value).to eq(search_term)
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
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")
expect(hidden_field.value).to eq(codes_only.to_s)
end
@ -1786,7 +1817,7 @@ RSpec.describe LettingsLogsController, type: :request 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
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")
expect(hidden_field.value).to eq(codes_only.to_s)
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
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")
expect(hidden_field.value).to eq(codes_only.to_s)
end
it "when codes_only query parameter is true, form contains hidden field with correct value" do
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")
expect(hidden_field.value).to eq(codes_only.to_s)
end

Loading…
Cancel
Save