From ffdf381e656a2fda28566992f46b43daaab094da Mon Sep 17 00:00:00 2001 From: Jack S Date: Thu, 29 Sep 2022 15:29:19 +0100 Subject: [PATCH] Add derived variables to sales log --- .../derived_variables/sales_log_variables.rb | 5 +++++ app/models/lettings_log.rb | 4 ---- app/models/log.rb | 4 ++++ app/models/sales_log.rb | 5 +++++ spec/models/lettings_log_spec.rb | 3 +++ spec/models/sales_log_spec.rb | 3 +++ .../shared_examples_for_derived_fields.rb | 17 +++++++++++++++++ 7 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 app/models/derived_variables/sales_log_variables.rb create mode 100644 spec/shared/shared_examples_for_derived_fields.rb diff --git a/app/models/derived_variables/sales_log_variables.rb b/app/models/derived_variables/sales_log_variables.rb new file mode 100644 index 000000000..2b3542813 --- /dev/null +++ b/app/models/derived_variables/sales_log_variables.rb @@ -0,0 +1,5 @@ +module DerivedVariables::SalesLogVariables + def set_derived_fields! + self.ethnic = 17 if ethnic_refused? + end +end diff --git a/app/models/lettings_log.rb b/app/models/lettings_log.rb index c85f2d0c3..53e8bcb5a 100644 --- a/app/models/lettings_log.rb +++ b/app/models/lettings_log.rb @@ -372,10 +372,6 @@ class LettingsLog < Log hb == 7 end - def ethnic_refused? - ethnic_group == 17 - end - def receives_housing_related_benefits? if collection_start_year <= 2021 receives_housing_benefit_only? || receives_uc_with_housing_element_excl_housing_benefit? || diff --git a/app/models/log.rb b/app/models/log.rb index e24a205fc..54770515f 100644 --- a/app/models/log.rb +++ b/app/models/log.rb @@ -36,6 +36,10 @@ class Log < ApplicationRecord false end + def ethnic_refused? + ethnic_group == 17 + end + private def update_status! diff --git a/app/models/sales_log.rb b/app/models/sales_log.rb index a2a6dcff3..8ce81c151 100644 --- a/app/models/sales_log.rb +++ b/app/models/sales_log.rb @@ -3,10 +3,15 @@ class SalesLogValidator < ActiveModel::Validator end class SalesLog < Log + include DerivedVariables::SalesLogVariables + self.inheritance_column = :_type_disabled + has_paper_trail validates_with SalesLogValidator + before_validation :set_derived_fields! + before_validation :reset_invalidated_dependent_fields! scope :filter_by_year, ->(year) { where(saledate: Time.zone.local(year.to_i, 4, 1)...Time.zone.local(year.to_i + 1, 4, 1)) } scope :search_by, ->(param) { filter_by_id(param) } diff --git a/spec/models/lettings_log_spec.rb b/spec/models/lettings_log_spec.rb index 2dbf53595..71aae261a 100644 --- a/spec/models/lettings_log_spec.rb +++ b/spec/models/lettings_log_spec.rb @@ -1,4 +1,5 @@ require "rails_helper" +require "shared/shared_examples_for_derived_fields" RSpec.describe LettingsLog do let(:owning_organisation) { FactoryBot.create(:organisation) } @@ -10,6 +11,8 @@ RSpec.describe LettingsLog 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 + it "inherits from log" do expect(described_class).to be < Log expect(described_class).to be < ApplicationRecord diff --git a/spec/models/sales_log_spec.rb b/spec/models/sales_log_spec.rb index 31a41d411..3ee033971 100644 --- a/spec/models/sales_log_spec.rb +++ b/spec/models/sales_log_spec.rb @@ -1,9 +1,12 @@ require "rails_helper" +require "shared/shared_examples_for_derived_fields" RSpec.describe SalesLog, type: :model do let(:owning_organisation) { FactoryBot.create(:organisation) } let(:created_by_user) { FactoryBot.create(:user) } + include_examples "shared examples for derived fields", :sales_log + it "inherits from log" do expect(described_class).to be < Log expect(described_class).to be < ApplicationRecord diff --git a/spec/shared/shared_examples_for_derived_fields.rb b/spec/shared/shared_examples_for_derived_fields.rb new file mode 100644 index 000000000..6382ef4f4 --- /dev/null +++ b/spec/shared/shared_examples_for_derived_fields.rb @@ -0,0 +1,17 @@ +require "rails_helper" + +RSpec.shared_examples "shared examples for derived fields" do |log_type| + describe "sets ethnic based on the value of ethnic_refused" do + it "is set to 17 when ethnic_group is 17" do + log = FactoryBot.build(log_type, ethnic_group: 17, ethnic: nil) + + expect { log.set_derived_fields! }.to change(log, :ethnic).from(nil).to(17) + end + + it "is is not modified otherwise" do + log = FactoryBot.build(log_type, ethnic_group: nil, ethnic: nil) + + expect { log.set_derived_fields! }.not_to change(log, :ethnic) + end + end +end