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
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

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_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))

24
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

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
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)

Loading…
Cancel
Save