diff --git a/app/controllers/case_logs_controller.rb b/app/controllers/case_logs_controller.rb index bd3db70f5..286e65535 100644 --- a/app/controllers/case_logs_controller.rb +++ b/app/controllers/case_logs_controller.rb @@ -1,6 +1,7 @@ class CaseLogsController < ApplicationController include Pagy::Backend include Modules::CaseLogsFilter + include Modules::SearchFilter skip_before_action :verify_authenticity_token, if: :json_api_request? before_action :authenticate, if: :json_api_request? @@ -10,13 +11,7 @@ class CaseLogsController < ApplicationController def index set_session_filters - @pagy, @case_logs = pagy(filtered_case_logs(current_user.case_logs)) - - search_param = params["search-field"] - - if search_param - @pagy, @case_logs = pagy(@case_logs.filter_by(search_param)) - end + @pagy, @case_logs = pagy(filtered_case_logs(filtered_collection(current_user.case_logs, params["search-field"]))) respond_to do |format| format.html diff --git a/app/models/case_log.rb b/app/models/case_log.rb index 9b23c067e..c3d5ba617 100644 --- a/app/models/case_log.rb +++ b/app/models/case_log.rb @@ -55,7 +55,7 @@ class CaseLog < ApplicationRecord scope :filter_by_tenancy_code, ->(code) { where(tenancy_code: code) } scope :filter_by_propcode, ->(code) { where(propcode: code) } scope :filter_by_postcode, ->(code) { where(postcode_full: code) } - scope :filter_by, lambda { |param| + scope :search_by, lambda { |param| filter_by_id(param) .or(filter_by_tenancy_code(param)) .or(filter_by_propcode(param)) diff --git a/spec/models/case_log_spec.rb b/spec/models/case_log_spec.rb index 91103060b..3371152ef 100644 --- a/spec/models/case_log_spec.rb +++ b/spec/models/case_log_spec.rb @@ -1902,34 +1902,34 @@ RSpec.describe CaseLog do end end - describe "#filter_by" do + describe "#search_by" do it "allows searching using ID" do - expect(described_class.filter_by(case_log_1.id.to_s).count).to eq(1) - expect(described_class.filter_by(case_log_1.id.to_s).first.id).to eq case_log_1.id + expect(described_class.search_by(case_log_1.id.to_s).count).to eq(1) + expect(described_class.search_by(case_log_1.id.to_s).first.id).to eq case_log_1.id end it "allows searching using tenancy code" do - expect(described_class.filter_by(case_log_2.tenancy_code).count).to eq(1) - expect(described_class.filter_by(case_log_2.tenancy_code).first.id).to eq case_log_2.id + expect(described_class.search_by(case_log_2.tenancy_code).count).to eq(1) + expect(described_class.search_by(case_log_2.tenancy_code).first.id).to eq case_log_2.id end it "allows searching by a Property Reference" do - expect(described_class.filter_by(case_log_2.propcode).count).to eq(1) - expect(described_class.filter_by(case_log_2.propcode).first.id).to eq case_log_2.id + expect(described_class.search_by(case_log_2.propcode).count).to eq(1) + expect(described_class.search_by(case_log_2.propcode).first.id).to eq case_log_2.id end it "allows searching by a Property Postcode" do - expect(described_class.filter_by(case_log_1.postcode_full).count).to eq(2) - expect(described_class.filter_by(case_log_1.postcode_full).first.id).to eq case_log_1.id - expect(described_class.filter_by(case_log_1.postcode_full).last.id).to eq case_log_3.id + expect(described_class.search_by(case_log_1.postcode_full).count).to eq(2) + expect(described_class.search_by(case_log_1.postcode_full).first.id).to eq case_log_1.id + expect(described_class.search_by(case_log_1.postcode_full).last.id).to eq case_log_3.id end context "when postcode has spaces and lower case letters" do let(:matching_postcode_lower_case_with_spaces) { case_log_2.postcode_full.downcase.chars.insert(3, " ").join } it "allows searching by a Property Postcode" do - expect(described_class.filter_by(matching_postcode_lower_case_with_spaces).count).to eq(1) - expect(described_class.filter_by(matching_postcode_lower_case_with_spaces).first.id).to eq case_log_2.id + expect(described_class.search_by(matching_postcode_lower_case_with_spaces).count).to eq(1) + expect(described_class.search_by(matching_postcode_lower_case_with_spaces).first.id).to eq case_log_2.id end end end diff --git a/spec/requests/case_logs_controller_spec.rb b/spec/requests/case_logs_controller_spec.rb index f180cdb8c..7ef50c0fc 100644 --- a/spec/requests/case_logs_controller_spec.rb +++ b/spec/requests/case_logs_controller_spec.rb @@ -343,7 +343,7 @@ RSpec.describe CaseLogsController, type: :request do context "when search query doesn't match any logs" do it "doesn't display any logs" do - get "/logs?search-field=foobar", headers: headers, params: {} + get "/logs?search-field=foobar", headers:, params: {} logs.each do |log| expect(page).not_to have_content(log.id) end @@ -352,7 +352,7 @@ RSpec.describe CaseLogsController, type: :request do context "when search query is empty" do it "doesn't display any logs" do - get "/logs?search-field=", headers: headers, params: {} + get "/logs?search-field=", headers:, params: {} logs.each do |log| expect(page).not_to have_content(log.id) end @@ -361,11 +361,11 @@ RSpec.describe CaseLogsController, type: :request do context "when search and filter is present" do let(:matching_postcode) { logs[0].postcode_full } - let(:matching_log) { FactoryBot.create(:case_log, :in_progress, owning_organisation: user.organisation, postcode_full: matching_postcode) } + let!(:matching_log) { FactoryBot.create(:case_log, :in_progress, owning_organisation: user.organisation, postcode_full: matching_postcode) } let(:matching_status) { matching_log.status } it "shows only logs matching both search and filters" do - get "/logs?search-field=#{matching_postcode}&status[]=matching_status", headers: headers, params: {} + get "/logs?search-field=#{matching_postcode}&status[]=in_progress", headers: headers, params: {} expect(page).to have_content(matching_log.id) logs.each do |log| expect(page).not_to have_content(log.id)