From a41ce0898b5f19ccb078ff1781b724d3b76df1ff Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 7 Jul 2023 11:44:41 +0100 Subject: [PATCH] Add duplicate_logs scope to lettings --- app/models/lettings_log.rb | 5 +++ spec/factories/lettings_log.rb | 18 +++++++++ spec/models/lettings_log_spec.rb | 66 ++++++++++++++++++++++++++++++++ 3 files changed, 89 insertions(+) diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index b2f3023a5..0df62c0ad 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -53,6 +53,11 @@ class LettingsLog < Log scope :filter_by_before_startdate, ->(date) { where("lettings_logs.startdate >= ?", date) } scope :unresolved, -> { where(unresolved: true) } 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 OPTIONAL_FIELDS = %w[first_time_property_let_as_social_housing tenancycode propcode chcharge].freeze diff --git a/spec/factories/lettings_log.rb b/spec/factories/lettings_log.rb index 8cb459117..7380d60c0 100644 --- a/spec/factories/lettings_log.rb +++ b/spec/factories/lettings_log.rb @@ -34,6 +34,24 @@ FactoryBot.define do ecstat1 { 2 } hhmemb { 1 } 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 startdate { Time.zone.today } status { 2 } diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index 990ef2b03..1e2b3d1e6 100644 --- a/spec/models/lettings_log_spec.rb +++ b/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) 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 describe "#retirement_age_for_person" do