Browse Source

Add tests to cover updated header

pull/1283/head
Jack S 3 years ago
parent
commit
beb8ad42c5
  1. 181
      spec/helpers/tasklist_helper_spec.rb

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