Browse Source

renamed and used geenric search component

pull/608/head
JG 3 years ago
parent
commit
1b0f120be8
  1. 9
      app/controllers/case_logs_controller.rb
  2. 2
      app/models/case_log.rb
  3. 24
      spec/models/case_log_spec.rb
  4. 8
      spec/requests/case_logs_controller_spec.rb

9
app/controllers/case_logs_controller.rb

@ -1,6 +1,7 @@
class CaseLogsController < ApplicationController class CaseLogsController < ApplicationController
include Pagy::Backend include Pagy::Backend
include Modules::CaseLogsFilter include Modules::CaseLogsFilter
include Modules::SearchFilter
skip_before_action :verify_authenticity_token, if: :json_api_request? skip_before_action :verify_authenticity_token, if: :json_api_request?
before_action :authenticate, if: :json_api_request? before_action :authenticate, if: :json_api_request?
@ -10,13 +11,7 @@ class CaseLogsController < ApplicationController
def index def index
set_session_filters set_session_filters
@pagy, @case_logs = pagy(filtered_case_logs(current_user.case_logs)) @pagy, @case_logs = pagy(filtered_case_logs(filtered_collection(current_user.case_logs, params["search-field"])))
search_param = params["search-field"]
if search_param
@pagy, @case_logs = pagy(@case_logs.filter_by(search_param))
end
respond_to do |format| respond_to do |format|
format.html format.html

2
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_tenancy_code, ->(code) { where(tenancy_code: code) }
scope :filter_by_propcode, ->(code) { where(propcode: code) } scope :filter_by_propcode, ->(code) { where(propcode: code) }
scope :filter_by_postcode, ->(code) { where(postcode_full: code) } scope :filter_by_postcode, ->(code) { where(postcode_full: code) }
scope :filter_by, lambda { |param| scope :search_by, lambda { |param|
filter_by_id(param) filter_by_id(param)
.or(filter_by_tenancy_code(param)) .or(filter_by_tenancy_code(param))
.or(filter_by_propcode(param)) .or(filter_by_propcode(param))

24
spec/models/case_log_spec.rb

@ -1902,34 +1902,34 @@ RSpec.describe CaseLog do
end end
end end
describe "#filter_by" do describe "#search_by" do
it "allows searching using ID" 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.search_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).first.id).to eq case_log_1.id
end end
it "allows searching using tenancy code" do it "allows searching using tenancy code" do
expect(described_class.filter_by(case_log_2.tenancy_code).count).to eq(1) expect(described_class.search_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).first.id).to eq case_log_2.id
end end
it "allows searching by a Property Reference" do it "allows searching by a Property Reference" do
expect(described_class.filter_by(case_log_2.propcode).count).to eq(1) expect(described_class.search_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).first.id).to eq case_log_2.id
end end
it "allows searching by a Property Postcode" do 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.search_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.search_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).last.id).to eq case_log_3.id
end end
context "when postcode has spaces and lower case letters" do 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 } 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 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.search_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).first.id).to eq case_log_2.id
end end
end end
end end

8
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 context "when search query doesn't match any logs" do
it "doesn't display 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| logs.each do |log|
expect(page).not_to have_content(log.id) expect(page).not_to have_content(log.id)
end end
@ -352,7 +352,7 @@ RSpec.describe CaseLogsController, type: :request do
context "when search query is empty" do context "when search query is empty" do
it "doesn't display any logs" 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| logs.each do |log|
expect(page).not_to have_content(log.id) expect(page).not_to have_content(log.id)
end end
@ -361,11 +361,11 @@ RSpec.describe CaseLogsController, type: :request do
context "when search and filter is present" do context "when search and filter is present" do
let(:matching_postcode) { logs[0].postcode_full } 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 } let(:matching_status) { matching_log.status }
it "shows only logs matching both search and filters" do 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) expect(page).to have_content(matching_log.id)
logs.each do |log| logs.each do |log|
expect(page).not_to have_content(log.id) expect(page).not_to have_content(log.id)

Loading…
Cancel
Save