Browse Source

Add duplicate_logs scope to lettings

pull/1762/head
Kat 3 years ago
parent
commit
a41ce0898b
  1. 5
      app/models/lettings_log.rb
  2. 18
      spec/factories/lettings_log.rb
  3. 66
      spec/models/lettings_log_spec.rb

5
app/models/lettings_log.rb

@ -53,6 +53,11 @@ class LettingsLog < Log
scope :filter_by_before_startdate, ->(date) { where("lettings_logs.startdate >= ?", date) } scope :filter_by_before_startdate, ->(date) { where("lettings_logs.startdate >= ?", date) }
scope :unresolved, -> { where(unresolved: true) } scope :unresolved, -> { where(unresolved: true) }
scope :filter_by_organisation, ->(org, _user = nil) { where(owning_organisation: org).or(where(managing_organisation: org)) } scope :filter_by_organisation, ->(org, _user = nil) { where(owning_organisation: org).or(where(managing_organisation: org)) }
scope :duplicate_logs, lambda { |log|
attrs_to_check = %w[tenancycode propcode startdate age1 sex1 ecstat1 tcharge postcode_full]
where(log.slice(*attrs_to_check)).where.not(id: log.id).where.not(status: "deleted")
}
scope :duplicate_logs_for_organisation, ->(org, log) { filter_by_organisation(org).duplicate_logs(log) }
AUTOGENERATED_FIELDS = %w[id status created_at updated_at discarded_at].freeze AUTOGENERATED_FIELDS = %w[id status created_at updated_at discarded_at].freeze
OPTIONAL_FIELDS = %w[first_time_property_let_as_social_housing tenancycode propcode chcharge].freeze OPTIONAL_FIELDS = %w[first_time_property_let_as_social_housing tenancycode propcode chcharge].freeze

18
spec/factories/lettings_log.rb

@ -34,6 +34,24 @@ FactoryBot.define do
ecstat1 { 2 } ecstat1 { 2 }
hhmemb { 1 } hhmemb { 1 }
end end
trait :duplicate_general_needs do
status { 1 }
tenancycode { "same tenancy code" }
postcode_full { "A1 1AA" }
age1 { 18 }
sex1 { "M" }
ecstat1 { 0 }
period { 2 }
brent { 200 }
scharge { 50 }
pscharge { 40 }
supcharg { 35 }
tcharge { 325 }
propcode { "same property code" }
renewal { 1 }
rent_type { 1 }
startdate { Time.zone.today }
end
trait :completed do trait :completed do
startdate { Time.zone.today } startdate { Time.zone.today }
status { 2 } status { 2 }

66
spec/models/lettings_log_spec.rb

@ -2797,6 +2797,72 @@ RSpec.describe LettingsLog do
expect(described_class.filter_by_user(%w[all yours], created_by_user).count).to eq(3) expect(described_class.filter_by_user(%w[all yours], created_by_user).count).to eq(3)
end end
end end
context "when filtering duplicate logs" do
let(:log) { create(:lettings_log, :duplicate_general_needs) }
let!(:duplicate_log) { create(:lettings_log, :duplicate_general_needs) }
let!(:deleted_duplicate_log) { create(:lettings_log, :duplicate_general_needs, discarded_at: Time.zone.now) }
let!(:different_start_date_log) { create(:lettings_log, :duplicate_general_needs, startdate: Time.zone.tomorrow) }
let!(:different_age1) { create(:lettings_log, :duplicate_general_needs, age1: 50) }
let!(:different_sex1) { create(:lettings_log, :duplicate_general_needs, sex1: "F") }
let!(:different_ecstat1) { create(:lettings_log, :duplicate_general_needs, ecstat1: 1) }
let!(:different_tcharge) { create(:lettings_log, :duplicate_general_needs, brent: 100) }
let!(:different_propcode) { create(:lettings_log, :duplicate_general_needs, propcode: "different") }
let!(:different_tenancycode) { create(:lettings_log, :duplicate_general_needs, tenancycode: "different") }
let!(:different_postcode_full) { create(:lettings_log, :duplicate_general_needs, postcode_full: "B1 1AA") }
before do
create(:lettings_log, :in_progress)
end
it "returns all duplicate logs for given log" do
expect(described_class.duplicate_logs(log).count).to eq(1)
end
it "returns duplicate log" do
expect(described_class.duplicate_logs(log)).to include(duplicate_log)
end
it "does not return deleted duplicate logs" do
expect(described_class.duplicate_logs(log)).not_to include(deleted_duplicate_log)
end
it "does not return the given log" do
expect(described_class.duplicate_logs(log)).not_to include(log)
end
it "does not return a log with a different start date" do
expect(described_class.duplicate_logs(log)).not_to include(different_start_date_log)
end
it "does not return a log with a different age1" do
expect(described_class.duplicate_logs(log)).not_to include(different_age1)
end
it "does not return a log with a different sex1" do
expect(described_class.duplicate_logs(log)).not_to include(different_sex1)
end
it "does not return a log with a different ecstat1" do
expect(described_class.duplicate_logs(log)).not_to include(different_ecstat1)
end
it "does not return a log with a different tcharge" do
expect(described_class.duplicate_logs(log)).not_to include(different_tcharge)
end
it "does not return a log with a different propcode" do
expect(described_class.duplicate_logs(log)).not_to include(different_propcode)
end
it "does not return a log with a different tenancycode" do
expect(described_class.duplicate_logs(log)).not_to include(different_tenancycode)
end
it "does not return a log with a different postcode_full" do
expect(described_class.duplicate_logs(log)).not_to include(different_postcode_full)
end
end
end end
describe "#retirement_age_for_person" do describe "#retirement_age_for_person" do

Loading…
Cancel
Save