Browse Source

renamed serach to filter and more precise tests

pull/608/head
JG 3 years ago
parent
commit
f93557ea90
  1. 2
      app/controllers/case_logs_controller.rb
  2. 16
      app/models/case_log.rb
  3. 55
      spec/models/case_log_spec.rb

2
app/controllers/case_logs_controller.rb

@ -15,7 +15,7 @@ class CaseLogsController < ApplicationController
search_param = params["search-field"]
if search_param
@pagy, @case_logs = pagy(@case_logs.search_by(search_param))
@pagy, @case_logs = pagy(@case_logs.filter_by(search_param))
end
respond_to do |format|

16
app/models/case_log.rb

@ -51,14 +51,14 @@ class CaseLog < ApplicationRecord
end
}
scope :search_by_id, ->(id) { where(id: id) }
scope :search_by_tenancy_code, ->(code) { where(tenancy_code: code) }
scope :search_by_propcode, ->(code) { where(propcode: code) }
scope :search_by_postcode, ->(code) { where(postcode_full: code) }
scope :search_by, ->(param) { search_by_id(param.to_i)
.or(search_by_tenancy_code(param))
.or(search_by_propcode(param))
.or(search_by_postcode(param.upcase.gsub(/\s+/, ""))) }
scope :filter_by_id, ->(id) { where(id: id) }
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, ->(param) { filter_by_id(param)
.or(filter_by_tenancy_code(param))
.or(filter_by_propcode(param))
.or(filter_by_postcode(param.upcase.gsub(/\s+/, ""))) }
AUTOGENERATED_FIELDS = %w[id status created_at updated_at discarded_at].freeze
OPTIONAL_FIELDS = %w[first_time_property_let_as_social_housing tenant_code propcode].freeze

55
spec/models/case_log_spec.rb

@ -1864,7 +1864,7 @@ RSpec.describe CaseLog do
end
describe "scopes" do
let!(:case_log_1) { FactoryBot.create(:case_log, :in_progress, startdate: Time.utc(2021, 5, 3), created_by: created_by_user) }
let!(:case_log_1) { FactoryBot.create(:case_log, :in_progress, startdate: Time.utc(2021, 5, 3), created_by: created_by_user, postcode_full: "XX12YY") }
let!(:case_log_2) { FactoryBot.create(:case_log, :completed, startdate: Time.utc(2021, 5, 3), created_by: created_by_user) }
before do
@ -1872,63 +1872,64 @@ RSpec.describe CaseLog do
end
context "searching scopes" do
let!(:case_log_3) { FactoryBot.create(:case_log, :completed, startdate: Time.utc(2021, 5, 3), created_by: created_by_user) }
let!(:case_log_3) { FactoryBot.create(:case_log, :completed, startdate: Time.utc(2021, 5, 3), created_by: created_by_user, postcode_full: "XX12YY") }
context "#search_by_id" do
it "allows uearching by a log ID" do
expect(described_class.search_by_id(case_log_1.id).count).to eq(1)
expect(described_class.search_by_id(case_log_1.id).first.id).to eq case_log_1.id
context "#filter_by_id" do
it "allows searching by a log ID" do
expect(described_class.filter_by_id(case_log_1.id.to_s).count).to eq(1)
expect(described_class.filter_by_id(case_log_1.id.to_s).first.id).to eq case_log_1.id
end
end
context "#search_by_tenancy_code" do
context "#filter_by_tenancy_code" do
it "allows searching by a Tenancy Code" do
expect(described_class.search_by_tenancy_code(case_log_2.tenancy_code).count).to eq(1)
expect(described_class.search_by_tenancy_code(case_log_2.tenancy_code).first.id).to eq case_log_2.id
expect(described_class.filter_by_tenancy_code(case_log_2.tenancy_code).count).to eq(1)
expect(described_class.filter_by_tenancy_code(case_log_2.tenancy_code).first.id).to eq case_log_2.id
end
end
context "#search_by_propcode" do
context "#filter_by_propcode" do
it "allows searching by a Property Reference" do
expect(described_class.search_by_propcode(case_log_2.propcode).count).to eq(1)
expect(described_class.search_by_propcode(case_log_2.propcode).first.id).to eq case_log_2.id
expect(described_class.filter_by_propcode(case_log_2.propcode).count).to eq(1)
expect(described_class.filter_by_propcode(case_log_2.propcode).first.id).to eq case_log_2.id
end
end
context "#search_by_postcode" do
context "#filter_by_postcode" do
it "allows searching by a Property Postcode" do
expect(described_class.search_by_postcode(case_log_2.postcode_full).count).to eq(1)
expect(described_class.search_by_postcode(case_log_2.postcode_full).first.id).to eq case_log_2.id
expect(described_class.filter_by_postcode(case_log_2.postcode_full).count).to eq(1)
expect(described_class.filter_by_postcode(case_log_2.postcode_full).first.id).to eq case_log_2.id
end
end
context "#search_by" do
context "#filter_by" do
it "allows searching using ID" do
expect(described_class.search_by(case_log_1.id).count).to eq(1)
expect(described_class.search_by(case_log_1.id).first.id).to eq case_log_1.id
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
end
it "allows searching using tenancy code" do
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
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
end
it "allows searching by a Property Reference" do
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
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
end
it "allows searching by a Property Postcode" do
expect(described_class.search_by(case_log_2.postcode_full).count).to eq(1)
expect(described_class.search_by(case_log_2.postcode_full).first.id).to eq case_log_2.id
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
end
context "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
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
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
end
end
end

Loading…
Cancel
Save