From 69aa90a1cd05cc13aa2bd27a6da6eb76a92d9195 Mon Sep 17 00:00:00 2001 From: Jack <113976590+bibblobcode@users.noreply.github.com> Date: Thu, 6 Apr 2023 12:12:15 +0100 Subject: [PATCH] CLDC-1975 Format money values with 2 decimals (#1493) * Format errors on money amounts with 2 decimals * CLDC-1975 Format money input and error messages * format discounted_ownership_value * Format more locales * Update lettings_log tests * Fix import service spec --- app/helpers/money_formatting_helper.rb | 23 +++++++ app/models/lettings_log.rb | 5 +- app/models/log.rb | 4 -- app/models/sales_log.rb | 3 +- .../validations/financial_validations.rb | 29 ++++++--- .../sales/sale_information_validations.rb | 9 ++- .../form/_numeric_output_question.html.erb | 3 +- app/views/form/_numeric_question.html.erb | 11 +++- config/locales/en.yml | 16 ++--- spec/helpers/money_formatting_helper_spec.rb | 41 ++++++++++++ spec/models/lettings_log_spec.rb | 8 +-- spec/models/sales_log_spec.rb | 2 +- .../validations/financial_validations_spec.rb | 40 ++++++------ .../sale_information_validations_spec.rb | 63 +++++++++++-------- .../lettings_logs_import_service_spec.rb | 8 +-- 15 files changed, 184 insertions(+), 81 deletions(-) create mode 100644 app/helpers/money_formatting_helper.rb create mode 100644 spec/helpers/money_formatting_helper_spec.rb diff --git a/app/helpers/money_formatting_helper.rb b/app/helpers/money_formatting_helper.rb new file mode 100644 index 000000000..246d910fe --- /dev/null +++ b/app/helpers/money_formatting_helper.rb @@ -0,0 +1,23 @@ +module MoneyFormattingHelper + include ActionView::Helpers::NumberHelper + + def format_money_input(log:, question:) + value = log[question.id] + + return unless value + return value unless question.prefix == "£" + + number_with_precision( + value, + precision: 2, + ) + end + + def format_as_currency(num_string) + number_to_currency( + num_string, + unit: "£", + precision: 2, + ) + end +end diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index 4a0651a29..0ddc921be 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -20,6 +20,7 @@ class LettingsLog < Log include DerivedVariables::LettingsLogVariables include Validations::DateValidations include Validations::FinancialValidations + include MoneyFormattingHelper has_paper_trail @@ -137,7 +138,7 @@ class LettingsLog < Log def weekly_to_value_per_period(field_value) num_of_weeks = NUM_OF_WEEKS_FROM_PERIOD[period] - ((field_value * 52) / num_of_weeks).round(2) + format_as_currency((field_value * 52) / num_of_weeks) end def applicable_income_range @@ -638,7 +639,7 @@ private num_of_weeks = NUM_OF_WEEKS_FROM_PERIOD[period] return "" unless value && num_of_weeks - (value * 52 / num_of_weeks).round(2) + format_as_currency((value * 52 / num_of_weeks)) end def fully_wheelchair_accessible? diff --git a/app/models/log.rb b/app/models/log.rb index bc036d356..6a36b948d 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -217,8 +217,4 @@ private self[is_inferred_key] = false self[postcode_key] = nil end - - def format_as_currency(num_string) - ActionController::Base.helpers.number_to_currency(num_string, unit: "£") - end end diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index b0aed712a..b86124a2f 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -18,6 +18,7 @@ class SalesLog < Log include DerivedVariables::SalesLogVariables include Validations::Sales::SoftValidations include Validations::SoftValidations + include MoneyFormattingHelper self.inheritance_column = :_type_disabled @@ -215,7 +216,7 @@ class SalesLog < Log def expected_shared_ownership_deposit_value return unless value && equity - (value * equity / 100).round(2) + format_as_currency(value * equity / 100) end def process_postcode(postcode, postcode_known_key, la_inferred_key, la_key) diff --git a/app/models/validations/financial_validations.rb b/app/models/validations/financial_validations.rb index 5fba288bb..3a0014119 100644 --- a/app/models/validations/financial_validations.rb +++ b/app/models/validations/financial_validations.rb @@ -1,5 +1,6 @@ module Validations::FinancialValidations include Validations::SharedValidations + include MoneyFormattingHelper # Validations methods need to be called 'validate_' to run on model save # or 'validate_' to run on submit as well def validate_outstanding_rent_amount(record) @@ -24,12 +25,26 @@ module Validations::FinancialValidations def validate_net_income(record) if record.ecstat1 && record.weekly_net_income if record.weekly_net_income > record.applicable_income_range.hard_max - record.errors.add :earnings, :over_hard_max, message: I18n.t("validations.financial.earnings.over_hard_max", hard_max: record.applicable_income_range.hard_max) - record.errors.add :ecstat1, :over_hard_max, message: I18n.t("validations.financial.ecstat.over_hard_max", hard_max: record.applicable_income_range.hard_max) + hard_max = format_as_currency(record.applicable_income_range.hard_max) + record.errors.add( + :earnings, + :over_hard_max, + message: I18n.t("validations.financial.earnings.over_hard_max", hard_max:), + ) + record.errors.add( + :ecstat1, + :over_hard_max, + message: I18n.t("validations.financial.ecstat.over_hard_max", hard_max:), + ) end if record.weekly_net_income < record.applicable_income_range.hard_min - record.errors.add :earnings, :under_hard_min, message: I18n.t("validations.financial.earnings.under_hard_min", hard_min: record.applicable_income_range.hard_min) + hard_min = format_as_currency(record.applicable_income_range.hard_min) + record.errors.add( + :earnings, + :under_hard_min, + message: I18n.t("validations.financial.earnings.under_hard_min", hard_min:), + ) end end @@ -120,10 +135,10 @@ module Validations::FinancialValidations elsif !weekly_value_in_range(record, "chcharge", 10, 1000) max_chcharge = record.weekly_to_value_per_period(1000) min_chcharge = record.weekly_to_value_per_period(10) - max_chcharge = [record.form.get_question("chcharge", record).prefix, max_chcharge].join("") if record.form.get_question("chcharge", record).present? - min_chcharge = [record.form.get_question("chcharge", record).prefix, min_chcharge].join("") if record.form.get_question("chcharge", record).present? - record.errors.add :period, I18n.t("validations.financial.carehome.out_of_range", period:, min_chcharge:, max_chcharge:) - record.errors.add :chcharge, :out_of_range, message: I18n.t("validations.financial.carehome.out_of_range", period:, min_chcharge:, max_chcharge:) + message = I18n.t("validations.financial.carehome.out_of_range", period:, min_chcharge:, max_chcharge:) + + record.errors.add :period, message + record.errors.add :chcharge, :out_of_range, message: message end end end diff --git a/app/models/validations/sales/sale_information_validations.rb b/app/models/validations/sales/sale_information_validations.rb index fcd1854f4..e4714e81a 100644 --- a/app/models/validations/sales/sale_information_validations.rb +++ b/app/models/validations/sales/sale_information_validations.rb @@ -1,5 +1,6 @@ module Validations::Sales::SaleInformationValidations include CollectionTimeHelper + include MoneyFormattingHelper def validate_practical_completion_date_before_saledate(record) return if record.saledate.blank? || record.hodate.blank? @@ -54,7 +55,13 @@ module Validations::Sales::SaleInformationValidations if record.mortgage_deposit_and_grant_total != record.value_with_discount && record.discounted_ownership_sale? %i[mortgage deposit grant value discount ownershipsch].each do |field| - record.errors.add field, I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: sprintf("%.2f", record.value_with_discount)) + record.errors.add( + field, + I18n.t( + "validations.sale_information.discounted_ownership_value", + value_with_discount: format_as_currency(record.value_with_discount), + ), + ) end end end diff --git a/app/views/form/_numeric_output_question.html.erb b/app/views/form/_numeric_output_question.html.erb index 8892523aa..7d681f7ea 100644 --- a/app/views/form/_numeric_output_question.html.erb +++ b/app/views/form/_numeric_output_question.html.erb @@ -16,7 +16,8 @@ type="number" name="lettings_log[tcharge]" for="<%= question.fields_added.present? ? question.fields_added.map { |x| "lettings-log-#{x}-field" }.join(" ") : "" %>"> - <%= lettings_log[question.id] %> + <%= format_money_input(log: lettings_log, question:) %> + <%= question.suffix_label(lettings_log) %> diff --git a/app/views/form/_numeric_question.html.erb b/app/views/form/_numeric_question.html.erb index 0aeb63801..b92d0f736 100644 --- a/app/views/form/_numeric_question.html.erb +++ b/app/views/form/_numeric_question.html.erb @@ -1,14 +1,19 @@ <%= render partial: "form/guidance/#{question.guidance_partial}" if question.top_guidance? %> -<%= f.govuk_number_field question.id.to_sym, +<%= f.govuk_number_field( + question.id.to_sym, caption: caption(caption_text, page_header, conditional), label: legend(question, page_header, conditional), hint: { text: question.hint_text&.html_safe }, - min: question.min, max: question.max, step: question.step, + min: question.min, + max: question.max, + step: question.step, width: question.width, readonly: question.read_only?, prefix_text: question.prefix.to_s, suffix_text: question.suffix_label(@log), - **stimulus_html_attributes(question) %> + value: format_money_input(log: @log, question:), + **stimulus_html_attributes(question), +) %> <%= render partial: "form/guidance/#{question.guidance_partial}" if question.bottom_guidance? %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 1e7ed58af..68e1d72fc 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -248,15 +248,15 @@ en: benefits: part_or_full_time: "Answer cannot be ‘all’ for income from Universal Credit, state pensions or benefits if the tenant or their partner works part-time or full-time" earnings: - over_hard_max: "Net income cannot be greater than £%{hard_max} per week given the tenant’s working situation" - under_hard_min: "Net income cannot be less than £%{hard_min} per week given the tenant’s working situation" + over_hard_max: "Net income cannot be greater than %{hard_max} per week given the tenant’s working situation" + under_hard_min: "Net income cannot be less than %{hard_min} per week given the tenant’s working situation" freq_missing: "Select how often the household receives income" earnings_missing: "Enter how much income the household has in total" income: - over_hard_max_for_london: "Income must not exceed £90,000 for properties within London local authorities" - over_hard_max_for_outside_london: "Income must not exceed £80,000 for properties outside London local authorities" - combined_over_hard_max_for_london: "Combined income must not exceed £90,000 for properties within London local authorities" - combined_over_hard_max_for_outside_london: "Combined income must not exceed £80,000 for properties outside London local authorities" + over_hard_max_for_london: "Income must not exceed £90,000.00 for properties within London local authorities" + over_hard_max_for_outside_london: "Income must not exceed £80,000.00 for properties outside London local authorities" + combined_over_hard_max_for_london: "Combined income must not exceed £90,000.00 for properties within London local authorities" + combined_over_hard_max_for_outside_london: "Combined income must not exceed £80,000.00 for properties outside London local authorities" child_has_income: "Child's income must be £0" negative_currency: "Enter an amount above 0" rent: @@ -498,9 +498,9 @@ en: must_be_after_hodate: "Sale completion date must be after practical completion or handover date" previous_property_type: property_type_bedsit: "A bedsit cannot have more than 1 bedroom" - discounted_ownership_value: "Mortgage, deposit, and grant total must equal £%{value_with_discount}" + discounted_ownership_value: "Mortgage, deposit, and grant total must equal %{value_with_discount}" monthly_rent: - higher_than_expected: "Basic monthly rent must be between £0 and £9,999" + higher_than_expected: "Basic monthly rent must be between £0.00 and £9,999.00" soft_validations: net_income: diff --git a/spec/helpers/money_formatting_helper_spec.rb b/spec/helpers/money_formatting_helper_spec.rb new file mode 100644 index 000000000..cd16ea86c --- /dev/null +++ b/spec/helpers/money_formatting_helper_spec.rb @@ -0,0 +1,41 @@ +require "rails_helper" + +RSpec.describe MoneyFormattingHelper do + describe "#format_money_input" do + let!(:log) { create(:lettings_log, :completed, brent: 1000) } + let(:question) { instance_double(Form::Question, id: "brent", prefix:) } + + context "with £ prefix" do + let(:prefix) { "£" } + + it "returns formatted input" do + expect(format_money_input(log:, question:)).to eq("1000.00") + end + end + + context "with other prefix" do + let(:prefix) { "other" } + + it "does not format the input" do + expect(format_money_input(log:, question:)).to eq(BigDecimal(1000)) + end + end + + context "without prefix" do + let(:prefix) { nil } + + it "does not format the input" do + expect(format_money_input(log:, question:)).to eq(BigDecimal(1000)) + end + end + + context "when value is nil" do + let(:prefix) { "£" } + let(:log) { create(:lettings_log, brent: nil) } + + it "does not format the input" do + expect(format_money_input(log:, question:)).to be_nil + end + end + end +end diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index 2358317af..1e6fd3244 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -2605,24 +2605,24 @@ RSpec.describe LettingsLog do context "when period is weekly for 52 weeks" do it "returns weekly soft min for 52 weeks" do lettings_log.period = 1 - expect(lettings_log.soft_min_for_period).to eq("100.0 every week") + expect(lettings_log.soft_min_for_period).to eq("£100.00 every week") end it "returns weekly soft max for 52 weeks" do lettings_log.period = 1 - expect(lettings_log.soft_max_for_period).to eq("400.0 every week") + expect(lettings_log.soft_max_for_period).to eq("£400.00 every week") end end context "when period is weekly for 47 weeks" do it "returns weekly soft min for 47 weeks" do lettings_log.period = 8 - expect(lettings_log.soft_min_for_period).to eq("110.64 every week") + expect(lettings_log.soft_min_for_period).to eq("£110.64 every week") end it "returns weekly soft max for 47 weeks" do lettings_log.period = 8 - expect(lettings_log.soft_max_for_period).to eq("442.55 every week") + expect(lettings_log.soft_max_for_period).to eq("£442.55 every week") end end end diff --git a/spec/models/sales_log_spec.rb b/spec/models/sales_log_spec.rb index ca72794a5..0632af547 100644 --- a/spec/models/sales_log_spec.rb +++ b/spec/models/sales_log_spec.rb @@ -498,7 +498,7 @@ RSpec.describe SalesLog, type: :model do let!(:completed_sales_log) { create(:sales_log, :completed, ownershipsch: 1, type: 2, value: 1000, equity: 50) } it "is set to completed for a completed sales log" do - expect(completed_sales_log.expected_shared_ownership_deposit_value).to eq(500) + expect(completed_sales_log.expected_shared_ownership_deposit_value).to eq("£500.00") end end diff --git a/spec/models/validations/financial_validations_spec.rb b/spec/models/validations/financial_validations_spec.rb index 8cb777029..6ae2a4607 100644 --- a/spec/models/validations/financial_validations_spec.rb +++ b/spec/models/validations/financial_validations_spec.rb @@ -202,7 +202,7 @@ RSpec.describe Validations::FinancialValidations do record.ecstat1 = 1 financial_validator.validate_net_income(record) expect(record.errors["earnings"]) - .to include(match I18n.t("validations.financial.earnings.over_hard_max", hard_max: 1230)) + .to eq(["Net income cannot be greater than £1,230.00 per week given the tenant’s working situation"]) end end @@ -213,7 +213,7 @@ RSpec.describe Validations::FinancialValidations do record.ecstat1 = 1 financial_validator.validate_net_income(record) expect(record.errors["earnings"]) - .to include(match I18n.t("validations.financial.earnings.under_hard_min", hard_min: 90)) + .to eq(["Net income cannot be less than £90.00 per week given the tenant’s working situation"]) end end end @@ -913,15 +913,15 @@ RSpec.describe Validations::FinancialValidations do record.is_carehome = 1 end - context "and charges are over the valid limit (£1000 per week)" do + context "and charges are over the valid limit (£1,000 per week)" do it "validates charge when period is weekly for 52 weeks" do record.period = 1 record.chcharge = 1001 financial_validator.validate_care_home_charges(record) expect(record.errors["chcharge"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 10, period: "weekly for 52 weeks", max_chcharge: 1000)) + .to include("Household rent and other charges must be between £10.00 and £1,000.00 if paying weekly for 52 weeks") expect(record.errors["period"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 10, period: "weekly for 52 weeks", max_chcharge: 1000)) + .to include("Household rent and other charges must be between £10.00 and £1,000.00 if paying weekly for 52 weeks") end it "validates charge when period is monthly" do @@ -929,9 +929,9 @@ RSpec.describe Validations::FinancialValidations do record.chcharge = 4334 financial_validator.validate_care_home_charges(record) expect(record.errors["chcharge"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 43, period: "every calendar month", max_chcharge: 4333)) + .to include("Household rent and other charges must be between £43.00 and £4,333.00 if paying every calendar month") expect(record.errors["period"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 43, period: "every calendar month", max_chcharge: 4333)) + .to include("Household rent and other charges must be between £43.00 and £4,333.00 if paying every calendar month") end it "validates charge when period is every 2 weeks" do @@ -939,9 +939,9 @@ RSpec.describe Validations::FinancialValidations do record.chcharge = 2001 financial_validator.validate_care_home_charges(record) expect(record.errors["chcharge"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 20, period: "every 2 weeks", max_chcharge: 2000)) + .to include("Household rent and other charges must be between £20.00 and £2,000.00 if paying every 2 weeks") expect(record.errors["period"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 20, period: "every 2 weeks", max_chcharge: 2000)) + .to include("Household rent and other charges must be between £20.00 and £2,000.00 if paying every 2 weeks") end it "validates charge when period is every 4 weeks" do @@ -949,13 +949,13 @@ RSpec.describe Validations::FinancialValidations do record.chcharge = 4001 financial_validator.validate_care_home_charges(record) expect(record.errors["chcharge"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 40, period: "every 4 weeks", max_chcharge: 4000)) + .to include("Household rent and other charges must be between £40.00 and £4,000.00 if paying every 4 weeks") expect(record.errors["period"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 40, period: "every 4 weeks", max_chcharge: 4000)) + .to include("Household rent and other charges must be between £40.00 and £4,000.00 if paying every 4 weeks") end end - context "and charges are within the valid limit (£1000 per week)" do + context "and charges are within the valid limit (£1,000 per week)" do it "does not throw error when period is weekly for 52 weeks" do record.period = 1 record.chcharge = 999 @@ -1007,9 +1007,9 @@ RSpec.describe Validations::FinancialValidations do record.chcharge = 9 financial_validator.validate_care_home_charges(record) expect(record.errors["chcharge"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 10, period: "weekly for 52 weeks", max_chcharge: 1000)) + .to include("Household rent and other charges must be between £10.00 and £1,000.00 if paying weekly for 52 weeks") expect(record.errors["period"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 10, period: "weekly for 52 weeks", max_chcharge: 1000)) + .to include("Household rent and other charges must be between £10.00 and £1,000.00 if paying weekly for 52 weeks") end it "validates charge when period is monthly" do @@ -1017,9 +1017,9 @@ RSpec.describe Validations::FinancialValidations do record.chcharge = 42 financial_validator.validate_care_home_charges(record) expect(record.errors["chcharge"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 43, period: "every calendar month", max_chcharge: 4333)) + .to include("Household rent and other charges must be between £43.00 and £4,333.00 if paying every calendar month") expect(record.errors["period"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 43, period: "every calendar month", max_chcharge: 4333)) + .to include("Household rent and other charges must be between £43.00 and £4,333.00 if paying every calendar month") end it "validates charge when period is every 2 weeks" do @@ -1027,9 +1027,9 @@ RSpec.describe Validations::FinancialValidations do record.chcharge = 19 financial_validator.validate_care_home_charges(record) expect(record.errors["chcharge"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 20, period: "every 2 weeks", max_chcharge: 2000)) + .to include("Household rent and other charges must be between £20.00 and £2,000.00 if paying every 2 weeks") expect(record.errors["period"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 20, period: "every 2 weeks", max_chcharge: 2000)) + .to include("Household rent and other charges must be between £20.00 and £2,000.00 if paying every 2 weeks") end it "validates charge when period is every 4 weeks" do @@ -1037,9 +1037,9 @@ RSpec.describe Validations::FinancialValidations do record.chcharge = 39 financial_validator.validate_care_home_charges(record) expect(record.errors["chcharge"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 40, period: "every 4 weeks", max_chcharge: 4000)) + .to include("Household rent and other charges must be between £40.00 and £4,000.00 if paying every 4 weeks") expect(record.errors["period"]) - .to include(match I18n.t("validations.financial.carehome.out_of_range", min_chcharge: 40, period: "every 4 weeks", max_chcharge: 4000)) + .to include("Household rent and other charges must be between £40.00 and £4,000.00 if paying every 4 weeks") end end end diff --git a/spec/models/validations/sales/sale_information_validations_spec.rb b/spec/models/validations/sales/sale_information_validations_spec.rb index 3a8944e79..cccb19d40 100644 --- a/spec/models/validations/sales/sale_information_validations_spec.rb +++ b/spec/models/validations/sales/sale_information_validations_spec.rb @@ -246,11 +246,13 @@ RSpec.describe Validations::Sales::SaleInformationValidations do it "adds an error if mortgage, deposit and grant total does not equal market value" do record.grant = 3_000 sale_information_validator.validate_discounted_ownership_value(record) - expect(record.errors[:mortgage]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "30000.00")) - expect(record.errors[:deposit]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "30000.00")) - expect(record.errors[:grant]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "30000.00")) - expect(record.errors[:value]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "30000.00")) - expect(record.errors[:discount]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "30000.00")) + expected_message = ["Mortgage, deposit, and grant total must equal £30,000.00"] + + expect(record.errors[:mortgage]).to eq(expected_message) + expect(record.errors[:deposit]).to eq(expected_message) + expect(record.errors[:grant]).to eq(expected_message) + expect(record.errors[:value]).to eq(expected_message) + expect(record.errors[:discount]).to eq(expected_message) end it "does not add an error if mortgage, deposit and grant total equals market value" do @@ -280,11 +282,14 @@ RSpec.describe Validations::Sales::SaleInformationValidations do it "adds an error if mortgage and deposit total does not equal market value - discount" do record.discount = 10 sale_information_validator.validate_discounted_ownership_value(record) - expect(record.errors[:mortgage]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "27000.00")) - expect(record.errors[:deposit]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "27000.00")) - expect(record.errors[:grant]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "27000.00")) - expect(record.errors[:value]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "27000.00")) - expect(record.errors[:discount]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "27000.00")) + + expected_message = ["Mortgage, deposit, and grant total must equal £27,000.00"] + + expect(record.errors[:mortgage]).to eq(expected_message) + expect(record.errors[:deposit]).to eq(expected_message) + expect(record.errors[:grant]).to eq(expected_message) + expect(record.errors[:value]).to eq(expected_message) + expect(record.errors[:discount]).to eq(expected_message) end it "does not add an error if mortgage and deposit total equals market value - discount" do @@ -301,11 +306,14 @@ RSpec.describe Validations::Sales::SaleInformationValidations do it "adds an error if mortgage and deposit total does not equal market value" do record.deposit = 2_000 sale_information_validator.validate_discounted_ownership_value(record) - expect(record.errors[:mortgage]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "30000.00")) - expect(record.errors[:deposit]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "30000.00")) - expect(record.errors[:grant]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "30000.00")) - expect(record.errors[:value]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "30000.00")) - expect(record.errors[:discount]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "30000.00")) + + expected_message = ["Mortgage, deposit, and grant total must equal £30,000.00"] + + expect(record.errors[:mortgage]).to eq(expected_message) + expect(record.errors[:deposit]).to eq(expected_message) + expect(record.errors[:grant]).to eq(expected_message) + expect(record.errors[:value]).to eq(expected_message) + expect(record.errors[:discount]).to eq(expected_message) end it "does not add an error if mortgage and deposit total equals market value" do @@ -334,11 +342,14 @@ RSpec.describe Validations::Sales::SaleInformationValidations do it "adds an error if mortgage, grant and deposit total does not equal market value - discount" do record.mortgage = 10 sale_information_validator.validate_discounted_ownership_value(record) - expect(record.errors[:mortgage]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "18000.00")) - expect(record.errors[:deposit]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "18000.00")) - expect(record.errors[:grant]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "18000.00")) - expect(record.errors[:value]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "18000.00")) - expect(record.errors[:discount]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "18000.00")) + + expected_message = ["Mortgage, deposit, and grant total must equal £18,000.00"] + + expect(record.errors[:mortgage]).to eq(expected_message) + expect(record.errors[:deposit]).to eq(expected_message) + expect(record.errors[:grant]).to eq(expected_message) + expect(record.errors[:value]).to eq(expected_message) + expect(record.errors[:discount]).to eq(expected_message) end it "does not add an error if mortgage, grant and deposit total equals market value - discount" do @@ -354,11 +365,13 @@ RSpec.describe Validations::Sales::SaleInformationValidations do it "adds an error if grant and deposit total does not equal market value - discount" do sale_information_validator.validate_discounted_ownership_value(record) - expect(record.errors[:mortgage]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "18000.00")) - expect(record.errors[:deposit]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "18000.00")) - expect(record.errors[:grant]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "18000.00")) - expect(record.errors[:value]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "18000.00")) - expect(record.errors[:discount]).to include(I18n.t("validations.sale_information.discounted_ownership_value", value_with_discount: "18000.00")) + + expected_message = ["Mortgage, deposit, and grant total must equal £18,000.00"] + expect(record.errors[:mortgage]).to eq(expected_message) + expect(record.errors[:deposit]).to eq(expected_message) + expect(record.errors[:grant]).to eq(expected_message) + expect(record.errors[:value]).to eq(expected_message) + expect(record.errors[:discount]).to eq(expected_message) end it "does not add an error if mortgage, grant and deposit total equals market value - discount" do diff --git a/spec/services/imports/lettings_logs_import_service_spec.rb b/spec/services/imports/lettings_logs_import_service_spec.rb index 50a285ed9..deccde0c0 100644 --- a/spec/services/imports/lettings_logs_import_service_spec.rb +++ b/spec/services/imports/lettings_logs_import_service_spec.rb @@ -223,8 +223,8 @@ RSpec.describe Imports::LettingsLogsImportService do end it "intercepts the relevant validation error" do - expect(logger).to receive(:warn).with(/Removing earnings with error: Net income cannot be less than £10 per week given the tenant’s working situation/) - expect(logger).to receive(:warn).with(/Removing incfreq with error: Net income cannot be less than £10 per week given the tenant’s working situation/) + expect(logger).to receive(:warn).with(/Removing earnings with error: Net income cannot be less than £10.00 per week given the tenant’s working situation/) + expect(logger).to receive(:warn).with(/Removing incfreq with error: Net income cannot be less than £10.00 per week given the tenant’s working situation/) expect { lettings_log_service.send(:create_log, lettings_log_xml) } .not_to raise_error end @@ -428,7 +428,7 @@ RSpec.describe Imports::LettingsLogsImportService do end it "intercepts the relevant validation error" do - expect(logger).to receive(:warn).with(/Removing ecstat1 with error: Net income cannot be greater than £890 per week given the tenant’s working situation/) + expect(logger).to receive(:warn).with(/Removing ecstat1 with error: Net income cannot be greater than £890.00 per week given the tenant’s working situation/) expect { lettings_log_service.send(:create_log, lettings_log_xml) } .not_to raise_error end @@ -762,7 +762,7 @@ RSpec.describe Imports::LettingsLogsImportService do end it "intercepts the relevant validation error" do - expect(logger).to receive(:warn).with(/Removing chcharge with error: Household rent and other charges must be between £10 and £1000 if paying weekly for 52 weeks/) + expect(logger).to receive(:warn).with(/Removing chcharge with error: Household rent and other charges must be between £10.00 and £1,000.00 if paying weekly for 52 weeks/) expect { lettings_log_service.send(:create_log, lettings_log_xml) } .not_to raise_error end