Browse Source

CLDC-3499: Update lettings log spec

CLDC-3499-remove-pre-2025-tests
samyou-softwire 2 weeks ago
parent
commit
f1c36e72a3
  1. 304
      spec/models/lettings_log_spec.rb

304
spec/models/lettings_log_spec.rb

@ -7,18 +7,6 @@ RSpec.describe LettingsLog do
let(:different_managing_organisation) { create(:organisation) } let(:different_managing_organisation) { create(:organisation) }
let(:owning_organisation) { create(:organisation, rent_periods: [2]) } let(:owning_organisation) { create(:organisation, rent_periods: [2]) }
let(:assigned_to_user) { create(:user, organisation: owning_organisation) } let(:assigned_to_user) { create(:user, organisation: owning_organisation) }
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json") }
around do |example|
Timecop.freeze(Time.utc(2022, 1, 1)) do
Singleton.__init__(FormHandler)
example.run
end
end
before do
allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form)
end
include_examples "shared examples for derived fields", :lettings_log include_examples "shared examples for derived fields", :lettings_log
include_examples "shared log examples", :lettings_log include_examples "shared log examples", :lettings_log
@ -40,16 +28,8 @@ RSpec.describe LettingsLog do
describe "#form" do describe "#form" do
let(:lettings_log) { build(:lettings_log, assigned_to: assigned_to_user) } let(:lettings_log) { build(:lettings_log, assigned_to: assigned_to_user) }
let(:lettings_log_2) { build(:lettings_log, startdate: Time.zone.local(2022, 1, 1), assigned_to: assigned_to_user) } let(:lettings_log_2) { build(:lettings_log, startdate: previous_collection_start_date, assigned_to: assigned_to_user) }
let(:lettings_log_year_2) { build(:lettings_log, startdate: Time.zone.local(2023, 5, 1), assigned_to: assigned_to_user) } let(:lettings_log_year_2) { build(:lettings_log, startdate: next_collection_start_date, assigned_to: assigned_to_user) }
before do
Timecop.freeze(2023, 1, 1)
end
after do
Timecop.unfreeze
end
it "returns the correct form based on the start date" do it "returns the correct form based on the start date" do
expect(lettings_log.form_name).to be_nil expect(lettings_log.form_name).to be_nil
@ -61,11 +41,11 @@ RSpec.describe LettingsLog do
end end
context "when a date outside the collection window is passed" do context "when a date outside the collection window is passed" do
let(:lettings_log) { build(:lettings_log, startdate: Time.zone.local(2015, 1, 1), assigned_to: assigned_to_user) } let(:lettings_log) { build(:lettings_log, startdate: current_collection_start_date - 10.years, assigned_to: assigned_to_user) }
it "returns the first form" do it "returns the current form as fallback" do
expect(lettings_log.form).to be_a(Form) expect(lettings_log.form).to be_a(Form)
expect(lettings_log.form.start_date.year).to eq(2021) expect(lettings_log.form.start_date.year).to eq(current_collection_start_year)
end end
end end
end end
@ -276,20 +256,22 @@ RSpec.describe LettingsLog do
assigned_to: assigned_to_user, assigned_to: assigned_to_user,
postcode_full: "M1 1AE", postcode_full: "M1 1AE",
ppostcode_full: "M2 2AE", ppostcode_full: "M2 2AE",
startdate: Time.gm(2021, 10, 10), startdate: Time.zone.today,
mrcdate: Time.gm(2021, 5, 4), mrcdate: Time.zone.today - 1.week,
voiddate: Time.gm(2021, 3, 3), voiddate: Time.zone.today - 2.weeks,
needstype: 1,
renewal: 0,
declaration: 1,
net_income_known: 2, # refused net_income_known: 2, # refused
hhmemb: 7, hhmemb: 7,
rent_type: 4, rent_type: 4,
hb: 1, hb: 1,
hbrentshortfall: 1, hbrentshortfall: 1,
created_at: Time.utc(2022, 2, 8, 16, 52, 15),
) )
end end
def check_postcode_fields(postcode_field) def check_postcode_fields(postcode_field)
record_from_db = described_class.find(lettings_log.id) record_from_db = described_class.find(address_lettings_log.id)
expect(address_lettings_log[postcode_field]).to eq("M1 1AE") expect(address_lettings_log[postcode_field]).to eq("M1 1AE")
expect(record_from_db[postcode_field]).to eq("M1 1AE") expect(record_from_db[postcode_field]).to eq("M1 1AE")
end end
@ -313,6 +295,7 @@ RSpec.describe LettingsLog do
assigned_to: assigned_to_user, assigned_to: assigned_to_user,
postcode_known: 1, postcode_known: 1,
postcode_full: "M1 1AE", postcode_full: "M1 1AE",
manual_address_entry_selected: true,
}) })
end end
@ -490,19 +473,11 @@ RSpec.describe LettingsLog do
end end
context "when a lettings log is a supported housing log" do context "when a lettings log is a supported housing log" do
let(:real_2021_2022_form) { Form.new("config/forms/2021_2022.json") }
before do before do
lettings_log.needstype = 2 lettings_log.needstype = 2
allow(FormHandler.instance).to receive(:get_form).and_return(real_2021_2022_form)
end end
describe "when changing a log's scheme and hence calling reset_scheme_location!" do describe "when changing a log's scheme and hence calling reset_scheme_location!" do
before do
Timecop.return
Singleton.__init__(FormHandler)
end
context "when there is one valid location and many invalid locations in the new scheme" do context "when there is one valid location and many invalid locations in the new scheme" do
let(:scheme) { create(:scheme) } let(:scheme) { create(:scheme) }
let(:invalid_location_1) { create(:location, scheme:, startdate: Time.zone.today + 3.weeks) } let(:invalid_location_1) { create(:location, scheme:, startdate: Time.zone.today + 3.weeks) }
@ -549,13 +524,7 @@ RSpec.describe LettingsLog do
let!(:location) { create(:location, scheme:) } let!(:location) { create(:location, scheme:) }
before do before do
Timecop.freeze(Time.zone.local(2022, 4, 2)) lettings_log.update!(startdate: current_collection_start_date + 1.day, scheme:, voiddate: nil, mrcdate: nil)
Singleton.__init__(FormHandler)
lettings_log.update!(startdate: Time.zone.local(2022, 4, 2), scheme:)
end
after do
Timecop.unfreeze
end end
it "derives the scheme location" do it "derives the scheme location" do
@ -579,22 +548,11 @@ RSpec.describe LettingsLog do
Singleton.__init__(FormHandler) Singleton.__init__(FormHandler)
end end
context "with 22/23" do let(:startdate) { current_collection_start_date }
let(:startdate) { Time.zone.local(2022, 4, 2) }
it "returns the correct la" do it "returns the correct la" do
expect(lettings_log["location_id"]).to eq(location.id) expect(lettings_log["location_id"]).to eq(location.id)
expect(lettings_log.la).to eq("E07000030") expect(lettings_log.la).to eq("E06000063")
end
end
context "with 23/24" do
let(:startdate) { Time.zone.local(2023, 4, 2) }
it "returns the correct la" do
expect(lettings_log["location_id"]).to eq(location.id)
expect(lettings_log.la).to eq("E06000063")
end
end end
end end
@ -657,13 +615,9 @@ RSpec.describe LettingsLog do
context "and the location no local authorities associated with the location_code" do context "and the location no local authorities associated with the location_code" do
before do before do
Timecop.freeze(Time.zone.local(2022, 4, 2))
location.update!(location_code: "E01231231") location.update!(location_code: "E01231231")
lettings_log.update!(location:) lettings_log.update_columns(la: nil)
end lettings_log.reload
after do
Timecop.return
end end
it "returns the correct la" do it "returns the correct la" do
@ -690,7 +644,7 @@ RSpec.describe LettingsLog do
Singleton.__init__(FormHandler) Singleton.__init__(FormHandler)
end end
context "with 25/26" do context "with 25/26", metadata: { year: 25 } do
let(:startdate) { Time.zone.local(2025, 4, 2) } let(:startdate) { Time.zone.local(2025, 4, 2) }
it "returns the postcode from the location" do it "returns the postcode from the location" do
@ -699,7 +653,7 @@ RSpec.describe LettingsLog do
end end
end end
context "with 26/27" do context "with 26/27", metadata: { year: 26 } do
let(:startdate) { Time.zone.local(2026, 4, 2) } let(:startdate) { Time.zone.local(2026, 4, 2) }
it "returns the postcode from the log itself" do it "returns the postcode from the log itself" do
@ -712,24 +666,13 @@ RSpec.describe LettingsLog do
context "and the log only has a postcode set on the location" do context "and the log only has a postcode set on the location" do
before do before do
location.update!(postcode: "AA1 1AA") location.update!(postcode: "AA1 1AA")
Timecop.freeze(startdate) lettings_log.update!(postcode_full: nil)
Singleton.__init__(FormHandler)
lettings_log.update!(startdate:)
lettings_log.reload lettings_log.reload
end end
after do it "returns the postcode from the location" do
Timecop.unfreeze expect(lettings_log["location_id"]).to eq(location.id)
Singleton.__init__(FormHandler) expect(lettings_log.postcode_full).to eq("AA1 1AA")
end
context "with 26/27" do
let(:startdate) { Time.zone.local(2026, 4, 2) }
it "returns the LA from the location" do
expect(lettings_log["location_id"]).to eq(location.id)
expect(lettings_log.postcode_full).to eq("AA1 1AA")
end
end end
end end
end end
@ -929,23 +872,13 @@ RSpec.describe LettingsLog do
managing_organisation: owning_organisation, managing_organisation: owning_organisation,
owning_organisation:, owning_organisation:,
assigned_to: assigned_to_user, assigned_to: assigned_to_user,
startdate: Time.zone.local(2024, 4, 10), startdate: current_collection_start_date + 9.days,
needstype: 1, needstype: 1,
renewal: 1, renewal: 1,
rent_type: 1, rent_type: 1,
}) })
end end
before do
Timecop.freeze(Time.zone.local(2024, 4, 10))
Singleton.__init__(FormHandler)
end
after do
Timecop.return
Singleton.__init__(FormHandler)
end
it "correctly derives nationality_all when it's UK" do it "correctly derives nationality_all when it's UK" do
expect { lettings_log.update!(nationality_all_group: 826, declaration: 1) }.to change(lettings_log, :nationality_all).to 826 expect { lettings_log.update!(nationality_all_group: 826, declaration: 1) }.to change(lettings_log, :nationality_all).to 826
end end
@ -976,16 +909,6 @@ RSpec.describe LettingsLog do
end end
context "when the log changes from new build to not new build" do context "when the log changes from new build to not new build" do
before do
allow(FormHandler.instance).to receive(:current_lettings_form).and_call_original
Timecop.freeze(2025, 5, 1)
Singleton.__init__(FormHandler)
end
after do
Timecop.unfreeze
end
context "and the address is entered" do context "and the address is entered" do
let(:address_lettings_log) do let(:address_lettings_log) do
create(:lettings_log, create(:lettings_log,
@ -1054,16 +977,6 @@ RSpec.describe LettingsLog do
end end
context "when the log changes from not new build to new build" do context "when the log changes from not new build to new build" do
before do
allow(FormHandler.instance).to receive(:current_lettings_form).and_call_original
Timecop.freeze(2025, 5, 1)
Singleton.__init__(FormHandler)
end
after do
Timecop.unfreeze
end
context "and the uprn is selected" do context "and the uprn is selected" do
let(:address_lettings_log) do let(:address_lettings_log) do
create(:lettings_log, create(:lettings_log,
@ -1163,17 +1076,18 @@ RSpec.describe LettingsLog do
end end
describe "optional fields" do describe "optional fields" do
let(:lettings_log) { create(:lettings_log) }
context "when tshortfall is marked as not known" do context "when tshortfall is marked as not known" do
let(:lettings_log) do
build(:lettings_log, hb: 1, hbrentshortfall: 1, period: 1, tshortfall: nil, tshortfall_known: 1)
end
it "makes tshortfall optional" do it "makes tshortfall optional" do
lettings_log.update!({ tshortfall: nil, tshortfall_known: 1 })
expect(lettings_log.optional_fields).to include("tshortfall") expect(lettings_log.optional_fields).to include("tshortfall")
end end
end end
context "when startdate is after 2023" do context "when startdate is in the current collection year" do
let(:lettings_log) { build(:lettings_log, startdate: Time.zone.parse("2023-07-01")) } let(:lettings_log) { build(:lettings_log, startdate: current_collection_start_date + 1.day) }
it "returns optional fields" do it "returns optional fields" do
expect(lettings_log.optional_fields).to eq(%w[ expect(lettings_log.optional_fields).to eq(%w[
@ -1194,6 +1108,7 @@ RSpec.describe LettingsLog do
let(:lettings_log) do let(:lettings_log) do
create( create(
:lettings_log, :lettings_log,
:setup_completed,
renewal: 0, renewal: 0,
rsnvac: 5, rsnvac: 5,
first_time_property_let_as_social_housing: 0, first_time_property_let_as_social_housing: 0,
@ -1229,15 +1144,15 @@ RSpec.describe LettingsLog do
context "when a question that has already been answered, no longer has met dependencies" do context "when a question that has already been answered, no longer has met dependencies" do
let(:lettings_log) { create(:lettings_log, :in_progress, cbl: 1, preg_occ: 2, wchair: 2) } let(:lettings_log) { create(:lettings_log, :in_progress, cbl: 1, preg_occ: 2, wchair: 2) }
it "clears the answer" do it "does not clear the answer" do
expect { lettings_log.update!(preg_occ: nil) }.to change(lettings_log, :cbl).from(1).to(nil) expect { lettings_log.update!(preg_occ: nil) }.not_to change(lettings_log, :cbl)
end end
context "when the question type does not have answer options" do context "when the question type does not have answer options" do
let(:lettings_log) { create(:lettings_log, :in_progress, housingneeds_a: 1, age1: 19) } let(:lettings_log) { create(:lettings_log, :in_progress, housingneeds_a: 1, age1: 19) }
it "clears the answer" do it "does not clear the answer" do
expect { lettings_log.update!(housingneeds_a: 0) }.to change(lettings_log, :age1).from(19).to(nil) expect { lettings_log.update!(housingneeds_a: 0) }.not_to change(lettings_log, :age1)
end end
end end
@ -1250,31 +1165,6 @@ RSpec.describe LettingsLog do
end end
end end
context "with two pages having the same question key, only one's dependency is met" do
let(:lettings_log) { create(:lettings_log, :in_progress, cbl: 0, preg_occ: 2, wchair: 2) }
it "does not clear the value for answers that apply to both pages" do
expect(lettings_log.cbl).to eq(0)
end
it "does clear the value for answers that do not apply for invalidated page" do
lettings_log.update!({ cbl: 1 })
lettings_log.update!({ preg_occ: 1 })
expect(lettings_log.cbl).to be_nil
end
end
context "when a non select question associated with several pages is routed to" do
let(:lettings_log) { create(:lettings_log, :in_progress, period: 2, needstype: 1, renewal: 0) }
it "does not clear the answer value" do
lettings_log.update!({ unitletas: 1 })
lettings_log.reload
expect(lettings_log.unitletas).to eq(1)
end
end
context "when the lettings log does not have a valid form set yet" do context "when the lettings log does not have a valid form set yet" do
let(:lettings_log) { create(:lettings_log) } let(:lettings_log) { create(:lettings_log) }
@ -1338,12 +1228,12 @@ RSpec.describe LettingsLog do
it "clears void date value" do it "clears void date value" do
lettings_log.update!(startdate: Time.zone.yesterday) lettings_log.update!(startdate: Time.zone.yesterday)
lettings_log.reload lettings_log.reload
expect(lettings_log.startdate).to eq(Time.zone.yesterday) expect(lettings_log.startdate.to_date).to eq(Time.zone.yesterday.to_date)
expect(lettings_log.voiddate).to be_nil expect(lettings_log.voiddate).to be_nil
end end
it "does not impact other validations" do it "does not impact other validations" do
expect { lettings_log.update!(startdate: Time.zone.yesterday, referral: 8, rsnvac: 9) } expect { lettings_log.update!(startdate: Time.zone.yesterday, first_time_property_let_as_social_housing: 0, referral: 8, rsnvac: 9) }
.to raise_error(ActiveRecord::RecordInvalid, /#{I18n.t('validations.lettings.property.rsnvac.referral_invalid')}/) .to raise_error(ActiveRecord::RecordInvalid, /#{I18n.t('validations.lettings.property.rsnvac.referral_invalid')}/)
end end
end end
@ -1352,21 +1242,12 @@ RSpec.describe LettingsLog do
it "clears major repairs date value" do it "clears major repairs date value" do
lettings_log.update!(startdate: Time.zone.yesterday) lettings_log.update!(startdate: Time.zone.yesterday)
lettings_log.reload lettings_log.reload
expect(lettings_log.startdate).to eq(Time.zone.yesterday) expect(lettings_log.startdate.to_date).to eq(Time.zone.yesterday.to_date)
expect(lettings_log.mrcdate).to be_nil expect(lettings_log.mrcdate).to be_nil
end end
end end
context "and the new location triggers the rent range validation" do context "and the new location triggers the rent range validation" do
around do |example|
Timecop.freeze(Time.zone.local(2022, 4, 1)) do
Singleton.__init__(FormHandler)
example.run
end
Timecop.return
Singleton.__init__(FormHandler)
end
it "clears rent values" do it "clears rent values" do
lettings_log.update!(location:, scheme:) lettings_log.update!(location:, scheme:)
lettings_log.reload lettings_log.reload
@ -1379,7 +1260,7 @@ RSpec.describe LettingsLog do
end end
it "does not impact other validations" do it "does not impact other validations" do
expect { lettings_log.update!(startdate: Time.zone.yesterday, referral: 8, rsnvac: 9) } expect { lettings_log.update!(startdate: Time.zone.yesterday, first_time_property_let_as_social_housing: 0, referral: 8, rsnvac: 9) }
.to raise_error(ActiveRecord::RecordInvalid, /#{I18n.t('validations.lettings.property.rsnvac.referral_invalid')}/) .to raise_error(ActiveRecord::RecordInvalid, /#{I18n.t('validations.lettings.property.rsnvac.referral_invalid')}/)
end end
end end
@ -1389,16 +1270,16 @@ RSpec.describe LettingsLog do
context "and the new startdate triggers void date validation" do context "and the new startdate triggers void date validation" do
it "doesn't clear void date value" do it "doesn't clear void date value" do
expect { lettings_log.update!(startdate: Time.zone.yesterday) }.to raise_error(ActiveRecord::RecordInvalid, /Enter a void date that is before the tenancy start date/) expect { lettings_log.update!(startdate: Time.zone.yesterday) }.to raise_error(ActiveRecord::RecordInvalid, /Enter a void date that is before the tenancy start date/)
expect(lettings_log.startdate).to eq(Time.zone.yesterday) expect(lettings_log.startdate.to_date).to eq(Time.zone.yesterday.to_date)
expect(lettings_log.voiddate).to eq(Time.zone.today) expect(lettings_log.voiddate.to_date).to eq(Time.zone.today.to_date)
end end
end end
context "and the new startdate triggers major repairs date validation" do context "and the new startdate triggers major repairs date validation" do
it "doesn't clear major repairs date value" do it "doesn't clear major repairs date value" do
expect { lettings_log.update!(startdate: Time.zone.yesterday) }.to raise_error(ActiveRecord::RecordInvalid, /Enter a major repairs date that is before the tenancy start date/) expect { lettings_log.update!(startdate: Time.zone.yesterday) }.to raise_error(ActiveRecord::RecordInvalid, /Enter a major repairs date that is before the tenancy start date/)
expect(lettings_log.startdate).to eq(Time.zone.yesterday) expect(lettings_log.startdate.to_date).to eq(Time.zone.yesterday.to_date)
expect(lettings_log.mrcdate).to eq(Time.zone.today) expect(lettings_log.mrcdate.to_date).to eq(Time.zone.today.to_date)
end end
end end
@ -1416,7 +1297,7 @@ RSpec.describe LettingsLog do
describe "tshortfall_unknown?" do describe "tshortfall_unknown?" do
context "when tshortfall is nil" do context "when tshortfall is nil" do
let(:lettings_log) { create(:lettings_log, :in_progress, tshortfall_known: nil) } let(:lettings_log) { create(:lettings_log, :in_progress, hb: 1, hbrentshortfall: 1, period: 1, tshortfall_known: nil) }
it "returns false" do it "returns false" do
expect(lettings_log.tshortfall_unknown?).to be false expect(lettings_log.tshortfall_unknown?).to be false
@ -1424,15 +1305,15 @@ RSpec.describe LettingsLog do
end end
context "when tshortfall is No" do context "when tshortfall is No" do
let(:lettings_log) { create(:lettings_log, :in_progress, tshortfall_known: 1) } let(:lettings_log) { create(:lettings_log, :in_progress, hb: 1, hbrentshortfall: 1, period: 1, tshortfall_known: 1) }
it "returns false" do it "returns true" do
expect(lettings_log.tshortfall_unknown?).to be true expect(lettings_log.tshortfall_unknown?).to be true
end end
end end
context "when tshortfall is Yes" do context "when tshortfall is Yes" do
let(:lettings_log) { create(:lettings_log, :in_progress, tshortfall_known: 0) } let(:lettings_log) { create(:lettings_log, :in_progress, hb: 1, hbrentshortfall: 1, period: 1, tshortfall_known: 0) }
it "returns false" do it "returns false" do
expect(lettings_log.tshortfall_unknown?).to be false expect(lettings_log.tshortfall_unknown?).to be false
@ -1466,13 +1347,13 @@ RSpec.describe LettingsLog do
soft_max: 400, soft_max: 400,
hard_min: 50, hard_min: 50,
hard_max: 500, hard_max: 500,
start_year: 2021, start_year: current_collection_start_year,
) )
lettings_log.la = "E07000223" lettings_log.la = "E07000223"
lettings_log.lettype = 1 lettings_log.lettype = 1
lettings_log.beds = 1 lettings_log.beds = 1
lettings_log.startdate = Time.zone.local(2021, 10, 10) lettings_log.startdate = current_collection_start_date + 6.months
end end
context "when period is weekly for 52 weeks" do context "when period is weekly for 52 weeks" do
@ -1501,17 +1382,12 @@ RSpec.describe LettingsLog do
end end
describe "scopes" do describe "scopes" do
let!(:lettings_log_1) { create(:lettings_log, :in_progress, startdate: Time.utc(2021, 5, 3), mrcdate: Time.utc(2021, 5, 3), voiddate: Time.utc(2021, 5, 3), assigned_to: assigned_to_user) } let!(:lettings_log_1) { create(:lettings_log, :in_progress, startdate: previous_collection_start_date + 1.month, mrcdate: previous_collection_start_date, voiddate: previous_collection_start_date, assigned_to: assigned_to_user) }
let!(:lettings_log_2) { create(:lettings_log, :completed, startdate: Time.utc(2021, 5, 3), mrcdate: Time.utc(2021, 5, 3), voiddate: Time.utc(2021, 5, 3), assigned_to: assigned_to_user) } let!(:lettings_log_2) { create(:lettings_log, :completed, startdate: previous_collection_start_date + 1.month, mrcdate: previous_collection_start_date, voiddate: previous_collection_start_date, assigned_to: assigned_to_user) }
let(:postcode_to_search) { "SW1A 0AA" } let(:postcode_to_search) { "SW1A 0AA" }
before do before do
Timecop.freeze(Time.utc(2022, 6, 3)) create(:lettings_log, startdate: Time.zone.today)
create(:lettings_log, startdate: Time.utc(2022, 6, 3))
end
after do
Timecop.unfreeze
end end
context "when searching logs" do context "when searching logs" do
@ -1689,62 +1565,46 @@ RSpec.describe LettingsLog do
end end
context "when filtering by year" do context "when filtering by year" do
before do
Timecop.freeze(Time.utc(2021, 5, 3))
end
after do
Timecop.unfreeze
end
it "allows filtering on a single year" do it "allows filtering on a single year" do
expect(described_class.filter_by_years(%w[2021]).count).to eq(2) expect(described_class.filter_by_years([previous_collection_start_year.to_s]).count).to eq(2)
end end
it "allows filtering by multiple years using OR" do it "allows filtering by multiple years using OR" do
expect(described_class.filter_by_years(%w[2021 2022]).count).to eq(3) expect(described_class.filter_by_years([previous_collection_start_year.to_s, current_collection_start_year.to_s]).count).to eq(3)
end end
it "can filter by year(s) AND status" do it "can filter by year(s) AND status" do
expect(described_class.filter_by_years(%w[2021 2022]).filter_by_status("completed").count).to eq(1) expect(described_class.filter_by_years([previous_collection_start_year.to_s, current_collection_start_year.to_s]).filter_by_status("completed").count).to eq(1)
end end
it "filters based on date boundaries correctly" do it "filters based on date boundaries correctly" do
lettings_log_1.startdate = Time.zone.local(2022, 4, 1) lettings_log_1.startdate = current_collection_start_date
lettings_log_1.save!(validate: false) lettings_log_1.save!(validate: false)
lettings_log_2.startdate = Time.zone.local(2022, 3, 31) lettings_log_2.startdate = current_collection_start_date - 1.day
lettings_log_2.save!(validate: false) lettings_log_2.save!(validate: false)
expect(described_class.filter_by_years(%w[2021]).count).to eq(1) expect(described_class.filter_by_years([previous_collection_start_year.to_s]).count).to eq(1)
expect(described_class.filter_by_years(%w[2022]).count).to eq(2) expect(described_class.filter_by_years([current_collection_start_year.to_s]).count).to eq(2)
end end
end end
context "when filtering by year or nil" do context "when filtering by year or nil" do
before do
Timecop.freeze(Time.utc(2021, 5, 3))
end
after do
Timecop.unfreeze
end
it "allows filtering on a single year or nil" do it "allows filtering on a single year or nil" do
lettings_log_1.startdate = nil lettings_log_1.startdate = nil
lettings_log_1.save!(validate: false) lettings_log_1.save!(validate: false)
expect(described_class.filter_by_years_or_nil(%w[2021]).count).to eq(2) expect(described_class.filter_by_years_or_nil([previous_collection_start_year.to_s]).count).to eq(2)
end end
it "allows filtering by multiple years or nil using OR" do it "allows filtering by multiple years or nil using OR" do
lettings_log_1.startdate = nil lettings_log_1.startdate = nil
lettings_log_1.save!(validate: false) lettings_log_1.save!(validate: false)
expect(described_class.filter_by_years_or_nil(%w[2021 2022]).count).to eq(3) expect(described_class.filter_by_years_or_nil([previous_collection_start_year.to_s, current_collection_start_year.to_s]).count).to eq(3)
end end
it "can filter by year(s) AND status" do it "can filter by year(s) AND status" do
lettings_log_2.startdate = nil lettings_log_2.startdate = nil
lettings_log_2.save!(validate: false) lettings_log_2.save!(validate: false)
expect(described_class.filter_by_years_or_nil(%w[2021 2022]).filter_by_status("in_progress").count).to eq(3) expect(described_class.filter_by_years_or_nil([previous_collection_start_year.to_s, current_collection_start_year.to_s]).filter_by_status("in_progress").count).to eq(3)
end end
end end
@ -2107,28 +1967,23 @@ RSpec.describe LettingsLog do
context "when there is a duplicate supported housing log" do context "when there is a duplicate supported housing log" do
let(:scheme) { create(:scheme, owning_organisation: organisation) } let(:scheme) { create(:scheme, owning_organisation: organisation) }
let(:location) { create(:location, scheme:) } let(:location) { create(:location, scheme:) }
let(:location_2) { create(:location, scheme:) }
let!(:supported_housing_log) { create(:lettings_log, :duplicate, needstype: 2, location:, scheme:, owning_organisation: organisation) } let!(:supported_housing_log) { create(:lettings_log, :duplicate, needstype: 2, location:, scheme:, owning_organisation: organisation) }
let!(:duplicate_supported_housing_log) { create(:lettings_log, :duplicate, needstype: 2, location:, scheme:, owning_organisation: organisation) } let!(:duplicate_supported_housing_log) { create(:lettings_log, :duplicate, needstype: 2, location:, scheme:, owning_organisation: organisation) }
it "returns the log as a duplicate" do it "returns the log as a duplicate" do
expect(duplicate_sets.count).to eq(2) expect(duplicate_sets).to contain_exactly(
expect(duplicate_sets.first).to contain_exactly(log.id, duplicate_log.id) match_array([log.id, duplicate_log.id]),
expect(duplicate_sets.second).to contain_exactly(duplicate_supported_housing_log.id, supported_housing_log.id) match_array([duplicate_supported_housing_log.id, supported_housing_log.id]),
end )
it "does not return the log if the locations are different" do
duplicate_supported_housing_log.update!(location: location_2)
expect(duplicate_sets.count).to eq(1)
expect(duplicate_sets.first).to contain_exactly(log.id, duplicate_log.id)
end end
it "does not compare tcharge if there are no household charges" do it "does not compare tcharge if there are no household charges" do
supported_housing_log.update!(household_charge: 1, supcharg: nil, brent: nil, scharge: nil, pscharge: nil, tcharge: nil, owning_organisation: organisation) supported_housing_log.update!(household_charge: 1, supcharg: nil, brent: nil, scharge: nil, pscharge: nil, tcharge: nil, owning_organisation: organisation)
duplicate_supported_housing_log.update!(household_charge: 1, supcharg: nil, brent: nil, scharge: nil, pscharge: nil, tcharge: nil, owning_organisation: organisation) duplicate_supported_housing_log.update!(household_charge: 1, supcharg: nil, brent: nil, scharge: nil, pscharge: nil, tcharge: nil, owning_organisation: organisation)
expect(duplicate_sets.count).to eq(2) expect(duplicate_sets).to contain_exactly(
expect(duplicate_sets.first).to contain_exactly(log.id, duplicate_log.id) match_array([log.id, duplicate_log.id]),
expect(duplicate_sets.second).to contain_exactly(supported_housing_log.id, duplicate_supported_housing_log.id) match_array([supported_housing_log.id, duplicate_supported_housing_log.id]),
)
end end
it "does not return logs not associated with the user if user is given" do it "does not return logs not associated with the user if user is given" do
@ -2142,9 +1997,10 @@ RSpec.describe LettingsLog do
it "compares chcharge if it's a carehome" do it "compares chcharge if it's a carehome" do
supported_housing_log.update!(is_carehome: 1, chcharge: 100, supcharg: nil, brent: nil, scharge: nil, pscharge: nil, tcharge: nil, owning_organisation: organisation) supported_housing_log.update!(is_carehome: 1, chcharge: 100, supcharg: nil, brent: nil, scharge: nil, pscharge: nil, tcharge: nil, owning_organisation: organisation)
duplicate_supported_housing_log.update!(is_carehome: 1, chcharge: 100, supcharg: nil, brent: nil, scharge: nil, pscharge: nil, tcharge: nil, owning_organisation: organisation) duplicate_supported_housing_log.update!(is_carehome: 1, chcharge: 100, supcharg: nil, brent: nil, scharge: nil, pscharge: nil, tcharge: nil, owning_organisation: organisation)
expect(duplicate_sets.count).to eq(2) expect(duplicate_sets).to contain_exactly(
expect(duplicate_sets.first).to contain_exactly(log.id, duplicate_log.id) match_array([log.id, duplicate_log.id]),
expect(duplicate_sets.second).to contain_exactly(supported_housing_log.id, duplicate_supported_housing_log.id) match_array([supported_housing_log.id, duplicate_supported_housing_log.id]),
)
end end
it "does not return a duplicate if carehome charge is not given" do it "does not return a duplicate if carehome charge is not given" do
@ -2305,12 +2161,6 @@ RSpec.describe LettingsLog do
end end
describe "#non_location_setup_questions_completed" do describe "#non_location_setup_questions_completed" do
before do
Timecop.return
allow(FormHandler.instance).to receive(:current_lettings_form).and_call_original
Singleton.__init__(FormHandler)
end
context "when setup section has been completed" do context "when setup section has been completed" do
let(:lettings_log) { build_stubbed(:lettings_log, :setup_completed) } let(:lettings_log) { build_stubbed(:lettings_log, :setup_completed) }

Loading…
Cancel
Save