From 864c809f7db171ce63989abd7e52b485c650cd77 Mon Sep 17 00:00:00 2001 From: baarkerlounger Date: Tue, 17 May 2022 18:42:35 +0100 Subject: [PATCH] Filter values correctly --- app/controllers/case_logs_controller.rb | 2 ++ app/helpers/filters_helper.rb | 2 +- app/models/user.rb | 4 ++-- spec/helpers/filters_helper_spec.rb | 11 +++++++++++ spec/models/user_spec.rb | 4 ++-- spec/requests/case_logs_controller_spec.rb | 8 ++++++++ 6 files changed, 26 insertions(+), 5 deletions(-) diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index 24ecb1e06..a80705962 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -127,6 +127,7 @@ private filters = JSON.parse(session[:case_logs_filters]) filters.each do |category, values| next if Array(values).reject(&:empty?).blank? + next if category == "organisation" && params["organisation_select"] == "all" query = query.public_send("filter_by_#{category}", values, current_user) end @@ -138,6 +139,7 @@ private def set_session_filters new_filters = session[:case_logs_filters].present? ? JSON.parse(session[:case_logs_filters]) : {} current_user.case_logs_filters.each { |filter| new_filters[filter] = params[filter] if params[filter].present? } + new_filters = new_filters.except("organisation") if params["organisation_select"] == "all" session[:case_logs_filters] = new_filters.to_json end diff --git a/app/helpers/filters_helper.rb b/app/helpers/filters_helper.rb index d39467b76..7d013fb23 100644 --- a/app/helpers/filters_helper.rb +++ b/app/helpers/filters_helper.rb @@ -4,7 +4,7 @@ module FiltersHelper selected_filters = JSON.parse(session[:case_logs_filters]) return true if selected_filters.blank? && filter == "user" && value == :all - return true if selected_filters.blank? && filter == "organisation_select" && value == :all + return true if !selected_filters.key?("organisation") && filter == "organisation_select" && value == :all return true if selected_filters["organisation"].present? && filter == "organisation_select" && value == :specific_org return false if selected_filters[filter].blank? diff --git a/app/models/user.rb b/app/models/user.rb index 09fc93c3c..6cb41585b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -91,9 +91,9 @@ class User < ApplicationRecord def case_logs_filters if support? - %i[status years user organisation] + %w[status years user organisation] else - %i[status years user] + %w[status years user] end end end diff --git a/spec/helpers/filters_helper_spec.rb b/spec/helpers/filters_helper_spec.rb index e665e32a0..5a24e54f9 100644 --- a/spec/helpers/filters_helper_spec.rb +++ b/spec/helpers/filters_helper_spec.rb @@ -57,5 +57,16 @@ RSpec.describe FiltersHelper do expect(filter_selected?("organisation_select", :specific_org)).to be false end end + + context "when the specific organisation filter is not set" do + before do + session[:case_logs_filters] = { "status" => [""], "years" => [""], "user" => "all" }.to_json + end + + it "marks the all options as checked" do + expect(filter_selected?("organisation_select", :all)).to be true + expect(filter_selected?("organisation_select", :specific_org)).to be false + end + end end end diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 4cbebcdae..9dff75fe3 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -99,7 +99,7 @@ RSpec.describe User, type: :model do end it "can filter case logs by user, year and status" do - expect(user.case_logs_filters).to eq(%i[status years user]) + expect(user.case_logs_filters).to eq(%w[status years user]) end end @@ -125,7 +125,7 @@ RSpec.describe User, type: :model do end it "can filter case logs by user, year, status and organisation" do - expect(user.case_logs_filters).to eq(%i[status years user organisation]) + expect(user.case_logs_filters).to eq(%w[status years user organisation]) end end end diff --git a/spec/requests/case_logs_controller_spec.rb b/spec/requests/case_logs_controller_spec.rb index 3c91db3e4..51fe25fe3 100644 --- a/spec/requests/case_logs_controller_spec.rb +++ b/spec/requests/case_logs_controller_spec.rb @@ -392,6 +392,14 @@ RSpec.describe CaseLogsController, type: :request do expect(page).not_to have_content(tenant_code_2) end end + + context "when the support user has filtered by organisation, then switches back to all organisations" do + it "shows all organisations" do + get "http://localhost:3000/logs?%5Byears%5D%5B%5D=&%5Bstatus%5D%5B%5D=&user=all&organisation_select=all&organisation=#{org_1.id}", headers:, params: {} + expect(page).to have_content(tenant_code_1) + expect(page).to have_content(tenant_code_2) + end + end end context "when there are more than 20 logs" do