Browse Source

CLDC-3426: Ensure outright sale section can be completed with mortgage used unknown

pull/2399/head
Rachael Booth 2 years ago
parent
commit
25ae5368c1
  1. 22
      app/models/derived_variables/sales_log_variables.rb
  2. 6
      app/models/form/sales/questions/deposit_amount.rb
  3. 4
      spec/models/form/sales/questions/deposit_amount_spec.rb
  4. 29
      spec/models/sales_log_spec.rb

22
app/models/derived_variables/sales_log_variables.rb

@ -18,11 +18,15 @@ module DerivedVariables::SalesLogVariables
self.hoyear = hodate.year
end
if outright_sale? && mortgage_not_used?
self.deposit = value
elsif outright_sale? && mortgageused_changed?(from: 2, to: 1)
# Clear when switching mortgage used from no to yes
self.deposit = nil
if outright_sale?
if mortgage_not_used?
self.deposit = value
elsif mortgage_use_unknown?
self.deposit = nil
elsif mortgageused_changed?(to: 1)
# Clear when switching mortgage used to yes
self.deposit = nil
end
end
if saledate && form.start_year_after_2024? && discounted_ownership_sale?
@ -108,6 +112,14 @@ private
mortgage: 0,
},
},
{
conditions: {
mortgageused: 3,
},
derived_values: {
mortgage: nil,
},
},
].freeze
def number_of_household_members

6
app/models/form/sales/questions/deposit_amount.rb

@ -16,11 +16,7 @@ class Form::Sales::Questions::DepositAmount < ::Form::Question
end
def derived?(log)
log.outright_sale? && log.mortgage_not_used?
end
def selected_answer_option_is_derived?(_log)
true
log.outright_sale? && !log.mortgage_used?
end
QUESTION_NUMBER_FROM_YEAR_AND_OWNERSHIP = {

4
spec/models/form/sales/questions/deposit_amount_spec.rb

@ -56,9 +56,9 @@ RSpec.describe Form::Sales::Questions::DepositAmount, type: :model do
expect(question.derived?(log)).to be true
end
it "is not marked as derived when the mortgage use is unknown" do
it "is marked as derived when the mortgage use is unknown" do
log.mortgageused = 3
expect(question.derived?(log)).to be false
expect(question.derived?(log)).to be true
end
end

29
spec/models/sales_log_spec.rb

@ -538,6 +538,11 @@ RSpec.describe SalesLog, type: :model do
describe "derived variables" do
let(:sales_log) { create(:sales_log, :completed) }
before do
Timecop.return
Singleton.__init__(FormHandler)
end
it "correctly derives and saves exday, exmonth and exyear" do
sales_log.update!(exdate: Time.gm(2023, 5, 4), saledate: Time.gm(2023, 7, 4), ownershipsch: 1, type: 18, staircase: 2, resale: 2, proplen: 0)
record_from_db = described_class.find(sales_log.id)
@ -564,20 +569,26 @@ RSpec.describe SalesLog, type: :model do
expect(record_from_db["deposit"]).to eq(nil)
end
it "does not derive deposit if the mortgage use is unknown" do
Timecop.freeze(2024, 5, 2)
sales_log.update!(value: 123_400, deposit: nil, saledate: Time.zone.local(2024, 5, 2), mortgageused: 3, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1)
it "derives deposit as nil if the mortgage use is unknown" do
sales_log.update!(value: 123_400, deposit: 0, saledate: Time.zone.local(2024, 5, 2), mortgageused: 3, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1)
record_from_db = described_class.find(sales_log.id)
expect(record_from_db["deposit"]).to eq(nil)
end
it "clears deposit when setting mortgage used to yes from no for outright sales" do
sales_log.update!(value: 123_400, deposit: nil, mortgageused: 2, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1)
it "clears deposit when setting mortgage used to yes for outright sales" do
sales_log.update!(value: 123_400, deposit: 123_400, mortgageused: 2, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1)
sales_log.update!(mortgageused: 1)
record_from_db = described_class.find(sales_log.id)
expect(record_from_db["deposit"]).to eq(nil)
end
it "does not clear deposit when mortgage used is not changed" do
sales_log.update!(value: 123_400, deposit: 25_000, mortgageused: 1, ownershipsch: 3, type: 10, companybuy: 1, jointpur: 1, jointmore: 1)
sales_log.update!(mortgageused: 1)
record_from_db = described_class.find(sales_log.id)
expect(record_from_db["deposit"]).to eq(25_000)
end
it "correctly derives and saves pcode1 and pcode1 and pcode2" do
sales_log.update!(postcode_full: "W6 0SP")
record_from_db = described_class.find(sales_log.id)
@ -587,16 +598,14 @@ RSpec.describe SalesLog, type: :model do
it "derives a mortgage value of 0 when mortgage is not used" do
# to avoid log failing validations when mortgage value is removed:
new_grant_value = sales_log.grant + sales_log.mortgage
sales_log.update!(mortgageused: 2, grant: new_grant_value)
sales_log.update!(mortgage: 100_000, grant: nil, deposit: nil)
sales_log.update!(mortgageused: 2)
record_from_db = described_class.find(sales_log.id)
expect(record_from_db["mortgage"]).to eq(0.0)
end
it "clears mortgage value if mortgage used is changed from no to yes" do
# to avoid log failing validations when mortgage value is removed:
new_grant_value = sales_log.grant + sales_log.mortgage
sales_log.update!(mortgageused: 2, grant: new_grant_value)
sales_log.update!(mortgageused: 2, grant: nil)
sales_log.update!(mortgageused: 1)
record_from_db = described_class.find(sales_log.id)
expect(record_from_db["mortgage"]).to eq(nil)

Loading…
Cancel
Save