From 9ee7ed11a4af8a428a9f3535f2a1186558fb7b38 Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:27:14 +0000 Subject: [PATCH 1/6] Add tests --- .../monthly_rent_staircasing_owned_spec.rb | 31 ++++++++++++++ .../pages/monthly_rent_staircasing_spec.rb | 31 ++++++++++++++ .../sales/pages/staircase_first_time_spec.rb | 31 ++++++++++++++ .../pages/staircase_initial_date_spec.rb | 31 ++++++++++++++ .../sales/pages/staircase_previous_spec.rb | 31 ++++++++++++++ .../form/sales/pages/staircase_sale_spec.rb | 38 ++++++++++++++++++ .../monthly_rent_after_staircasing_spec.rb | 37 +++++++++++++++++ .../monthly_rent_before_staircasing_spec.rb | 37 +++++++++++++++++ .../sales/questions/staircase_count_spec.rb | 33 +++++++++++++++ .../questions/staircase_first_time_spec.rb | 40 +++++++++++++++++++ .../questions/staircase_initial_date_spec.rb | 33 +++++++++++++++ .../questions/staircase_last_date_spec.rb | 33 +++++++++++++++ 12 files changed, 406 insertions(+) create mode 100644 spec/models/form/sales/pages/monthly_rent_staircasing_owned_spec.rb create mode 100644 spec/models/form/sales/pages/monthly_rent_staircasing_spec.rb create mode 100644 spec/models/form/sales/pages/staircase_first_time_spec.rb create mode 100644 spec/models/form/sales/pages/staircase_initial_date_spec.rb create mode 100644 spec/models/form/sales/pages/staircase_previous_spec.rb create mode 100644 spec/models/form/sales/pages/staircase_sale_spec.rb create mode 100644 spec/models/form/sales/questions/monthly_rent_after_staircasing_spec.rb create mode 100644 spec/models/form/sales/questions/monthly_rent_before_staircasing_spec.rb create mode 100644 spec/models/form/sales/questions/staircase_count_spec.rb create mode 100644 spec/models/form/sales/questions/staircase_first_time_spec.rb create mode 100644 spec/models/form/sales/questions/staircase_initial_date_spec.rb create mode 100644 spec/models/form/sales/questions/staircase_last_date_spec.rb diff --git a/spec/models/form/sales/pages/monthly_rent_staircasing_owned_spec.rb b/spec/models/form/sales/pages/monthly_rent_staircasing_owned_spec.rb new file mode 100644 index 000000000..21f0e0ee6 --- /dev/null +++ b/spec/models/form/sales/pages/monthly_rent_staircasing_owned_spec.rb @@ -0,0 +1,31 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::MonthlyRentStaircasingOwned, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection) } + + let(:page_id) { nil } + let(:page_definition) { nil } + let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1))) } + + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[mrentprestaircasing]) + end + + it "has the correct id" do + expect(page.id).to eq("monthly_rent_staircasing_owned") + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([ + { "stairowned_100?" => true }, + ]) + end +end diff --git a/spec/models/form/sales/pages/monthly_rent_staircasing_spec.rb b/spec/models/form/sales/pages/monthly_rent_staircasing_spec.rb new file mode 100644 index 000000000..347e105fd --- /dev/null +++ b/spec/models/form/sales/pages/monthly_rent_staircasing_spec.rb @@ -0,0 +1,31 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::MonthlyRentStaircasing, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection) } + + let(:page_id) { nil } + let(:page_definition) { nil } + let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1))) } + + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[mrentprestaircasing mrent]) + end + + it "has the correct id" do + expect(page.id).to eq("monthly_rent_staircasing") + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([ + { "stairowned_100?" => false }, + ]) + end +end diff --git a/spec/models/form/sales/pages/staircase_first_time_spec.rb b/spec/models/form/sales/pages/staircase_first_time_spec.rb new file mode 100644 index 000000000..9c7d713af --- /dev/null +++ b/spec/models/form/sales/pages/staircase_first_time_spec.rb @@ -0,0 +1,31 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::StaircaseFirstTime, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection) } + + let(:page_id) { nil } + let(:page_definition) { nil } + let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1))) } + + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[firststair]) + end + + it "has the correct id" do + expect(page.id).to eq("staircase_first_time") + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([ + { "staircase" => 1 }, + ]) + end +end diff --git a/spec/models/form/sales/pages/staircase_initial_date_spec.rb b/spec/models/form/sales/pages/staircase_initial_date_spec.rb new file mode 100644 index 000000000..de5806500 --- /dev/null +++ b/spec/models/form/sales/pages/staircase_initial_date_spec.rb @@ -0,0 +1,31 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::StaircaseInitialDate, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection) } + + let(:page_id) { nil } + let(:page_definition) { nil } + let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1))) } + + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[initialpurchase]) + end + + it "has the correct id" do + expect(page.id).to eq("staircase_initial_date") + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([ + { "is_firststair?" => true }, + ]) + end +end diff --git a/spec/models/form/sales/pages/staircase_previous_spec.rb b/spec/models/form/sales/pages/staircase_previous_spec.rb new file mode 100644 index 000000000..336cf0454 --- /dev/null +++ b/spec/models/form/sales/pages/staircase_previous_spec.rb @@ -0,0 +1,31 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::StaircasePrevious, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection) } + + let(:page_id) { nil } + let(:page_definition) { nil } + let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1))) } + + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[numstair lasttransaction initialpurchase]) + end + + it "has the correct id" do + expect(page.id).to eq("staircase_previous") + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([ + { "is_firststair?" => false }, + ]) + end +end diff --git a/spec/models/form/sales/pages/staircase_sale_spec.rb b/spec/models/form/sales/pages/staircase_sale_spec.rb new file mode 100644 index 000000000..c0b747605 --- /dev/null +++ b/spec/models/form/sales/pages/staircase_sale_spec.rb @@ -0,0 +1,38 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Pages::StaircaseSale, type: :model do + subject(:page) { described_class.new(page_id, page_definition, subsection) } + + let(:page_id) { nil } + let(:page_definition) { nil } + let(:subsection) { instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1))) } + + before do + allow(subsection.form).to receive(:start_year_2025_or_later?).and_return(true) + end + + it "has correct subsection" do + expect(page.subsection).to eq(subsection) + end + + it "has correct questions" do + expect(page.questions.map(&:id)).to eq(%w[staircasesale]) + end + + it "has the correct id" do + expect(page.id).to eq("staircase_sale") + end + + it "has the correct description" do + expect(page.description).to be_nil + end + + it "has correct depends_on" do + expect(page.depends_on).to eq([ + { + "staircase" => 1, + "stairowned" => 100, + } + ]) + end +end diff --git a/spec/models/form/sales/questions/monthly_rent_after_staircasing_spec.rb b/spec/models/form/sales/questions/monthly_rent_after_staircasing_spec.rb new file mode 100644 index 000000000..4ceb3df00 --- /dev/null +++ b/spec/models/form/sales/questions/monthly_rent_after_staircasing_spec.rb @@ -0,0 +1,37 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::MonthlyRentAfterStaircasing, type: :model do + subject(:question) { described_class.new(question_id, question_definition, page) } + + let(:question_id) { nil } + let(:question_definition) { nil } + let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1)))) } + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("mrent") + end + + it "has the correct type" do + expect(question.type).to eq("numeric") + end + + it "is not marked as derived" do + expect(question.derived?(nil)).to be false + end + + it "has correct width" do + expect(question.width).to eq(5) + end + + it "has correct prefix" do + expect(question.prefix).to eq("£") + end + + it "has correct min" do + expect(question.min).to eq(0) + end +end diff --git a/spec/models/form/sales/questions/monthly_rent_before_staircasing_spec.rb b/spec/models/form/sales/questions/monthly_rent_before_staircasing_spec.rb new file mode 100644 index 000000000..8d7d864a8 --- /dev/null +++ b/spec/models/form/sales/questions/monthly_rent_before_staircasing_spec.rb @@ -0,0 +1,37 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::MonthlyRentBeforeStaircasing, type: :model do + subject(:question) { described_class.new(question_id, question_definition, page) } + + let(:question_id) { nil } + let(:question_definition) { nil } + let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2023, 4, 1)))) } + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("mrentprestaircasing") + end + + it "has the correct type" do + expect(question.type).to eq("numeric") + end + + it "is not marked as derived" do + expect(question.derived?(nil)).to be false + end + + it "has correct width" do + expect(question.width).to eq(5) + end + + it "has correct prefix" do + expect(question.prefix).to eq("£") + end + + it "has correct min" do + expect(question.min).to eq(0) + end +end diff --git a/spec/models/form/sales/questions/staircase_count_spec.rb b/spec/models/form/sales/questions/staircase_count_spec.rb new file mode 100644 index 000000000..06f39b3d0 --- /dev/null +++ b/spec/models/form/sales/questions/staircase_count_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::StaircaseCount, type: :model do + subject(:question) { described_class.new(question_id, question_definition, page) } + + let(:question_id) { nil } + let(:question_definition) { nil } + let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1)))) } + + before do + allow(page.subsection.form).to receive(:start_year_2025_or_later?).and_return(true) + end + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("numstair") + end + + it "has the correct type" do + expect(question.type).to eq("numeric") + end + + it "is not marked as derived" do + expect(question.derived?(nil)).to be false + end + + it "has correct conditional for" do + expect(question.conditional_for).to eq(nil) + end +end diff --git a/spec/models/form/sales/questions/staircase_first_time_spec.rb b/spec/models/form/sales/questions/staircase_first_time_spec.rb new file mode 100644 index 000000000..59d0281a2 --- /dev/null +++ b/spec/models/form/sales/questions/staircase_first_time_spec.rb @@ -0,0 +1,40 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::StaircaseFirstTime, type: :model do + subject(:question) { described_class.new(question_id, question_definition, page) } + + let(:question_id) { nil } + let(:question_definition) { nil } + let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1)))) } + + before do + allow(page.subsection.form).to receive(:start_year_2025_or_later?).and_return(true) + end + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("firststair") + end + + it "has the correct type" do + expect(question.type).to eq("radio") + end + + it "is not marked as derived" do + expect(question.derived?(nil)).to be false + end + + it "has the correct answer_options" do + expect(question.answer_options).to eq({ + "1" => { "value" => "Yes" }, + "2" => { "value" => "No" }, + }) + end + + it "has correct conditional for" do + expect(question.conditional_for).to eq(nil) + end +end diff --git a/spec/models/form/sales/questions/staircase_initial_date_spec.rb b/spec/models/form/sales/questions/staircase_initial_date_spec.rb new file mode 100644 index 000000000..3c244e512 --- /dev/null +++ b/spec/models/form/sales/questions/staircase_initial_date_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::StaircaseInitialDate, type: :model do + subject(:question) { described_class.new(question_id, question_definition, page) } + + let(:question_id) { nil } + let(:question_definition) { nil } + let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1)))) } + + before do + allow(page.subsection.form).to receive(:start_year_2025_or_later?).and_return(true) + end + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("initialpurchase") + end + + it "has the correct type" do + expect(question.type).to eq("date") + end + + it "is not marked as derived" do + expect(question.derived?(nil)).to be false + end + + it "has correct conditional for" do + expect(question.conditional_for).to eq(nil) + end +end diff --git a/spec/models/form/sales/questions/staircase_last_date_spec.rb b/spec/models/form/sales/questions/staircase_last_date_spec.rb new file mode 100644 index 000000000..2489342fe --- /dev/null +++ b/spec/models/form/sales/questions/staircase_last_date_spec.rb @@ -0,0 +1,33 @@ +require "rails_helper" + +RSpec.describe Form::Sales::Questions::StaircaseInitialDate, type: :model do + subject(:question) { described_class.new(question_id, question_definition, page) } + + let(:question_id) { nil } + let(:question_definition) { nil } + let(:page) { instance_double(Form::Page, subsection: instance_double(Form::Subsection, form: instance_double(Form, start_date: Time.zone.local(2025, 4, 1)))) } + + before do + allow(page.subsection.form).to receive(:start_year_2025_or_later?).and_return(true) + end + + it "has correct page" do + expect(question.page).to eq(page) + end + + it "has the correct id" do + expect(question.id).to eq("lasttransaction") + end + + it "has the correct type" do + expect(question.type).to eq("date") + end + + it "is not marked as derived" do + expect(question.derived?(nil)).to be false + end + + it "has correct conditional for" do + expect(question.conditional_for).to eq(nil) + end +end From f637909474c7f57806fa4f41745b2411b9bfb8ed Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:29:09 +0000 Subject: [PATCH 2/6] Use log methods --- app/models/derived_variables/sales_log_variables.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/models/derived_variables/sales_log_variables.rb b/app/models/derived_variables/sales_log_variables.rb index 3a3e0f9cf..1edb6b0a8 100644 --- a/app/models/derived_variables/sales_log_variables.rb +++ b/app/models/derived_variables/sales_log_variables.rb @@ -75,8 +75,8 @@ module DerivedVariables::SalesLogVariables self.nationality_all = nationality_all_group if nationality_uk_or_prefers_not_to_say? self.nationality_all_buyer2 = nationality_all_buyer2_group if nationality2_uk_or_prefers_not_to_say? - self.numstair = 1 if firststair == 1 - self.mrent = 0 if stairowned == 100 + self.numstair = 1 if is_firststair? + self.mrent = 0 if stairowned_100? set_encoded_derived_values!(DEPENDENCIES) end From beb2a86e8d4a46d02577497838008f0f48ff6ed2 Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:31:13 +0000 Subject: [PATCH 3/6] Lint --- spec/models/form/sales/pages/staircase_sale_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/form/sales/pages/staircase_sale_spec.rb b/spec/models/form/sales/pages/staircase_sale_spec.rb index c0b747605..17a140797 100644 --- a/spec/models/form/sales/pages/staircase_sale_spec.rb +++ b/spec/models/form/sales/pages/staircase_sale_spec.rb @@ -32,7 +32,7 @@ RSpec.describe Form::Sales::Pages::StaircaseSale, type: :model do { "staircase" => 1, "stairowned" => 100, - } + }, ]) end end From ec40184e4b94baf73faa4c120c7d25e98902a181 Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:32:12 +0000 Subject: [PATCH 4/6] Update test --- spec/models/form/sales/questions/staircase_last_date_spec.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spec/models/form/sales/questions/staircase_last_date_spec.rb b/spec/models/form/sales/questions/staircase_last_date_spec.rb index 2489342fe..2efa5ccc7 100644 --- a/spec/models/form/sales/questions/staircase_last_date_spec.rb +++ b/spec/models/form/sales/questions/staircase_last_date_spec.rb @@ -1,6 +1,6 @@ require "rails_helper" -RSpec.describe Form::Sales::Questions::StaircaseInitialDate, type: :model do +RSpec.describe Form::Sales::Questions::StaircaseLastDate, type: :model do subject(:question) { described_class.new(question_id, question_definition, page) } let(:question_id) { nil } From 004658cf7635ea4ac1afb8df4179588df07d64f1 Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:36:11 +0000 Subject: [PATCH 5/6] Remove compact --- app/models/form/sales/pages/staircase_first_time.rb | 2 +- app/models/form/sales/pages/staircase_initial_date.rb | 2 +- app/models/form/sales/pages/staircase_previous.rb | 2 +- app/models/form/sales/pages/staircase_sale.rb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/models/form/sales/pages/staircase_first_time.rb b/app/models/form/sales/pages/staircase_first_time.rb index 9ea6089de..239a2a930 100644 --- a/app/models/form/sales/pages/staircase_first_time.rb +++ b/app/models/form/sales/pages/staircase_first_time.rb @@ -10,6 +10,6 @@ class Form::Sales::Pages::StaircaseFirstTime < ::Form::Page def questions @questions ||= [ Form::Sales::Questions::StaircaseFirstTime.new(nil, nil, self), - ].compact + ] end end diff --git a/app/models/form/sales/pages/staircase_initial_date.rb b/app/models/form/sales/pages/staircase_initial_date.rb index faf06b20e..4a3b49a26 100644 --- a/app/models/form/sales/pages/staircase_initial_date.rb +++ b/app/models/form/sales/pages/staircase_initial_date.rb @@ -10,6 +10,6 @@ class Form::Sales::Pages::StaircaseInitialDate < ::Form::Page def questions @questions ||= [ Form::Sales::Questions::StaircaseInitialDate.new(nil, nil, self), - ].compact + ] end end diff --git a/app/models/form/sales/pages/staircase_previous.rb b/app/models/form/sales/pages/staircase_previous.rb index cc1ae46b6..30d0139ab 100644 --- a/app/models/form/sales/pages/staircase_previous.rb +++ b/app/models/form/sales/pages/staircase_previous.rb @@ -13,6 +13,6 @@ class Form::Sales::Pages::StaircasePrevious < ::Form::Page Form::Sales::Questions::StaircaseCount.new(nil, nil, self), Form::Sales::Questions::StaircaseLastDate.new(nil, nil, self), Form::Sales::Questions::StaircaseInitialDate.new(nil, nil, self), - ].compact + ] end end diff --git a/app/models/form/sales/pages/staircase_sale.rb b/app/models/form/sales/pages/staircase_sale.rb index aabf56610..116db72b5 100644 --- a/app/models/form/sales/pages/staircase_sale.rb +++ b/app/models/form/sales/pages/staircase_sale.rb @@ -12,6 +12,6 @@ class Form::Sales::Pages::StaircaseSale < ::Form::Page def questions @questions ||= [ Form::Sales::Questions::StaircaseSale.new(nil, nil, self), - ].compact + ] end end From b3bd8880578c019e169288899c56c1e2e5d36b30 Mon Sep 17 00:00:00 2001 From: Manny Dinssa <44172848+Dinssa@users.noreply.github.com> Date: Tue, 19 Nov 2024 09:41:06 +0000 Subject: [PATCH 6/6] Change section display condition --- .../subsections/shared_ownership_staircasing_transaction.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/models/form/sales/subsections/shared_ownership_staircasing_transaction.rb b/app/models/form/sales/subsections/shared_ownership_staircasing_transaction.rb index cd0c93801..fd51b970a 100644 --- a/app/models/form/sales/subsections/shared_ownership_staircasing_transaction.rb +++ b/app/models/form/sales/subsections/shared_ownership_staircasing_transaction.rb @@ -30,6 +30,6 @@ class Form::Sales::Subsections::SharedOwnershipStaircasingTransaction < ::Form:: end def displayed_in_tasklist?(log) - (log.ownershipsch.nil? || log.ownershipsch == 1) && (log.staircase.nil? || log.staircase == 1) + log.staircase == 1 && (log.ownershipsch.nil? || log.ownershipsch == 1) end end