From 7b08ae23d59b7d3dfd6652d0e847ec559d674da9 Mon Sep 17 00:00:00 2001 From: Kat Date: Fri, 7 Jul 2023 12:04:41 +0100 Subject: [PATCH] Update duplicate_logs scope to check for nulls --- app/models/lettings_log.rb | 9 ++++++--- spec/models/lettings_log_spec.rb | 12 ++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 0df62c0ad..f6ec1d8a8 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -54,9 +54,12 @@ class LettingsLog < Log 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") - } + 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") + .where.not("age1 IS NULL OR sex1 IS NULL OR ecstat1 IS NULL OR tcharge IS NULL OR postcode_full IS NULL OR propcode IS NULL") + } 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 diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index 1e2b3d1e6..2f5825673 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -2810,6 +2810,8 @@ RSpec.describe LettingsLog do 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") } + let!(:duplicate_check_fields_not_given) { create(:lettings_log, :duplicate_general_needs, age1: nil, sex1: nil, ecstat1: nil, propcode: nil, postcode_known: 2, postcode_full: nil) } + let!(:tenancycode_not_given) { create(:lettings_log, :duplicate_general_needs, tenancycode: nil) } before do create(:lettings_log, :in_progress) @@ -2862,6 +2864,16 @@ RSpec.describe LettingsLog do 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 + + it "does not return a log with nil values" do + log.update!(age1: nil, sex1: nil, ecstat1: nil, propcode: nil, postcode_known: 2, postcode_full: nil) + expect(described_class.duplicate_logs(log)).not_to include(duplicate_check_fields_not_given) + end + + it "does return the log if tenancy code is nil" do + log.update!(tenancycode: nil) + expect(described_class.duplicate_logs(log)).to include(tenancycode_not_given) + end end end