Browse Source

CLDC-1902 update completed text (#1283)

* Add tests to cover updated header

* Refactor formhandler
pull/1281/head
Jack 2 years ago committed by GitHub
parent
commit
dd82aee60c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 42
      app/models/form_handler.rb
  2. 181
      spec/helpers/tasklist_helper_spec.rb

42
app/models/form_handler.rb

@ -3,6 +3,19 @@ class FormHandler
include CollectionTimeHelper include CollectionTimeHelper
attr_reader :forms attr_reader :forms
SALES_SECTIONS = [
Form::Sales::Sections::PropertyInformation,
Form::Sales::Sections::Household,
Form::Sales::Sections::Finances,
Form::Sales::Sections::SaleInformation,
].freeze
LETTINGS_SECTIONS = [
Form::Lettings::Sections::TenancyAndProperty,
Form::Lettings::Sections::Household,
Form::Lettings::Sections::RentAndCharges,
].freeze
def initialize def initialize
@forms = get_all_forms @forms = get_all_forms
end end
@ -20,18 +33,11 @@ class FormHandler
end end
def sales_forms def sales_forms
sales_sections = [ {
Form::Sales::Sections::PropertyInformation, "current_sales" => Form.new(nil, current_collection_start_year, SALES_SECTIONS, "sales"),
Form::Sales::Sections::Household, "previous_sales" => Form.new(nil, current_collection_start_year - 1, SALES_SECTIONS, "sales"),
Form::Sales::Sections::Finances, "next_sales" => Form.new(nil, current_collection_start_year + 1, SALES_SECTIONS, "sales"),
Form::Sales::Sections::SaleInformation, }
]
current_form = Form.new(nil, current_collection_start_year, sales_sections, "sales")
previous_form = Form.new(nil, current_collection_start_year - 1, sales_sections, "sales")
next_form = Form.new(nil, current_collection_start_year + 1, sales_sections, "sales")
{ "current_sales" => current_form,
"previous_sales" => previous_form,
"next_sales" => next_form }
end end
def lettings_forms def lettings_forms
@ -45,17 +51,11 @@ class FormHandler
end end
end end
lettings_sections = [
Form::Lettings::Sections::TenancyAndProperty,
Form::Lettings::Sections::Household,
Form::Lettings::Sections::RentAndCharges,
]
if forms["previous_lettings"].blank? && current_collection_start_year >= 2022 if forms["previous_lettings"].blank? && current_collection_start_year >= 2022
forms["previous_lettings"] = Form.new(nil, current_collection_start_year - 1, lettings_sections, "lettings") forms["previous_lettings"] = Form.new(nil, current_collection_start_year - 1, LETTINGS_SECTIONS, "lettings")
end end
forms["current_lettings"] = Form.new(nil, current_collection_start_year, lettings_sections, "lettings") if forms["current_lettings"].blank? forms["current_lettings"] = Form.new(nil, current_collection_start_year, LETTINGS_SECTIONS, "lettings") if forms["current_lettings"].blank?
forms["next_lettings"] = Form.new(nil, current_collection_start_year + 1, lettings_sections, "lettings") if forms["next_lettings"].blank? forms["next_lettings"] = Form.new(nil, current_collection_start_year + 1, LETTINGS_SECTIONS, "lettings") if forms["next_lettings"].blank?
forms forms
end end

181
spec/helpers/tasklist_helper_spec.rb

@ -1,82 +1,153 @@
require "rails_helper" require "rails_helper"
RSpec.describe TasklistHelper do RSpec.describe TasklistHelper do
let(:empty_lettings_log) { FactoryBot.create(:lettings_log) } describe "with lettings" do
let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, needstype: 1) } let(:empty_lettings_log) { FactoryBot.create(:lettings_log) }
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json") } let(:lettings_log) { FactoryBot.create(:lettings_log, :in_progress, needstype: 1) }
let(:fake_2021_2022_form) { Form.new("spec/fixtures/forms/2021_2022.json") }
before do context "with 2021 2022 form" do
allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form) before do
end allow(FormHandler.instance).to receive(:current_lettings_form).and_return(fake_2021_2022_form)
end
describe "get next incomplete section" do describe "get next incomplete section" do
it "returns the first subsection name if it is not completed" do it "returns the first subsection name if it is not completed" do
expect(get_next_incomplete_section(lettings_log).id).to eq("household_characteristics") expect(get_next_incomplete_section(lettings_log).id).to eq("household_characteristics")
end end
it "returns the first subsection name if it is partially completed" do it "returns the first subsection name if it is partially completed" do
lettings_log["tenancycode"] = 123 lettings_log["tenancycode"] = 123
expect(get_next_incomplete_section(lettings_log).id).to eq("household_characteristics") expect(get_next_incomplete_section(lettings_log).id).to eq("household_characteristics")
end end
end end
describe "get sections count" do describe "get sections count" do
it "returns the total of sections if no status is given" do it "returns the total of sections if no status is given" do
expect(get_subsections_count(empty_lettings_log)).to eq(8) expect(get_subsections_count(empty_lettings_log)).to eq(8)
end end
it "returns 0 sections for completed sections if no sections are completed" do it "returns 0 sections for completed sections if no sections are completed" do
expect(get_subsections_count(empty_lettings_log, :completed)).to eq(0) expect(get_subsections_count(empty_lettings_log, :completed)).to eq(0)
end end
it "returns the number of not started sections" do it "returns the number of not started sections" do
expect(get_subsections_count(empty_lettings_log, :not_started)).to eq(8) expect(get_subsections_count(empty_lettings_log, :not_started)).to eq(8)
end end
it "returns the number of sections in progress" do it "returns the number of sections in progress" do
expect(get_subsections_count(lettings_log, :in_progress)).to eq(3) expect(get_subsections_count(lettings_log, :in_progress)).to eq(3)
end end
it "returns 0 for invalid state" do it "returns 0 for invalid state" do
expect(get_subsections_count(lettings_log, :fake)).to eq(0) expect(get_subsections_count(lettings_log, :fake)).to eq(0)
end end
end end
describe "get_next_page_or_check_answers" do describe "get_next_page_or_check_answers" do
let(:subsection) { lettings_log.form.get_subsection("household_characteristics") } let(:subsection) { lettings_log.form.get_subsection("household_characteristics") }
let(:user) { FactoryBot.build(:user) } let(:user) { FactoryBot.build(:user) }
it "returns the check answers page path if the section has been started already" do it "returns the check answers page path if the section has been started already" do
expect(next_page_or_check_answers(subsection, lettings_log, user)).to match(/check-answers/) expect(next_page_or_check_answers(subsection, lettings_log, user)).to match(/check-answers/)
end end
it "returns the first question page path for the section if it has not been started yet" do it "returns the first question page path for the section if it has not been started yet" do
expect(next_page_or_check_answers(subsection, empty_lettings_log, user)).to match(/tenant-code-test/) expect(next_page_or_check_answers(subsection, empty_lettings_log, user)).to match(/tenant-code-test/)
end end
it "when first question being not routed to returns the next routed question link" do
empty_lettings_log.housingneeds_a = "No"
expect(next_page_or_check_answers(subsection, empty_lettings_log, user)).to match(/person-1-gender/)
end
end
it "when first question being not routed to returns the next routed question link" do describe "subsection link" do
empty_lettings_log.housingneeds_a = "No" let(:subsection) { lettings_log.form.get_subsection("household_characteristics") }
expect(next_page_or_check_answers(subsection, empty_lettings_log, user)).to match(/person-1-gender/) let(:user) { FactoryBot.build(:user) }
context "with a subsection that's enabled" do
it "returns the subsection link url" do
expect(subsection_link(subsection, lettings_log, user)).to match(/household-characteristics/)
end
end
context "with a subsection that cannot be started yet" do
before do
allow(subsection).to receive(:status).with(lettings_log).and_return(:cannot_start_yet)
end
it "returns the label instead of a link" do
expect(subsection_link(subsection, lettings_log, user)).to match(subsection.label)
end
end
end
end end
end end
describe "subsection link" do describe "#review_log_text" do
let(:subsection) { lettings_log.form.get_subsection("household_characteristics") } around do |example|
let(:user) { FactoryBot.build(:user) } Timecop.freeze(now) do
Singleton.__init__(FormHandler)
example.run
end
Singleton.__init__(FormHandler)
end
context "with a subsection that's enabled" do context "with lettings log" do
it "returns the subsection link url" do context "when collection_period_open? == true" do
expect(subsection_link(subsection, lettings_log, user)).to match(/household-characteristics/) context "with 2023 deadline" do
let(:now) { Time.utc(2022, 6, 1) }
let(:lettings_log) { create(:lettings_log, :completed) }
it "returns relevant text" do
expect(review_log_text(lettings_log)).to eq(
"You can #{govuk_link_to 'review and make changes to this log', review_lettings_log_path(lettings_log)} until 1 July 2023.".html_safe,
)
end
end
context "with 2024 deadline" do
let(:now) { Time.utc(2023, 6, 20) }
let(:lettings_log) { create(:lettings_log, :completed, national: 18, waityear: 2) }
it "returns relevant text" do
expect(review_log_text(lettings_log)).to eq(
"You can #{govuk_link_to 'review and make changes to this log', review_lettings_log_path(lettings_log)} until 1 July 2024.".html_safe,
)
end
end
end
context "when collection_period_open? == false" do
let(:now) { Time.utc(2023, 7, 8) }
let(:lettings_log) { create(:lettings_log, :completed, startdate: Time.utc(2023, 2, 8)) }
it "returns relevant text" do
expect(review_log_text(lettings_log)).to eq("This log is from the 2022/2023 collection window, which is now closed.")
end
end end
end end
context "with a subsection that cannot be started yet" do context "with sales log" do
before do context "when collection_period_open? == true" do
allow(subsection).to receive(:status).with(lettings_log).and_return(:cannot_start_yet) let(:now) { Time.utc(2022, 6, 1) }
let(:sales_log) { create(:sales_log, :completed) }
it "returns relevant text" do
expect(review_log_text(sales_log)).to eq(
"You can #{govuk_link_to 'review and make changes to this log', review_lettings_log_path(sales_log)} until 1 July 2023.".html_safe,
)
end
end end
it "returns the label instead of a link" do context "when collection_period_open? == false" do
expect(subsection_link(subsection, lettings_log, user)).to match(subsection.label) let(:now) { Time.utc(2023, 7, 8) }
let(:sales_log) { create(:sales_log, :completed, saledate: Time.utc(2023, 2, 8)) }
it "returns relevant text" do
expect(review_log_text(sales_log)).to eq("This log is from the 2022/2023 collection window, which is now closed.")
end
end end
end end
end end

Loading…
Cancel
Save